我需要木偶来执行已安装应用程序内部的脚本。此外,仅当它检测到的较旧版本并且不在特定服务器上时,才需要运行它,然后安装新版本
我尝试了很多东西,但是我迷路了。首先,我尝试使用cd转到脚本所在的位置,然后尝试直接运行脚本,但始终出现相同的错误。
install.pp
# Install required packages
class tripwire::install {
exec { 'uninstall_tripwire':
command => './usr/local/tripwire/te/agent/bin/uninstall.sh',
cwd => '/usr/local/tripwire/te/agent/bin',
path => '/usr/bin/sh',
onlyif => [
"${::fqdn} != 'server.com'",
'/usr/bin/test -f
/usr/local/tripwire/te/agent/bin/uninstall.sh',
"grep -c '8.6.0' /usr/local/tripwire/te/agent/data/version",
],
notify => Exec['install_tripwire'],
我认为这将执行脚本,但是我得到的只是: 错误:/ Stage [main] / Tripwire :: Install / Exec [uninstall_tripwire]:无法评估:找不到命令“ server.com”
答案 0 :(得分:2)
我需要木偶来执行已安装应用程序内部的脚本。在 另外,只有在它检测到的较旧版本时,我才需要运行 不在特定服务器上,然后安装新版本
您似乎试图用Exec
执行的特定任务重复了Package
资源的标准行为。实际上,确实应该通过软件包来管理软件,即使您必须自己进行一些打包并维护本地软件包存储库。即使在使用Puppet的情况下,花在包装上的时间也很容易被节省的管理软件所抵消。
此外,就控制运行哪台机器而言,您应该将其视为分类问题。如果该类不应应用于机器server.com
,则不应将其声明到该机器的目录中。如果应将它应用于该计算机而不是应用于其他计算机,则应对其进行适当的参数化,并使用这些参数(在分类时,也许借助Hiera)为每个目标计算机选择适当的行为。
尽管如此,关于实际显示的代码,错误消息
无法评估:找不到命令“ server.com”
反映出您的onlyif
数组的这个元素...
"${::fqdn} != 'server.com'",
...不是命令。 onlyif
需要一个可以在目标系统上执行的命令或其中的一个数组,所以也许这样:
"test ${::fqdn} != server.com",
此外,这看起来是错误的:
command => './usr/local/tripwire/te/agent/bin/uninstall.sh',
删除前导.
,除非您确实打算针对工作目录解析该路径。如果您打算将其解析为相对路径,那么我敦促您改为将其扩展为绝对路径。
此外,这可能不符合您的预期:
path => '/usr/bin/sh',
path
属性为二进制搜索路径命名,例如PATH
环境变量。您可能确实希望指定一个,例如'/bin:/usr/bin:/sbin:/usr/sbin'
,但是如果您打算输入的内容是要通过shell执行该命令,那么您正在寻找
provider => 'shell',