Puppet:仅当值不相等时才执行

Ban*_*jer 0 centos puppet exec

我有一个脚本,实际上只需要在服务器上运行一次,即在部署时,但认为最好让 Puppet 管理它。该脚本重新映射了与本地系统用户冲突的几个旧用户 ID。

我检查的方法是 gopher 用户的默认 uid 是否为 13。如果是,那么我需要运行我的重新映射脚本。

exec { "change_uid":
   command  => "/script/to/run.sh",
   provider => 'shell',
   path => [ "/bin", "/sbin", "/usr/bin", "/usr/sbin", "/usr/local/bin", "/usr/local/sbin" ],
   onlyif   => "test `/usr/bin/id -u gopher` -eq 13; echo $?",
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了上述onlyif检查的几种不同排列,但是 exec 总是在代理上被解雇。

当我直接在命令行中运行该命令,它返回0或1,这可能涉及到的事实,庆典返回0,当真正和1时,假的,但我认为它更可能是我误解的方式onlyif工作.

当 gopher 的 uid=13 时,我怎么能有这个 exec 火?我愿意采用其他方法来实现我在这里尝试完成的工作。

更新

我放弃了回声部分。最终的工作解决方案是:

exec { "change_uid":
   command  => "/script/to/run.sh",
   path     => [ "/bin", "/sbin", "/usr/bin", "/usr/sbin", "/usr/local/bin", "/usr/local/sbin" ],
   onlyif   => "test `id -u gopher` -eq 13",
}
Run Code Online (Sandbox Code Playgroud)

使用命令ralsh有助于测试,感谢@Daniel C. Sobral。我将@Daniel 标记为已接受的答案,因为这是主要问题,除了我对一些概念的误解之外,而且他先回答了。谢谢大家。

Dan*_*iel 9

你有没有尝试echo $?在最后删除?

那部分将永远是整个事情return 0