我有以下Puppet清单:
# PHP Configuration class php { exec { "php5enmod $module": path => "/usr/sbin", command => "php5enmod $module", } file {'/etc/php5/conf.d/upload_limits.ini': ensure => present, owner => root, group => root, mode => 444, notify => [ Exec["php5enmod upload_limits"], Service["apache2"] ], content => "post_max_size = 16M \nupload_max_filesize = 16M \n", } file {'/etc/php5/conf.d/memory_limits.ini': ensure => present, owner => root, group => root, mode => 444, notify => [ Exec["php5enmod memory_limits"], Service["apache2"] ], content => "memory_limit = 256M \n", } } include php
如何dynamic传递参数来创buildexec用于notify ? 这是可能的,还是有另一种更好的方法呢?
目前的代码给我错误,如:
错误:无法find文件[/etc/php5/conf.d/upload_limits.ini]的依赖执行[php5enmod upload_limits]
当这个运行时, exec首先被声明。
那时候$ module没有设置,所以exec标题是php5enmod 。
你没有在这里传递一个variables,这只是一个名字。
在这种情况下, 定义types更有意义。
喜欢这个:
define php5enmod() { exec { "php5enmod_${title}": path => "/usr/sbin", command => "php5enmod $title", refreshonly => true, notify => Service["apache2"] } } class php { php5enmod{ 'upload_limits': } file {'/etc/php5/conf.d/upload_limits.ini': ensure => present, owner => 'root', group => 'root', mode => '0444', content => "post_max_size = 16M \nupload_max_filesize = 16M \n", notify => Php5enmod["upload_limits"], } php5enmod{ 'memory_limits': } file {'/etc/php5/conf.d/memory_limits.ini': ensure => present, owner => 'root', group => 'root', mode => '0444', content => "memory_limit = 256M \n", notify => Php5enmod["memory_limits"], } } include php
通常define不应该在那里。
它应该可能是php::php5enmod()并有它自己的文件。
这只是为了展示一般的概念。
扭转你的想法! 使用Subscribe将您可变名称的Exec (坏表单,恕我直言)链接到File 。 Subscribe and Notify是免费的; 他们做同样的事情,但在不同的方向。
尝试这样的事情?
exec { "php5enmod $module": path => "/usr/sbin", command => "php5enmod $module", subscribe => [File["/etc/php5/conf.d/upload_limits.ini"], File["/etc/php5/conf.d/memory_limits.ini"], } file {'/etc/php5/conf.d/upload_limits.ini': ensure => present, owner => root, group => root, mode => 444, notify => Service["apache2"] content => "post_max_size = 16M \nupload_max_filesize = 16M \n", } file {'/etc/php5/conf.d/memory_limits.ini': ensure => present, owner => root, group => root, mode => 444, notify => Service["apache2"] content => "memory_limit = 256M \n", }
完全没有经过testing,但我认为这会让你至less开始…