如果用户在服务器上没有密钥,我想运行ssh-copy-id,所以我在execute块中有一个not_if指令。我已经验证了not_if命令返回0,但执行块仍然运行。
execute "add ssh key to #{shortname}" do
not_if cmd # proceed only if server doesn't have this key
command "echo 'If prompted for password it is already in your clipboard and you can just paste it in and hit enter'; ssh-copy-id deploy@#{hostname}"
cmd = "ssh -o 'BatchMode yes' deploy@#{hostname} echo 'test'"
puts cmd
end
drostie:chef-ops (ssh_copy_id)$ ssh -o 'BatchMode yes' deploy@jenkins01.c45477.blueboxgrid.com echo 'test'
test
drostie:chef-ops (ssh_copy_id)$ echo $?
0
有什么想法吗?
答案 0 :(得分:1)
尝试在调试中运行它。它将为您提供有关其认为应该在每次运行中执行的原因的更多信息。
chef-client -l debug
答案 1 :(得分:0)
我猜你的not_if命令在主机上成功运行,但内部结果是错误代码。
也就是说,ssh正常运行,能够连接,运行你的一个班轮,(有错误),然后ssh成功退出,所以块运行了。
我会第二个@jtimberman的建议(我听说他知道关于厨师的一两件事:))并且目的是根据上下文通过数据库,角色或环境来管理ssh密钥。