Configuration 如何使用Puppet在php.ini中设置config=value?
我在做木偶的第一步时遇到了一个问题。我已经在Linux服务器上安装了PHP,我想对Configuration 如何使用Puppet在php.ini中设置config=value?,configuration,puppet,ini,augeas,Configuration,Puppet,Ini,Augeas,我在做木偶的第一步时遇到了一个问题。我已经在Linux服务器上安装了PHP,我想对PHP.ini文件做一些轻微的更改。我不想用存储库中的一个文件覆盖整个ini文件,只需更改/创建一个简单的配置值 我想确保php.ini中的属性upload\u max\u filesize的值为10M 如何实现这一点?基本上有三种选择: 在puppet中使用augeas支持(您需要安装ruby augeas库),如: 您可以使用“augtool ls/files/etc/php.ini”查看部分,以了解augea
PHP.ini
文件做一些轻微的更改。我不想用存储库中的一个文件覆盖整个ini
文件,只需更改/创建一个简单的配置值
我想确保php.ini
中的属性upload\u max\u filesize
的值为10M
如何实现这一点?基本上有三种选择:
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(…)
来完全替换文件,正如您所指出的,您不希望这样做我的首选选项是不使用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",
}
您还可以使用stdlib模块中的文件行资源
file_line{ 'php_upload_max_filesize':
path => '/path/to/php.ini',
line => "upload_max_filesize = 10M",
}
如果不存在与该行完全匹配的行,则会将该行附加到文件中,并且由于配置值的最后一个实例优先于文件中较早的实例,因此该行将起作用。当我只有几件事要改变时,我就是这样做的 如果您使用Apache作为web服务器,另一种方法是在Apache virtualhost文件(可能位于Puppet manifests目录的某个地方)中设置php变量 例如:
<VirtualHost *:80>
ServerName app.dev
DocumentRoot /srv/app/public
## etc...
php_value upload_max_filesize 10M
</VirtualHost>
服务器名app.dev
DocumentRoot/srv/app/public
##等等。。。
php\u值上传\u最大\u文件大小10M
这实际上并没有改变php.ini,但根据您的设置,这可能是实现相同效果的一种简单方法。作为更新,puppet现在似乎包括或提供了一种叫做augeas的东西,专门设计用于实现这类功能。虽然我自己并没有实际使用过它,所以不确定它有多容易使用。这是一个非常好和干净的方法,我喜欢!虽然这种方法不是独立于操作系统的。@JimmyKane,你在考虑哪个操作系统?@Xeoncross以前的评论是错误的。在操作系统中可能是正确的。他专注于另一个问题。感谢您在Debian/Ubuntu上提到,您应该调用文件
upload\u limits.ini
,然后通过php5enmod upload\u limits
启用它。在Puppetforge中有太多关于augeas的参考资料,现在问题是使用哪一个,我也使用了这个@freiheit@ankurverma:特定的木偶模块将完成此任务。然而,我实际上指的不是puppet模块,而是ruby库。根据您的系统,一个名为“ruby augeas”、“rubygem ruby augeas”或“libaugeas ruby”的包。您在rubyforge上找到的puppet模块似乎正确地安装了这些模块,因此只要您将其包含在主配置和客户端配置中,它就会工作。我安装了我提到的模块,并且正在尝试使用此文件中的AUGEA:请查看此文件并对其进行阴影处理,因为我不理解为什么这不起作用,另外,在我的测试节点中,文件资源正在执行,但Augeas没有,还有一件事是,由于Augeas不工作,我没有得到更新的配置文件。@ankurverma:你真的应该问一个新问题。您在该示例中所做的工作不会很好,因为您告诉puppet对同一个文件执行两个相互冲突的操作。还可以使用file\u line
的match
参数来确保只有一行upload\u max\u filesize=…
存在。See非常适合与puppet和puppetlabs apache(不支持直接PHP配置)一起使用
<VirtualHost *:80>
ServerName app.dev
DocumentRoot /srv/app/public
## etc...
php_value upload_max_filesize 10M
</VirtualHost>