[英]Puppet: generate statement fails when trying to retrieve default path of an executable
我建立了一个节,从我们的服务器中删除一个红宝石宝石包。 问题是ruby gem可执行文件安装在服务器上的不同路径中,因此在一个服务器上,它可能位于其他服务器上的/ opt / ruby / bin / gem中,而在/usr/local/rvm/rubies/ruby-2.0中.0-p353 / bin / gem
我的节使用puppet中的generate函数拉出默认的ruby gem安装,如下所示:
$ruby_gem_location = generate('which', 'gem')
exec { "remove-remote_syslog":
command => "gem uninstall remote_syslog",
path => "$ruby_gem_location:/opt/ruby/bin:/usr/bin:/usr/sbin",
onlyif => "$ruby_gem_location list|grep remote_syslog"
}
当我运行人偶代理时,出现以下错误:
发电机必须经过****修订*
我还尝试为which命令提供默认路径,如下所示:
$ruby_gem_location = generate('/usr/bin/which', 'gem')
现在错误提示:无法评估:找不到命令'/ usr / bin / gem
我检查了目标服务器,并且输入了gem命令
/usr/local/rvm/rubies/ruby-2.0.0-p353/bin/gem
我究竟做错了什么?
如何在服务器上提取默认的宝石红宝石位置?
先感谢您
您的密码
$ruby_gem_location = generate('/usr/bin/which', 'gem')
将生成您gem
命令的完整路径(如果成功)。 从您描述的结果来看,我认为它正在生成'/ usr / bin / gem',这也许是真正的gem
命令的符号链接。 您将其放入命令路径中,而不仅仅是目录部分,这将无济于事。 但是,它不是您报告的错误消息的来源。
真正的问题是, generate()
与所有DSL功能一样,在目录构建期间运行。 我从您的结果推断出您正在使用master / agent设置,因此generate()
为您提供了master上 gem
的完整路径-显然是/usr/bin/gem
。 由于整个问题是不同的服务器在不同的位置安装了gem
,因此这无济于事。 实际的错误消息是由于尝试以错误的gem
路径执行onlyif
命令而引起的。
最好的前进方法可能是创建一个自定义事实,每个节点都可以使用该事实来报告gem
二进制文件的适当位置。 然后,您可以在Exec中使用该事实的值,也许是:
exec { "remove-remote_syslog":
command => "$::ruby_gem_path uninstall remote_syslog",
onlyif => "$::ruby_gem_path list | grep remote_syslog"
}
请注意,如果首先提供可执行文件的完整路径,则不需要path
属性。
创建$::ruby_gem_path
定制事实的详细信息取决于许多因素,并且就其$::ruby_gem_path
,它们对于SO而言过于宽泛,但是PL提供了很好的文档 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.