Skip to content

Php extensions refreshing in every run in Debian. #387

@guzmanbraso

Description

@guzmanbraso

Affected Puppet, Ruby, OS and module versions/distributions

  • Puppet: 5.2.0
  • Ruby: ruby 2.3.3p222 (2016-11-21) [x86_64-linux-gnu]
  • Distribution: Debian 9 (Stretch)
  • Module version: master branch.

How to reproduce (e.g Puppet code you use)

Call inside our module init.pp:

  class { '::php::globals':
    php_version => $version,
    config_root => "/etc/php/$version",
  } ->
  class { '::php':
    ensure           => "${version}*",
    manage_repos     => $manage_repos,
    fpm              => $fpm,
    fpm_service_name => $fpm_service_name,
    dev              => $dev,
    composer         => $composer,
    pear             => $pear,
    phpunit          => $phpunit,
    settings         => $merged_settings,
    package_prefix   => $package_prefix,
    extensions       => $extensions,
    ext_tool_enable  => $ext_tool_enable,
    ext_tool_query   => $ext_tool_query
  }

Our module params inherited:

  # General params for php
  $version          = '5.6'
  $settings         = {
    'Date/date.timezone'                      => 'utc',
    'PHP/display_errors'                      => 'Off',
    'PHP/log_errors'                          => 'On',
    'PHP/error_log'                           => "/var/log/php/${version}-phpini.error.log",
    'PHP/memory_limit'                        => '256M',
    'PHP/cgi.fix_pathinfo'                    => 0,
    'opcache/opcache.enable'                  => 1,
    'opcache/opcache.memory_consumption'      => '256',
    'opcache/opcache.interned_strings_buffer' => '32',
    'opcache/opcache.max_accelerated_files'   => '10000',
    'opcache/opcache.use_cwd'                 => 1,
    'opcache/opcache.validate_timestamps'     => 0,
    'opcache/opcache.fast_shutdown'           => 1,
    'opcache/opcache.error_log'               => "/var/log/php/${version}/opcache.error.log",
    'opcache/opcache.log_verbosity_level'     => '2',
    'PHP/realpath_cache_size'                 => '1024k',
    'PHP/realpath_cache_ttl'                  => '300'
  }
  $fpm              = true 
  $fpm_service_name = "php${version}-fpm"
  $manage_repos     = false
  $dev              = true
  $composer         = false
  $pear             = false
  $phpunit          = false
  $logdir           = '/var/log/php'
  $package_prefix   = "php${version}-"
  $user             = 'phpuser'
  $userid           = undef
  $group            = 'phpgroup'
  $groupid          = undef
  $listen           = '127.0.0.1:9000'
  $memory_limit     = '128M'
  $extensions = {
    curl => {
      provider        => 'apt',
      package_prefix  => "php${version}-",
    },
    gd => {
      provider => 'apt',
      package_prefix  => "php${version}-",
    },
    imagick => {
      provider => 'apt',
      package_prefix  => "php${version}-",
    },
    mcrypt => {
      provider => 'apt',
      package_prefix  => "php${version}-",
    },
    mysql => {
      provider => 'apt',
      package_prefix  => "php${version}-",
    },
    redis => {
      provider => 'apt',
      package_prefix  => "php${version}-",
    }
  }
  $ext_tool_enable         = "/usr/sbin/phpenmod -v ${version}"
  $ext_tool_query          = "/usr/sbin/phpquery -v ${version}"
  $pm                      = 'dynamic'
  $pm_max_children         = '5'
  $pm_start_servers        = '2'
  $pm_min_spare_servers    = '1'
  $pm_max_spare_servers    = '3'
  $pm_max_requests         = '0'
  $pm_process_idle_timeout = '10s'
  $pm_status_path          = '/fpm-status'
  $php_value               = {}
  $php_flag                = {}
  $php_admin_value         = {}
  $php_admin_flag          = {}
  $php_directives          = []

What are you seeing

In every run puppet tries to enable the module again when it was already installed and enabled by puppet.

What behaviour did you expect instead

A clean run, as the modules were already installed by puppet, already enabled and checking through phpinfo() I see all modules are working ok in fpm.

Output log

Info: /Stage[main]/Php::Fpm/Package[php5.6-fpm]: Scheduling refresh of Exec[/usr/sbin/phpenmod -v 5.6 -s fpm curl]
Info: /Stage[main]/Php::Fpm/Package[php5.6-fpm]: Scheduling refresh of Exec[/usr/sbin/phpenmod -v 5.6 -s fpm gd]
Info: /Stage[main]/Php::Fpm/Package[php5.6-fpm]: Scheduling refresh of Exec[/usr/sbin/phpenmod -v 5.6 -s fpm imagick]
Info: /Stage[main]/Php::Fpm/Package[php5.6-fpm]: Scheduling refresh of Exec[/usr/sbin/phpenmod -v 5.6 -s fpm mcrypt]
Info: /Stage[main]/Php::Fpm/Package[php5.6-fpm]: Scheduling refresh of Exec[/usr/sbin/phpenmod -v 5.6 -s fpm mysql]
Info: /Stage[main]/Php::Fpm/Package[php5.6-fpm]: Scheduling refresh of Exec[/usr/sbin/phpenmod -v 5.6 -s fpm redis]
Notice: /Stage[main]/Php/Php::Extension[imagick]/Php::Extension::Install[imagick]/Package[php5.6-imagick]/ensure: created
Info: Php::Extension::Install[imagick]: Scheduling refresh of Php::Extension::Config[imagick]
Info: Php::Extension::Config[imagick]: Scheduling refresh of Php::Config[imagick]
Info: Php::Extension::Config[imagick]: Scheduling refresh of Exec[/usr/sbin/phpenmod -v 5.6 -s fpm imagick]
Info: Php::Config[imagick]: Scheduling refresh of Php::Config::Setting[/etc/php/5.6/mods-available/imagick.ini: extension]
Notice: /Stage[main]/Php/Php::Extension[redis]/Php::Extension::Install[redis]/Package[php5.6-redis]/ensure: created
Info: Php::Extension::Install[redis]: Scheduling refresh of Php::Extension::Config[redis]
Info: Php::Extension::Config[redis]: Scheduling refresh of Php::Config[redis]
Info: Php::Extension::Config[redis]: Scheduling refresh of Exec[/usr/sbin/phpenmod -v 5.6 -s fpm redis]
Info: Php::Config[redis]: Scheduling refresh of Php::Config::Setting[/etc/php/5.6/mods-available/redis.ini: extension]
Info: Php::Config::Setting[/etc/php/5.6/mods-available/imagick.ini: extension]: Scheduling refresh of Ini_setting[/etc/php/5.6/mods-available/imagick.ini: extension]
Info: Php::Config::Setting[/etc/php/5.6/mods-available/redis.ini: extension]: Scheduling refresh of Ini_setting[/etc/php/5.6/mods-available/redis.ini: extension]
Notice: /Stage[main]/Php/Php::Extension[curl]/Php::Extension::Config[curl]/Exec[/usr/sbin/phpenmod -v 5.6 -s fpm curl]: Triggered 'refresh' from 1 event
Info: Php::Extension[curl]: Scheduling refresh of Service[php5.6-fpm]
Notice: /Stage[main]/Php/Php::Extension[gd]/Php::Extension::Config[gd]/Exec[/usr/sbin/phpenmod -v 5.6 -s fpm gd]: Triggered 'refresh' from 1 event
Info: Php::Extension[gd]: Scheduling refresh of Service[php5.6-fpm]
Notice: /Stage[main]/Php/Php::Extension[imagick]/Php::Extension::Config[imagick]/Php::Config[imagick]/Php::Config::Setting[/etc/php/5.6/mods-available/imagick.ini: extension]/Ini_setting[/etc/php/5.6/mods-available/imagick.ini: extension]: Triggered 'refresh' from 1 event
Notice: /Stage[main]/Php/Php::Extension[imagick]/Php::Extension::Config[imagick]/Exec[/usr/sbin/phpenmod -v 5.6 -s fpm imagick]: Triggered 'refresh' from 2 events
Info: Php::Extension[imagick]: Scheduling refresh of Service[php5.6-fpm]
Notice: /Stage[main]/Php/Php::Extension[mcrypt]/Php::Extension::Config[mcrypt]/Exec[/usr/sbin/phpenmod -v 5.6 -s fpm mcrypt]: Triggered 'refresh' from 1 event
Info: Php::Extension[mcrypt]: Scheduling refresh of Service[php5.6-fpm]
Notice: /Stage[main]/Php/Php::Extension[mysql]/Php::Extension::Config[mysql]/Exec[/usr/sbin/phpenmod -v 5.6 -s fpm mysql]: Triggered 'refresh' from 1 event
Info: Php::Extension[mysql]: Scheduling refresh of Service[php5.6-fpm]
Notice: /Stage[main]/Php/Php::Extension[redis]/Php::Extension::Config[redis]/Php::Config[redis]/Php::Config::Setting[/etc/php/5.6/mods-available/redis.ini: extension]/Ini_setting[/etc/php/5.6/mods-available/redis.ini: extension]: Triggered 'refresh' from 1 event
Notice: /Stage[main]/Php/Php::Extension[redis]/Php::Extension::Config[redis]/Exec[/usr/sbin/phpenmod -v 5.6 -s fpm redis]: Triggered 'refresh' from 2 events
Info: Php::Extension[redis]: Scheduling refresh of Service[php5.6-fpm]
Notice: /Stage[main]/Php::Fpm::Service/Service[php5.6-fpm]: Triggered 'refresh' from 6 events

Any additional information you'd like to impart

I saw there is an ifonly in the exec that enable modules:

      onlyif  => "${ext_tool_query} -s ${_sapi} -m ${so_name} | /bin/grep 'No module matches ${so_name}'",

And if I place a notify attached to the exec to output the precise command that was run and then execute it myself it works as expected:

root@testing:~# phpquery -v 5.6 -s cli -m redis
redis (Enabled for cli by maintainer script)

Even with the grep the exit status code seems right:

root@testing:~# phpquery -v 5.6 -s cli -m redis |grep 'No module matches redis'
root@testing:~# echo $?
1

However, puppet keeps trying to enable the module even when phpquery says it's enabled.

I'm willing to help if someone points me to where to continue debugging, it's really annoying to have to restart fpm in every puppet run.

Thank you all!

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions