大厨:not_if not_working

时间:2011-11-21 20:17:28

标签: chef chef-recipe

如果用户在服务器上没有密钥,我想运行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

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

尝试在调试中运行它。它将为您提供有关其认为应该在每次运行中执行的原因的更多信息。

chef-client -l debug

答案 1 :(得分:0)

我猜你的not_if命令在主机上成功运行,但内部结果是错误代码。

也就是说,ssh正常运行,能够连接,运行你的一个班轮,(有错误),然后ssh成功退出,所以块运行了。

我会第二个@jtimberman的建议(我听说他知道关于厨师的一两件事:))并​​且目的是根据上下文通过数据库,角色或环境来管理ssh密钥。