我正在Puppet中做我的第一步并遇到了问题。我在Linux服务器上安装了PHP,我想对php.ini
文件稍作修改。我不想用存储库中的一个覆盖整个ini
文件,只需更改/创建一个简单的配置值。
我想确保upload_max_filesize
中的属性php.ini
的值为10M
。
我怎样才能做到这一点?
答案 0 :(得分:35)
我首选的选择是单独留下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",
}
答案 1 :(得分:31)
基本上有3种选择:
在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",
];
}
您可以使用“augtool ls /files/etc/php.ini”查看这些部分,以了解augeas如何解析文件并使用它来计算出您需要的路径。
您可以使用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';
}
不幸的是,这个解决方案不理解php.ini中的部分,因此添加一个尚未存在的变量需要额外的努力。如果一个变量出现在多个部分中,这将是错误的(但我看到的示例似乎具有所有唯一的变量名称)。这应该适用于存在但用分号注释掉的变量。
source => 'puppet:///...'
或content => template(...)
的文件完全替换该文件,如您所示,您不希望这样做。答案 2 :(得分:6)
您还可以使用stdlib模块中的file_line资源。
file_line{ 'php_upload_max_filesize':
path => '/path/to/php.ini',
line => "upload_max_filesize = 10M",
}
因为如果一个完全匹配的行不存在,这会将该行附加到该文件,并且由于配置值的最后一个实例优先于文件中的早期实例,因此它将起作用。当我只有一些事情需要改变时,我就是这样做的。
答案 3 :(得分:2)
如果您使用Apache作为Web服务器,另一种方法是在Apache虚拟主机文件中设置php变量(可能位于Puppet清单目录中的某个位置)。
例如:
<VirtualHost *:80>
ServerName app.dev
DocumentRoot /srv/app/public
## etc...
php_value upload_max_filesize 10M
</VirtualHost>
这实际上并没有改变php.ini,但是 - 取决于你的设置 - 可能是达到同样效果的简单方法。