Chef 中 ruby_block 资源的奇怪行为
Strange behavior with ruby_block resource in Chef
我在食谱末尾有两个 ruby 块:
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
一些奇怪的事情正在发生。第一,我不能在最后一个块之后添加任何代码......如果添加它不会 运行 。第二,当食谱 运行 的食谱永远不会以 运行 失败或成功时结束。第二次引导系统将证明成功完成......但是 ssh'ing 到盒子并且 运行ning chef-client 返回一个空的 运行 列表。
谁能解释一下这种行为?我该如何解决?
exec()
不是你想的那样。这是一个 Ruby 核心方法,它调用实际的 exec()
系统调用,用新的东西替换当前进程。您想要的是我们的 shell_out!()
帮助器,它运行一个子命令和 returns 并用结果作为对象。
我在食谱末尾有两个 ruby 块:
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
一些奇怪的事情正在发生。第一,我不能在最后一个块之后添加任何代码......如果添加它不会 运行 。第二,当食谱 运行 的食谱永远不会以 运行 失败或成功时结束。第二次引导系统将证明成功完成......但是 ssh'ing 到盒子并且 运行ning chef-client 返回一个空的 运行 列表。
谁能解释一下这种行为?我该如何解决?
exec()
不是你想的那样。这是一个 Ruby 核心方法,它调用实际的 exec()
系统调用,用新的东西替换当前进程。您想要的是我们的 shell_out!()
帮助器,它运行一个子命令和 returns 并用结果作为对象。