Puppet 傀儡高管的奇怪行为

Puppet 傀儡高管的奇怪行为,puppet,Puppet,我现在使用一个函数将几个库安装到我的虚拟机上。但是,由于某些原因,即使未使用create exec(因为库已安装),它也始终执行chown exec 我对订阅的理解是错误的吗?我以为第二个exec只会在订阅的exec为 定义添加( $lib_version=undf, $lib\u version\u prefix=undef, $lib_name=undef, $user_path=“/usr/bin:/usr/sbin:/bin”, ){ 文件{/var/www/lib/$lib_name”

我现在使用一个函数将几个库安装到我的虚拟机上。但是,由于某些原因,即使未使用create exec(因为库已安装),它也始终执行chown exec

我对订阅的理解是错误的吗?我以为第二个exec只会在订阅的exec为

定义添加(
$lib_version=undf,
$lib\u version\u prefix=undef,
$lib_name=undef,
$user_path=“/usr/bin:/usr/sbin:/bin”,
){
文件{/var/www/lib/$lib_name”:
mode=>$php::folder\u mode,
所有者=>$php::文件夹\u所有者,
组=>$php::文件夹组,
确保=>目录
}
exec{“create-$lib_name”:
cwd=>“/var/www/lib/$lib_name”,
命令=>“xxx”,
创建=>“/var/www/lib/$lib\u name/$lib\u version”,
}
执行官{“chown-$lib_name”:
cwd=>“/var/www/lib”,
命令=>“chown xxx”,
路径=>$user\u路径,
订阅=>Exec[“创建-$lib_name”],
}
}

提前感谢

无需使用exec执行
chown
操作。改为使用文件资源

 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}"
 }

在这里使用
文件
类型是更好的解决方案,但是如果希望
exec
仅在
subscribe
d或
notify
ing资源更改时运行,请在
exec

上设置
refreshonly=>true
,Puppet不会按线性顺序执行语句(与编写的代码一样)除非你定义了一些约束

您需要强制执行您的订购,这可以通过链接箭头
~>
require
语句来完成:

exec{“chown-$lib_name”:
cwd=>“/var/www/lib”,
命令=>“chown xxx”,
路径=>$user\u路径,
require=>Exec[“create-$lib_name”],
}

subscribe
表示当从属资源发生更改时,将通知该资源。它经常使用,例如用于重新启动服务,但在这种情况下不是很有用。

但是我需要递归使用它,recurse=>真的有效吗?我仍然需要知道,如何像我尝试过的那样编写依赖的执行者。Thanksrecursion将在文件资源中工作。我更新了我的答案以反映他的观点。