diff --git a/Vagrantfile b/Vagrantfile index 9db1cc6..42396bf 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -6,11 +6,10 @@ Vagrant.configure("2") do |config| vms = [ - [ "wheezy-php54", "deb/wheezy-amd64" , "192.168.33.87" ], - [ "jessie-php56", "deb/jessie-amd64", "192.168.33.88" ], - [ "jessie-php70", "deb/jessie-amd64", "192.168.33.89" ], - [ "stretch-php56", "sharlak/debian_stretch_64", "192.168.33.90" ], - [ "stretch-php70", "sharlak/debian_stretch_64", "192.168.33.91" ] + [ "jessie-php-5.6", "deb/jessie-amd64", "192.168.33.88", "php-5.6" ], + [ "jessie-php-7.0", "deb/jessie-amd64", "192.168.33.89", "php-7.0" ], + [ "stretch-php-5.6", "sharlak/debian_stretch_64", "192.168.33.90", "php-5.6" ], + [ "stretch-php-7.0", "sharlak/debian_stretch_64", "192.168.33.91", "php-7.0" ] ] config.vm.provider "virtualbox" do |v| @@ -25,7 +24,7 @@ Vagrant.configure("2") do |config| m.vm.provision "ansible" do |ansible| ansible.playbook = "tests/test.yml" - ansible.groups = { "test" => [ vm[0] ] } + ansible.groups = { vm[3] => [ vm[0] ] } ansible.verbose = 'vv' ansible.sudo = true end diff --git a/defaults/main.yml b/defaults/main.yml index 54a8155..8d56bde 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,5 +1,6 @@ --- +php_version: '5.6' php_install_fpm: true php_install_xdebug: false php_extra_packages: [] @@ -15,7 +16,7 @@ php_ini: php_ini_fpm: [] php_ini_cli: [] -# OpCache settings (PHP >= 5.5) +# OpCache settings php_opcache_enable: "1" php_opcache_enable_cli: "0" php_opcache_memory_consumption: "96" @@ -92,7 +93,7 @@ php_xdebug_var_display_max_depth: '3' # PHP-FPM php_fpm_poold: - pool_name: 'www' - listen: '/var/run/php5-fpm.sock' + listen: '{{ php_default_fpm_sock }}' pm: 'dynamic' pm_max_children: 250 pm_start_servers: 10 diff --git a/handlers/main.yml b/handlers/main.yml index 8e4c0d4..2f8d6d2 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -1,5 +1,5 @@ --- - name: restart php-fpm - action: service name=php5-fpm state=restarted + service: name='{{ php_fpm_service }}' state=restarted when: php_install_fpm diff --git a/meta/main.yml b/meta/main.yml index 23c8e52..831c92d 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -1,10 +1,10 @@ --- galaxy_info: author: Emilien Mantel - description: Install and configure PHP (+ FPM is wanted) + description: Install and configure PHP 5.6/7.0 (+ FPM is wanted) company: license: GPLv2 - min_ansible_version: 1.8 + min_ansible_version: 2.0 platforms: - name: Debian versions: diff --git a/tasks/fpm.yml b/tasks/fpm.yml index b8f79f9..2ea300e 100644 --- a/tasks/fpm.yml +++ b/tasks/fpm.yml @@ -1,16 +1,21 @@ --- - name: APT | Install PHP-FPM - apt: pkg=php5-fpm state=latest + apt: pkg={{ php_fpm_service }} state=latest - name: LINEINFILE | PHP configuration - lineinfile: dest=/etc/php5/fpm/php.ini regexp='^;?{{ item.key }}' line='{{ item.key }} = {{ item.value }}' + lineinfile: > + dest='{{ php_etc_dir }}/fpm/php.ini' + regexp='^;?{{ item.key }}' + line='{{ item.key }} = {{ item.value }}' with_flattened: - php_ini - php_ini_fpm notify: restart php-fpm - name: TEMPLATE | Deploy pool configuration - template: src=etc/php5/fpm/pool.d/pool.conf.j2 dest=/etc/php5/fpm/pool.d/{{ item.pool_name }}.conf + template: > + src=etc/__php__/fpm/pool.d/pool.conf.j2 + dest='{{ php_etc_dir }}/fpm/pool.d/{{ item.pool_name }}.conf' with_items: php_fpm_poold notify: restart php-fpm diff --git a/tasks/main.yml b/tasks/main.yml index 257cec9..0e3ddf2 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,40 +1,43 @@ --- +- name: ASSERT | Check variables + assert: + that: "php_version in php_managed_versions" + +- name: INCLUDE_VARS | Related to PHP version + include_vars: "php-{{ php_version }}.yml" + - name: APT | Install PHP packages apt: pkg={{ item }} state=latest update_cache=yes cache_valid_time=3600 with_flattened: - php_packages - php_extra_packages +# Note: only needed for PHP5x + Xdebug - name: COMMAND | Get PHP extension dir command: php-config --extension-dir changed_when: false register: php_extension_dir + when: php_version == '5.6' - name: INCLUDE | PHP-FPM include: fpm.yml when: php_install_fpm - name: LINEINFILE | PHP configuration - lineinfile: dest=/etc/php5/cli/php.ini regexp='^;?{{ item.key }}' line='{{ item.key }} = {{ item.value }}' + lineinfile: > + dest='{{ php_etc_dir }}/cli/php.ini' + regexp='^;?{{ item.key }}' + line='{{ item.key }} = {{ item.value }}' with_flattened: - php_ini - php_ini_cli +# Note: Xdebug is not packaged on PHP7.0 - name: INCLUDE | Xdebug include: xdebug.yml - when: php_install_xdebug + when: php_install_xdebug and php_version == 5 -- name: SHELL | Get PHP version on apt - shell: php -v | head -n 1 | awk '{ print $2 }' - register: php_apt_version - changed_when: false - -- name: APT | Install and configure php-apcu / opcache (PHP 5.5+ only) - include: php55min.yml - when: php_apt_version.stdout|version_compare('5.5', 'ge', False) - -- name: APT | Install and configure php-apc (PHP 5.4 max only) - include: php54max.yml - when: php_apt_version.stdout|version_compare('5.5', 'lt', False) +- name: APT | Install and configure opcache + include: opcache.yml diff --git a/tasks/opcache.yml b/tasks/opcache.yml new file mode 100644 index 0000000..1a26595 --- /dev/null +++ b/tasks/opcache.yml @@ -0,0 +1,19 @@ +--- + +- name: APT | Install php-apcu + apt: pkg=php5-apcu state=latest + when: php_version == 5 + +- name: TEMPLATE | Configure APCu + template: > + src=etc/__php__/mods-available/opcache.ini.j2 + dest="{{ php_mods_dir }}/opcache.ini" + notify: restart php-fpm + when: php_version == 5 + +- name: TEMPLATE | Configure APCu + template: > + src=etc/__php__/mods-available/apcu.ini.j2 + dest={{ php_mods_dir }}/apcu.ini + notify: restart php-fpm + when: php_version == 5 diff --git a/tasks/php54max.yml b/tasks/php54max.yml deleted file mode 100644 index 22605c4..0000000 --- a/tasks/php54max.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- - -- name: APT | Install php-apcu - apt: pkg=php-apc state=latest - -- name: SET_FACT | Set APC - set_fact: php_apc_package="apc" - -- name: TEMPLATE | Configure APC - template: src=etc/php5/mods-available/apcu.ini.j2 dest=/etc/php5/mods-available/apc.ini - notify: restart php-fpm diff --git a/tasks/php55min.yml b/tasks/php55min.yml deleted file mode 100644 index 460dfc1..0000000 --- a/tasks/php55min.yml +++ /dev/null @@ -1,14 +0,0 @@ ---- - -- name: APT | Install php-apcu - apt: pkg=php5-apcu state=latest - -- name: SET_FACT | Set APCu - set_fact: php_apc_package="apcu" - -- name: TEMPLATE | Configure Opcache / APCu - template: src=etc/php5/mods-available/{{ item }}.ini.j2 dest=/etc/php5/mods-available/{{ item }}.ini - with_items: - - apcu - - opcache - notify: restart php-fpm diff --git a/templates/etc/php5/fpm/pool.d/pool.conf.j2 b/templates/etc/__php__/fpm/pool.d/pool.conf.j2 similarity index 100% rename from templates/etc/php5/fpm/pool.d/pool.conf.j2 rename to templates/etc/__php__/fpm/pool.d/pool.conf.j2 diff --git a/templates/etc/php5/mods-available/apcu.ini.j2 b/templates/etc/__php__/mods-available/apcu.ini.j2 similarity index 100% rename from templates/etc/php5/mods-available/apcu.ini.j2 rename to templates/etc/__php__/mods-available/apcu.ini.j2 diff --git a/templates/etc/php5/mods-available/opcache.ini.j2 b/templates/etc/__php__/mods-available/opcache.ini.j2 similarity index 100% rename from templates/etc/php5/mods-available/opcache.ini.j2 rename to templates/etc/__php__/mods-available/opcache.ini.j2 diff --git a/templates/etc/php5/mods-available/xdebug.ini.j2 b/templates/etc/__php__/mods-available/xdebug.ini.j2 similarity index 100% rename from templates/etc/php5/mods-available/xdebug.ini.j2 rename to templates/etc/__php__/mods-available/xdebug.ini.j2 diff --git a/tests/group_vars/php-5.6 b/tests/group_vars/php-5.6 new file mode 100644 index 0000000..cf95f41 --- /dev/null +++ b/tests/group_vars/php-5.6 @@ -0,0 +1 @@ +php_version: '5.6' diff --git a/tests/group_vars/php-7.0 b/tests/group_vars/php-7.0 new file mode 100644 index 0000000..5a7a3f5 --- /dev/null +++ b/tests/group_vars/php-7.0 @@ -0,0 +1 @@ +php_version: '7.0' diff --git a/tests/test.yml b/tests/test.yml index 24f980f..299696f 100644 --- a/tests/test.yml +++ b/tests/test.yml @@ -1,10 +1,16 @@ --- +# On Debian Jessie, we need Dotdeb for PHP 7.0 +- hosts: php-7.0 + roles: + - role: HanXHX.dotdeb + when: ansible_distribution_major_version | version_compare(8, 'eq') + - hosts: all vars: vhost: 'test.local' php_extra_packages: - - 'php5-memcached' + - '{{ php_apt_prefix }}recode' php_install_xdebug: true pre_tasks: - name: APT | Install nginx @@ -17,10 +23,11 @@ when: nginx_version.stdout | version_compare('1.6', '<', true) - set_fact: nginx_include="fastcgi.conf" when: nginx_version.stdout | version_compare('1.6', '>=', true) + tasks: - name: COPY | Vhost copy: > dest=/etc/nginx/sites-enabled/{{ vhost }} - content='server { server_name {{ vhost }}; root /var/www; location ~ \.php$ { include {{ nginx_include }}; fastcgi_pass unix:/var/run/php5-fpm.sock; } }' + content='server { server_name {{ vhost }}; root /var/www; location ~ \.php$ { include {{ nginx_include }}; fastcgi_pass unix:{{ php_default_fpm_sock }}; } }' notify: reload nginx handlers: - name: reload nginx @@ -31,10 +38,14 @@ - name: SHELL | Test php-cli shell: php -i | grep '^PHP Version' | head -n 1 changed_when: false + register: p + failed_when: p.stdout == '' - name: FILE | Create /var/www file: dest=/var/www state=directory - name: COPY | Add phpinfo copy: dest=/var/www/phpinfo.php content=' /dev/null | grep h1 | grep -o 'PHP Version 5.*<' | sed -r 's/ /dev/null | grep h1 | grep -o 'PHP Version [57].*<' | sed -r 's/