我在食谱的最后有两个红宝石块:
ruby_block 'set permissions for app dir' do
block do
require 'fileutils'
FileUtils.chown_R 'user01', 'user01', '/mnt/app/'
end
action :run
end
ruby_block 'configure node app session' do
block do
cmd = "sudo su - user01 -c \"/mnt/app/http-app-/bin/app create /mnt/app/http-app/#{node['hostname']}\" && sudo su -c 'systemctl enable app' && sudo su -c 'systemctl start app'"
exec(cmd)
end
action :run
not_if "stat -c %U /mnt/app/#{node['hostname']} |grep app"
end
一些奇怪的事情正在发生。一,我不能在最后一个块之后添加任何代码...如果添加它将不会运行。第二,当食谱运行时,如果运行失败或成功,食谱永远不会结束。第二次引导系统将证明能够成功完成......但是对于盒子和运行的chef-client来说,它会返回一个空的运行列表。
任何人都可以解释这种行为吗?我该如何解决?
答案 0 :(得分:1)
exec()
不是你的想法。这是一个Ruby核心方法,它调用实际的exec()
系统调用,用新的东西替换当前进程。你想要的是我们的shell_out!()
助手,它运行一个子命令并返回并带有结果对象。