我需要木偶来执行一个脚本,是在一个已安装的应用程序。此外,我只需要在检测到旧版本的且不在特定服务器上时运行,然后再安装新版本
我已经尝试了很多东西,但是我正在迷失方向。首先,我尝试使用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'],我认为这会执行脚本,但我得到的结果是:错误: /Stagemain/Tripwire::Install/Execuninstall_tripwire:无法求值:无法找到命令'server.com‘
发布于 2019-06-28 03:27:29
我需要木偶来执行安装的应用程序内部的脚本。此外,我只需要在检测到旧版本的且不在特定服务器上时运行,然后再安装新版本
您似乎正在尝试使用Exec执行的特定任务复制了Package资源的标准行为。你真的真的应该通过包来管理软件,即使你必须自己做一些打包工作并维护一个本地包存储库。花费在包装上的时间很容易被节省的时间管理软件所抵消,即使在混合中使用木偶也是如此。
此外,就控制要对哪些机器进行操作而言,您应该将其视为分类问题。如果该类不应应用于计算机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',https://stackoverflow.com/questions/56796817
复制相似问题