]> gitweb.fluxo.info Git - puppet-php.git/commitdiff
Support multiple PHP series at the same time, currently only 5 and 7
authorSilvio Rhatto <rhatto@riseup.net>
Fri, 22 Jun 2018 21:27:05 +0000 (18:27 -0300)
committerSilvio Rhatto <rhatto@riseup.net>
Fri, 22 Jun 2018 21:27:05 +0000 (18:27 -0300)
14 files changed:
TODO.md [deleted file]
manifests/apc.pp
manifests/fpm.pp
manifests/init.pp
manifests/packages.pp [new file with mode: 0644]
manifests/params.pp [new file with mode: 0644]
manifests/series5.pp
manifests/series5/defaults.pp
manifests/series5/hardened.pp
manifests/series5/packages.pp
manifests/series7.pp
manifests/series7/defaults.pp
manifests/series7/hardened.pp
manifests/series7/packages.pp

diff --git a/TODO.md b/TODO.md
deleted file mode 100644 (file)
index 19d1818..0000000
--- a/TODO.md
+++ /dev/null
@@ -1,5 +0,0 @@
-TODO
-====
-
-* Refactor to support multiple PHP versions (5.6, 7.0, 7.1, 7.2 etc) and multiple SAPIs at the same time?
-  One way to do that is to make `$series` as an array.
index e916f1c7eccdeb69b501229212ff4ffb65a0abfd..c77cfa16a0fdb4bd2071f2f6459a83b4e9ec26e6 100644 (file)
@@ -1,20 +1,22 @@
 class php::apc(
+  $series,
   $ensure = 'present',
 ) {
-  $series = $::php::series
-  $fpm    = $::php::fpm
+  $fpm              = $::php::fpm
+  $services_portion = regsubst($series,           '^', 'php')
+  $services         = regsubst($services_portion, '$', '-fpm')
 
   if $series == '5' {
-    $version = $::php::series5::version
+    $version = $::php::params::version5
   }
   else {
-    $version = $::php::series7::version
+    $version = $::php::params::version7
   }
 
   package { [ 'php-apcu', 'php-apcu-bc' ]:
     ensure => $ensure,
     notify => $fpm ? {
-      'present' => Service["php${version}-fpm"],
+      'present' => Service[$services],
       default   => undef,
     },
   }
index a3da2db54aa87bcfb0062d27e71cb976f77710dc..9b12b93c3c5a9dae754a1b9a3411e248d65d602a 100644 (file)
@@ -3,11 +3,11 @@ define php::fpm(
   $ensure = 'present',
 ) {
   if $series == '5' {
-    $version = $::php::series5::version
+    $version = $::php::params::version5
     $folder  = $::php::series5::folder
   }
   else {
-    $version = $::php::series7::version
+    $version = $::php::params::version7
     $folder  = $::php::series7::folder
   }
 
index daed35feb2531e5602ce09fed35050cf9983ad27..3f1dbab4ac67ce76919b30fb6af2c12315135755 100644 (file)
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 class php(
-  $series         = '5',
+  $series         = [ '5', '7' ],
   $hardened       = true,
   $apc            = absent,
   $fpm            = absent,
   $manage_mod_php = false,
+  $default_cli    = '7'
 ) {
-  class { "php::series${series}":
-    hardened       => $hardened,
-    manage_mod_php => $manage_mod_php,
-  }
+  include php::params
 
-  class { 'php::apc':
-    ensure => $apc,
+  $series.each |$item| {
+    class { "php::series${item}":
+      hardened       => $hardened,
+      manage_mod_php => $manage_mod_php,
+    }
+
+    php::fpm { "php-fpm-${item}":
+      series => $item,
+      ensure => $fpm,
+    }
   }
 
-  php::fpm { "php-fpm-${series}":
+  class { 'php::apc':
     series => $series,
-    ensure => $fpm,
+    ensure => $apc,
   }
 }
diff --git a/manifests/packages.pp b/manifests/packages.pp
new file mode 100644 (file)
index 0000000..0ea9292
--- /dev/null
@@ -0,0 +1,6 @@
+class php::packages {
+  package { [ 'php', 'php-imagick', 'php-mysql', 'php-sqlite3', 'php-gd', 'php-curl' ]:
+    ensure  => installed,
+    require => File['/etc/apt/sources.list.d/php.list'],
+  }
+}
diff --git a/manifests/params.pp b/manifests/params.pp
new file mode 100644 (file)
index 0000000..5585d5b
--- /dev/null
@@ -0,0 +1,9 @@
+class php::params {
+  $version7 = '7.2'
+  $version5 = $::lsbdistcodename ? {
+    'xenial'  => '5.6',
+    'trusty'  => '5.6',
+    'stretch' => '5.6',
+    default   => '5',
+  }
+}
index e39dd8b4457d92bc7cbef0e4ecadd391c493d737..420259249a005deb7c4e3a4d5acbe958d6bc2808 100644 (file)
@@ -14,14 +14,8 @@ class php::series5(
     }
   }
 
-  $version = $::lsbdistcodename ? {
-    'xenial'  => '5.6',
-    'trusty'  => '5.6',
-    'stretch' => '5.6',
-    default   => '5',
-  }
-
-  $folder = $::lsbdistcodename ? {
+  $version = $::php::params::version5
+  $folder  = $::lsbdistcodename ? {
     'xenial'  => "/etc/php/${version}",
     'trusty'  => "/etc/php/${version}",
     'stretch' => "/etc/php/${version}",
@@ -72,10 +66,17 @@ class php::series5(
   }
 
   # The needed apache modules
-  if $manage_mod_php == true {
+  if $manage_mod_php == '5' {
+    $version7 = $::php::params::version7
+
     apache::module { "php${version}":
       ensure  => present,
       require => Package["libapache2-mod-php${version}"],
     }
+
+    apache::module { "php${version7}":
+      ensure  => absent,
+      require => Package["libapache2-mod-php${version}"],
+    }
   }
 }
index 15cb8a232f7139610a77152c6e554faabdc92fdb..0de7462d2aac6ec4d4f90a73f3d0a598aea0dcc6 100644 (file)
@@ -1,7 +1,7 @@
 class php::series5::defaults {
   php::config {
-    'error_reporting'     : value => 'E_ALL & ~E_NOTICE & ~E_STRICT';
-    'post_max_size'       : value => '100M';
-    'upload_max_filesize' : value => '100M';
+    'error_reporting_5'     : param => 'error_reporting',     series => '5', value => 'E_ALL & ~E_NOTICE & ~E_STRICT';
+    'post_max_size_5'       : param => 'post_max_size',       series => '5', value => '100M';
+    'upload_max_filesize_5' : param => 'upload_max_filezise', series => '5', value => '100M';
   }
 }
index e5124022212584fab71e0701fb2b410917e7964b..7026a25092655859f6e9ef42064fe2fcf926bde6 100644 (file)
@@ -1,8 +1,19 @@
 class php::series5::hardened {
+  $fpm               = $::php::fpm
+  $disable_functions = 'phpinfo, system, exec, shell_exec, passthru, proc_get_status, proc_open, popen, proc_close, proc_nice, proc_terminate, pcntl_exec, proc_open, show_source, dl, symlink, system_exec'
+  #$disable_functions = 'disable_functions = phpinfo, system, exec, shell_exec, passthru, proc_get_status, proc_open, popen, proc_close, proc_nice, proc_terminate, pcntl_exec, proc_open, curl_init, parse_ini_file, show_source, dl, symlink, syslog, mail, system_exec',
+
+  if $fpm == 'present' {
+    php::config {
+      'allow_url_fopen_5_fpm'   : param => 'allow_url_fopen',   sapi => 'fpm', value => 'Off';
+      'allow_url_include_5_fpm' : param => 'allow_url_include', sapi => 'fpm', value => 'Off';
+      'disable_functions_5_fpm' : param => 'disable_functions', sapi => 'fpm', value => $disable_functions;
+    }
+  }
+
   php::config {
     'allow_url_fopen'   : value => 'Off';
     'allow_url_include' : value => 'Off';
-    'disable_functions' : value => 'phpinfo, system, exec, shell_exec, passthru, proc_get_status, proc_open, popen, proc_close, proc_nice, proc_terminate, pcntl_exec, proc_open, show_source, dl, symlink, system_exec';
-    #value => 'disable_functions = phpinfo, system, exec, shell_exec, passthru, proc_get_status, proc_open, popen, proc_close, proc_nice, proc_terminate, pcntl_exec, proc_open, curl_init, parse_ini_file, show_source, dl, symlink, syslog, mail, system_exec',
+    'disable_functions' : value => $disable_functions;
   }
 }
index 2b7dd3d64bdf4570f938105ab07ad49d67676e3e..373a655c524c2c7974aa66bf41b68291aa2aced3 100644 (file)
@@ -1,28 +1,30 @@
-class php::series5::packages {
+class php::series5::packages inherits php::packages {
+  $version = $::php::params::version5
+
   # The needed packages: we could also try libapache2-mod-php5.6filter
   package { 'php5':
-    name    => 'php5.6',
+    name    => "php${version}",
     require => File['/etc/apt/sources.list.d/php.list'],
   }
 
   package { 'php5-cli':
-    name    => 'php5.6-cli',
+    name    => "php${version}-cli",
     require => File['/etc/apt/sources.list.d/php.list'],
   }
 
-  package { [ 'php5.6-mysql', 'php5.6-sqlite3', 'php5.6-curl', 'php5.6-gmp', 'libapache2-mod-php5.6' ]:
+  package { [ "php${version}-mysql", "php${version}-sqlite3", "php${version}-curl", "php${version}-gmp", "libapache2-mod-php${version}" ]:
     ensure  => installed,
     require => File['/etc/apt/sources.list.d/php.list'],
   }
 
   # Optional packages
-  package { [ "php5.6-gd", "php-imagick", "php5.6-xml", "php5.6-mbstring" ]:
+  package { [ "php${version}-gd", "php${version}-xml", "php${version}-mbstring" ]:
     ensure  => installed,
     require => File['/etc/apt/sources.list.d/php.list'],
   }
 
   # Not available anymore
-  package { 'php5.6-suhosin':
+  package { 'php${version}-suhosin':
     ensure  => absent,
     require => File['/etc/apt/sources.list.d/php.list'],
   }
@@ -33,10 +35,12 @@ class php::series5::packages {
   }
 
   # Default alternative
-  file { "/etc/alternatives/php":
-    ensure  => "/usr/bin/php5.6",
-    owner   => root,
-    group   => root,
-    require => Package['php5'],
+  if $::php::default_cli == '5' {
+    file { "/etc/alternatives/php":
+      ensure  => "/usr/bin/php${version}",
+      owner   => root,
+      group   => root,
+      require => Package['php5-cli'],
+    }
   }
 }
index 38b82d1233b919da383b5f2f9d2225cff62dd9eb..d6af5962a9c2a420d907946c0b48bd6e16eddcb1 100644 (file)
@@ -14,7 +14,7 @@ class php::series7(
     }
   }
 
-  $version = '7.2'
+  $version = $::php::params::version7
   $folder  = "/etc/php/${version}"
 
   include php::series7::packages
@@ -26,11 +26,18 @@ class php::series7(
   }
 
   # The needed apache modules
-  if $manage_mod_php == true {
+  if $manage_mod_php == '7' {
+    $version5 = $::php::params::version5
+
     apache::module { "php${version}":
       ensure  => present,
       require => Package["libapache2-mod-php${version}"],
     }
+
+    apache::module { "php${version5}":
+      ensure  => absent,
+      require => Package["libapache2-mod-php${version}"],
+    }
   }
 
   file { [ "${folder}", "${folder}/cli", "${folder}/apache2", "${folder}/cli/conf.d", "${folder}/apache2/conf.d" ]:
index 936d165dd9a111998608c78b4cf3350465b78b0d..6d7e5b9f05fac665ea6e6eda616c37372e4c32a0 100644 (file)
@@ -1,7 +1,7 @@
 class php::series7::defaults {
   php::config {
-    'error_reporting'     : series => '7', value => 'E_ALL & ~E_NOTICE & ~E_STRICT';
-    'post_max_size'       : series => '7', value => '100M';
-    'upload_max_filesize' : series => '7', value => '100M';
+    'error_reporting_7'     : param => 'error_reporting',     series => '7', value => 'E_ALL & ~E_NOTICE & ~E_STRICT';
+    'post_max_size_7'       : param => 'post_max_size',       series => '7', value => '100M';
+    'upload_max_filesize_7' : param => 'upload_max_filezise', series => '7', value => '100M';
   }
 }
index 2579f79ce5d0ea94147986f5ae04159635545c8c..d0fb67cf2625778da8c67372fb687164fa7f35aa 100644 (file)
@@ -1,20 +1,19 @@
 class php::series7::hardened {
   $fpm               = $::php::fpm
   $disable_functions = 'pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,phpinfo, system, exec, shell_exec, passthru, proc_get_status, proc_open, popen, proc_close, proc_nice, proc_terminate, pcntl_exec, proc_open, show_source, dl, symlink, system_exec'
-  # $disable_functions = 'pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,phpinfo, system, exec, shell_exec, passthru, proc_get_status, proc_open, popen, proc_close, proc_nice, proc_terminate, pcntl_exec, proc_open, curl_init, parse_ini_file, show_source, dl, symlink, syslog, mail, system_exec'
+  #$disable_functions = 'pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,phpinfo, system, exec, shell_exec, passthru, proc_get_status, proc_open, popen, proc_close, proc_nice, proc_terminate, pcntl_exec, proc_open, curl_init, parse_ini_file, show_source, dl, symlink, syslog, mail, system_exec'
 
   if $fpm == 'present' {
     php::config {
-      'allow_url_fopen'   : series => '7', sapi => 'fpm', value => 'Off';
-      'allow_url_include' : series => '7', sapi => 'fpm', value => 'Off';
-      'disable_functions' : series => '7', sapi => 'fpm', value => $disable_functions;
+      'allow_url_fopen_7_fpm'   : param => 'allow_url_fopen',   series => '7', sapi => 'fpm', value => 'Off';
+      'allow_url_include_7_fpm' : param => 'allow_url_include', series => '7', sapi => 'fpm', value => 'Off';
+      'disable_functions_7_fpm' : param => 'disable_functions', series => '7', sapi => 'fpm', value => $disable_functions;
     }
   }
-  else {
-    php::config {
-      'allow_url_fopen'   : series => '7', value => 'Off';
-      'allow_url_include' : series => '7', value => 'Off';
-      'disable_functions' : series => '7', value => $disable_functions;
-    }
+
+  php::config {
+    'allow_url_fopen_7'   : param => 'allow_url_fopen',   series => '7', value => 'Off';
+    'allow_url_include_7' : param => 'allow_url_include', series => '7', value => 'Off';
+    'disable_functions_7' : param => 'disable_functions', series => '7', value => $disable_functions;
   }
 }
index f4cef5220a742d9006aca0d454fbfd26d4015d99..541ece391e0fb7c0e12b98b34e163d8690643559 100644 (file)
@@ -1,12 +1,22 @@
-class php::series7::packages {
-  $version = $::php::series7::version
+class php::series7::packages inherits php::packages {
+  $version = $::php::params::version7
 
-  package { [ 'php', 'php-mysql', "php${version}-mysql", 'php-sqlite3', 'php-cli', 'php-curl', "php${version}-curl", 'php-gmp', "libapache2-mod-php${version}" ]:
+  package { [ "php${version}-common", "php${version}-mysql", "php${version}-cli", "php${version}-curl", 'php-gmp', "libapache2-mod-php${version}" ]:
     ensure => installed,
   }
 
   # Optional packages
-  package { [ "php-gd", "php${version}-gd", "php-imagick" ]:
+  package { [ "php${version}-gd" ]:
     ensure => installed,
   }
+
+  # Default alternative
+  if $::php::default_cli == '7' {
+    file { "/etc/alternatives/php":
+      ensure  => "/usr/bin/php${version}",
+      owner   => root,
+      group   => root,
+      require => Package["php${version}-cli"],
+    }
+  }
 }