diff --git a/php/ng/cli/ini.sls b/php/ng/cli/ini.sls index 1d5c92d..e334d5e 100644 --- a/php/ng/cli/ini.sls +++ b/php/ng/cli/ini.sls @@ -14,5 +14,16 @@ include: {% endif %} {% endfor %} +{% set pillar_php_ng_version = salt['pillar.get']('php:ng:version', '7.0') %} +{% if pillar_php_ng_version is iterable and pillar_php_ng_version is not string %} + {% for version in pillar_php_ng_version %} + {% set first_version = pillar_php_ng_version[0]|string %} + {% set ini = php.lookup.cli.ini|replace(first_version, version) %} +php_cli_ini_{{ version }}: + {{ php_ini(ini, php.cli.ini.opts, settings) }} + {% endfor %} +{% else %} + php_cli_ini: {{ php_ini(php.lookup.cli.ini, php.cli.ini.opts, settings) }} +{% endif %} diff --git a/php/ng/cli/init.sls b/php/ng/cli/init.sls index 78cb5a3..fad7a0a 100644 --- a/php/ng/cli/init.sls +++ b/php/ng/cli/init.sls @@ -5,8 +5,19 @@ include: - php.ng.cli.install - php.ng.cli.ini +{% set pillar_php_ng_version = salt['pillar.get']('php:ng:version', '7.0') %} +{% if pillar_php_ng_version is iterable and pillar_php_ng_version is not string %} +extend: + {% for version in pillar_php_ng_version %} + php_cli_ini_{{ version }}: + file: + - require: + - sls: php.ng.cli.install + {% endfor %} +{% else %} extend: php_cli_ini: file: - require: - sls: php.ng.cli.install +{% endif %} diff --git a/php/ng/cli/install.sls b/php/ng/cli/install.sls index 432e545..2f7df20 100644 --- a/php/ng/cli/install.sls +++ b/php/ng/cli/install.sls @@ -6,8 +6,18 @@ include: {%- if salt['grains.get']('os_family') == "Debian" %} {% set current_php = salt['alternatives.show_current']('php') %} +{% set pillar_php_ng_version = salt['pillar.get']('php:ng:version', '7.0') %} +{% if pillar_php_ng_version is iterable and pillar_php_ng_version is not string %} + {% if 'alternatives_version' in salt['pillar.get']('php:ng') %} + {% set phpng_version = salt['pillar.get']('php:ng:alternatives_version') %} + {% else %} + {% set phpng_version = false %} + {% endif %} +{% else %} {% set phpng_version = salt['pillar.get']('php:ng:version', '7.0')|string %} +{% endif %} +{% if phpng_version %} php_{{ phpng_version }}_link: alternatives.set: - name: php @@ -18,3 +28,4 @@ php_{{ phpng_version }}_link: - which php - test {{ current_php }} != $(which php{{ phpng_version }}) {% endif %} +{% endif %} diff --git a/php/ng/fpm/config.sls b/php/ng/fpm/config.sls index 0c4d6d6..1227d01 100644 --- a/php/ng/fpm/config.sls +++ b/php/ng/fpm/config.sls @@ -14,6 +14,39 @@ include: {% endif %} {% endfor %} +{% set pillar_php_ng_version = salt['pillar.get']('php:ng:version', '7.0') %} +{% if pillar_php_ng_version is iterable and pillar_php_ng_version is not string %} + {% for version in pillar_php_ng_version %} + {% set conf_settings = odict(php.lookup.fpm.defaults) %} + {% set first_version = pillar_php_ng_version[0]|string %} + {% set ini = php.lookup.fpm.ini|replace(first_version, version) %} + {% set conf = php.lookup.fpm.conf|replace(first_version, version) %} + {% set pools = php.lookup.fpm.pools|replace(first_version, version) %} + + {% for key, value in conf_settings.items() %} + {% if value is string %} + {% do conf_settings.update({key: value.replace(first_version, version)}) %} + {% endif %} + {% endfor %} + {% do conf_settings.global.update({'pid': '/var/run/php' + version + '-fpm.pid' }) %} + {% do conf_settings.global.update({'error_log': '/var/log/php' + version + '-fpm.log' }) %} + +php_fpm_ini_config_{{ version }}: + {{ php_ini(ini, php.fpm.config.ini.opts, ini_settings) }} + +php_fpm_conf_config_{{ version }}: + {{ php_ini(conf, php.fpm.config.conf.opts, odict(conf_settings)) }} + +{{ pools }}: + file.directory: + - name: {{ pools }} + - user: {{ php.lookup.fpm.user }} + - group: {{ php.lookup.fpm.group }} + - file_mode: 755 + - make_dirs: True + {% endfor %} +{% else %} + {% set conf_settings = php.lookup.fpm.defaults %} {% do conf_settings.update(php.fpm.config.conf.settings) %} @@ -30,3 +63,4 @@ php_fpm_conf_config: - group: {{ php.lookup.fpm.group }} - file_mode: 755 - make_dirs: True +{% endif %} diff --git a/php/ng/fpm/init.sls b/php/ng/fpm/init.sls index 80b446a..59a1f08 100644 --- a/php/ng/fpm/init.sls +++ b/php/ng/fpm/init.sls @@ -6,14 +6,34 @@ include: - php.ng.fpm.service - php.ng.fpm.pools +{% set pillar_php_ng_version = salt['pillar.get']('php:ng:version', '7.0') %} extend: php_fpm_service: service: - watch: + {% if pillar_php_ng_version is iterable and pillar_php_ng_version is not string %} + {% for version in pillar_php_ng_version %} + - file: php_fpm_ini_config_{{ version }} + - file: php_fpm_conf_config_{{ version }} + {% endfor %} + {% else %} - file: php_fpm_ini_config - file: php_fpm_conf_config + {% endif %} - require: - sls: php.ng.fpm.config + {% if pillar_php_ng_version is iterable and pillar_php_ng_version is not string %} + {% for version in pillar_php_ng_version %} + php_fpm_ini_config_{{ version }}: + file: + - require: + - pkg: php_install_fpm + php_fpm_conf_config_{{ version }}: + file: + - require: + - pkg: php_install_fpm + {% endfor %} + {% else %} php_fpm_ini_config: file: - require: @@ -22,3 +42,4 @@ extend: file: - require: - pkg: php_install_fpm + {% endif %} diff --git a/php/ng/fpm/pools_config.sls b/php/ng/fpm/pools_config.sls index e63ec2a..6ffcdb4 100644 --- a/php/ng/fpm/pools_config.sls +++ b/php/ng/fpm/pools_config.sls @@ -20,7 +20,15 @@ include: {% do pvalues.update(pool_defaults) %} {% endfor %} {% set state = 'php_fpm_pool_conf_' ~ loop.index0 %} -{% set fpath = path_join(config.get('filename', pool), php.lookup.fpm.pools) %} + +{% set pillar_php_ng_version = salt['pillar.get']('php:ng:version', '7.0') %} +{% if pillar_php_ng_version is iterable and pillar_php_ng_version is not string %} + {% set first_fpath = path_join(config.get('filename', pool), php.lookup.fpm.pools) %} + {% set first_version = pillar_php_ng_version[0]|string %} + {% set fpath = first_fpath.replace(first_version, config.get('phpversion', '7.0')) %} +{% else %} + {% set fpath = path_join(config.get('filename', pool), php.lookup.fpm.pools) %} +{% endif %} {{ state }}: {% if config.enabled %} diff --git a/php/ng/ini.jinja b/php/ng/ini.jinja index 8dfc1fe..d63b960 100644 --- a/php/ng/ini.jinja +++ b/php/ng/ini.jinja @@ -10,5 +10,5 @@ - source: salt://php/ng/files/php.ini - template: jinja - context: - config: {{ serialize(settings) }} + config: {{ serialize(odict(settings)) }} {%- endmacro -%} diff --git a/php/ng/installed.jinja b/php/ng/installed.jinja index 9db803d..06dbeb3 100644 --- a/php/ng/installed.jinja +++ b/php/ng/installed.jinja @@ -12,16 +12,31 @@ include: {% set pkgs = [] %} {% set specials = [] %} +{% set pillar_php_ng_version = salt['pillar.get']('php:ng:version', '7.0') %} {% if pkginfo is iterable and pkginfo is not string %} {% for pkg in pkginfo %} {% if pkg is mapping %} {% do specials.append(pkg) %} {% else %} {% do pkgs.append(pkg) %} + {% if pillar_php_ng_version is iterable and pillar_php_ng_version is not string %} + {% set first_version = pillar_php_ng_version[0]|string %} + {% for other_version in pillar_php_ng_version %} + {% set other_version_str = other_version|string %} + {% do pkgs.append(pkg.replace(first_version, other_version_str)) %} + {% endfor %} + {% endif %} {% endif %} {% endfor %} {% else %} {% do pkgs.append(pkginfo) %} + {% if pillar_php_ng_version is iterable and pillar_php_ng_version is not string %} + {% set first_version = pillar_php_ng_version[0]|string %} + {% for other_version in pillar_php_ng_version %} + {% set other_version_str = other_version|string %} + {% do pkgs.append(pkginfo.replace(first_version, other_version_str)) %} + {% endfor %} + {% endif %} {% endif %} {% if grains['os_family'] == "Debian" and (state == 'cli' or state == 'fpm' or state == 'php') %} diff --git a/php/ng/map.jinja b/php/ng/map.jinja index 3fdbb14..f4f45f6 100644 --- a/php/ng/map.jinja +++ b/php/ng/map.jinja @@ -1,7 +1,12 @@ # -*- coding: utf-8 -*- # vim: ft=jinja -{%- set phpng_version = salt['pillar.get']('php:ng:version', '7.0')|string %} +{% set pillar_php_ng_version = salt['pillar.get']('php:ng:version', '7.0') %} +{%- if pillar_php_ng_version is iterable and pillar_php_ng_version is not string %} + {%- set phpng_version = pillar_php_ng_version[0]|string %} +{% else %} + {%- set phpng_version = pillar_php_ng_version|string %} +{% endif %} {%- set freebsd_phpng_version = phpng_version.replace('.', '') %} {%- if salt['grains.get']('os') == "Ubuntu" %} diff --git a/pillar.example b/pillar.example index 8385933..c9f21ce 100644 --- a/pillar.example +++ b/pillar.example @@ -20,6 +20,17 @@ php: # when you add the php.mongo formula to your execution list mongo_version: "1.5.5" ng: + # set the version of php to be used + version: "7.3" + # can be a list of versions : + # version: + # - "7.3" + # - "7.2" + + # set the version for the Debian alternatives system, when using a list of versions, + # php:ng:version is used otherwise. + alternatives_version: "7.3" + # this section contains mostly grain filtered data, while overrides # are possible in the pillar for unique cases, if your OS is not # represented, please consider adding it to the map.jinja for