我现在使用一个函数将多个库安装到我的VM上。但是由于某种原因,即使未使用create exec(因为已经安装了库),它总是执行chown exec。
我对订阅的理解是错误的吗?我以为第二个exec只会在订阅者执行时执行。
define add (
$lib_version = undef,
$lib_version_prefix = undef,
$lib_name = undef,
$user_path = "/usr/bin:/usr/sbin:/bin",
){
file {"/var/www/lib/$lib_name":
mode => $php::folder_mode,
owner => $php::folder_owner,
group => $php::folder_group,
ensure => directory
}
exec {"create-$lib_name":
cwd => "/var/www/lib/$lib_name",
command => "xxx",
creates => "/var/www/lib/$lib_name/$lib_version",
}
exec {"chown-$lib_name":
cwd => "/var/www/lib",
command => "chown xxx",
path => $user_path,
subscribe => Exec["create-$lib_name"],
}
}
提前致谢
答案 0 :(得分:1)
不需要为chown
操作使用exec。改为使用文件资源。
exec { "create-${lib_name}":
cwd => "/var/www/lib/${lib_name}",
command => 'xxx',
creates => "/var/www/lib/${lib_name}/${lib_version}"
}
file { "/var/www/lib/path/to/directory":
ensure => directory,
owner => 'root',
group => 'root',
recurse => true,
subscribe => Exec["create-${lib_name}"
}
答案 1 :(得分:0)
在此处使用file
类型是更好的解决方案,但如果您希望exec
仅在subscribe
d或notify
资源更改时运行,请设置{您refreshonly => true
上的{1}}。
答案 2 :(得分:0)
除非你定义了一些约束,否则Puppet不会以线性顺序执行语句(就像编写的代码一样)。
您需要强制执行订购,这可以通过链接箭头~>
或require
语句来完成:
exec {"chown-$lib_name":
cwd => "/var/www/lib",
command => "chown xxx",
path => $user_path,
require => Exec["create-$lib_name"],
}
subscribe
表示当相关资源发生更改时,将通知资源。经常使用它,例如重启服务,但在这种情况下不是很有用。