木偶"onlyif"属性找不到 not(!) 运算符



我正在尝试使用以下木偶代码确定 Node 包 PM2 是否安装在路径中并可执行。

 exec { "create symbolic link for pm2":
    cwd => "${pm2_link_dir}",
    path => ['/usr/bin','/bin','/usr/sbin','/sbin'],
    onlyif => "! which node &> /dev/null",
    command => "ln -s ../lib/node_modules/pm2/bin/pm2 pm2"
}

它告诉我找不到命令"!这是确定某些程序是否已安装并可执行的正确方法吗?为什么木偶不能理解 不是操作员??我正在研究Redhat主站和从站。

为什么傀儡不能理解不是运算符?

!运算符由 shell 提供;它不是命令。 您正在使用Exec的默认提供程序(posix),它直接运行命令而不是通过shell运行命令。 (或者说是这样记录的。 最近发现,有时posix提供程序通过 shell 运行命令,这显然与其文档相矛盾。

无论如何,在Execonlyif属性中使用!有点愚蠢,因为您可以删除!并切换到unless属性。 并删除重定向,这也依赖于外壳。

这是确定某些程序是否已安装并可执行的正确方法吗?

通常最好知道程序是否应该在特定目标节点上可用,并在必要时确保它可用。 如果必须查询节点状态,则通常最好通过自定义事实进行查询。

话虽如此,我认为您的方法本质上是错误的,尽管当然它只会在您在Exec中指定的路径中查找请求的程序。

最新更新