如何使用Puppet在php.ini中设置config = value?

mib*_*tec 12 configuration ini puppet augeas

我在Puppet中做了我的第一步并遇到了问题.我已经在Linux服务器上安装了PHP,我想对php.ini文件稍作修改.我不想ini用存储库中的一个覆盖整个文件,只需更改/创建一个简单的配置值.

我想确保,属性upload_max_filesize中的属性php.ini值为10M.

我怎样才能做到这一点?

小智 36

我首选的选择是单独留下php.ini,并让puppet在php的conf.d目录中创建一个文件来覆盖你想要更改的值.

您对php.ini所做的更改越少,当您将来升级php.ini时需要将更改与包提供程序更改合并时,就越容易看到正在发生的事情.

file {'/etc/php5/conf.d/upload_limits.conf':
  ensure => present,
  owner => root, group => root, mode => 444,
  content => "post_max_size = 10M \nupload_max_filesize = 10M \n",
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个非常好的和干净的方法,我喜欢! (2认同)

fre*_*eit 31

基本上有3种选择:

  1. 在puppet中使用augeas支持(你需要安装ruby augeas库),如:

    augeas { "php.ini":
      notify  => Service[httpd],
      require => Package[php],
      context => "/files/etc/php.ini/PHP",
      changes => [
        "set post_max_size 10M",
        "set upload_max_filesize 10M",
      ];
    }
    
    Run Code Online (Sandbox Code Playgroud)

    您可以使用"augtool ls /files/etc/php.ini"来查看这些部分,以了解augeas如何解析文件并使用它来计算出您需要的路径.

  2. 你可以使用一个exec.就像是:

    define set_php_var($value) {
      exec { "sed -i 's/^;*[[:space:]]*$name[[:space:]]*=.*$/$name = $value/g' /etc/php.ini":
        unless  => "grep -xqe '$name[[:space:]]*=[[:space:]]*$value' -- /etc/php.ini",
        path    => "/bin:/usr/bin",
        require => Package[php],
        notify  => Service[httpd];
      }
    }
    set_php_var {
      "post_max_size":       value => '10M';
      "upload_max_filesize": value => '10M';
    }
    
    Run Code Online (Sandbox Code Playgroud)

    不幸的是,这个解决方案不理解php.ini中的部分,因此添加一个尚未存在的变量需要额外的努力.如果一个变量出现在多个部分中,这将是错误的(但我看到的示例似乎具有所有唯一的变量名称).这应该适用于存在但使用分号注释掉的变量.

  3. 将原始的php.ini文件复制到您的puppet存储库中,并使用文件source => 'puppet:///...'content => template(...)完全替换该文件,如您所示,您不希望这样做.


rya*_*eld 6

您还可以使用stdlib模块中的file_line资源.

file_line{ 'php_upload_max_filesize':
  path => '/path/to/php.ini',
  line => "upload_max_filesize = 10M",
}
Run Code Online (Sandbox Code Playgroud)

因为如果一个完全匹配的行不存在,这将把该行附加到文件,并且因为配置值的最后一个实例优先于文件中的早期实例,所以它将起作用.当我只有一些事情需要改变时,我就是这样做的.