我当前正在尝试在厨师资源中使用重新启动资源:
reboot 'ADS Install Complete' do
action :nothing
reason 'Cannot continue Chef run without a reboot.'
only_if {reboot_pending?}
end
...
execute 'Initialize ADS Configuration INI' do
command "\"#{node["ads-tfs-ini"]["tfsconfig_path"]}\" unattend \/create \/type:#{node["ads-tfs-ini"]["Scenario"]} \/unattendfile:\"#{node["ads-tfs-ini"]["unattend_file_path"]}\""
only_if { ! "#{ENV['JAVA_HOME']}".to_s.empty? }
notifies :request_reboot, 'reboot[ADS Install Complete]', :delayed
end
我遇到了无休止的重启循环(客户端重新启动-> chef客户端运行-> chef客户端重新运行run_list--客户端重新启动-> ...)。我怎样才能重启一次?
答案 0 :(得分:0)
您可以添加一些验证以检查计算机是否已重新启动一次。
ruby_block "reboot" do
unless File.exist?("C:\reboot") do
block do
Chef::Util::FileEdit.new('C:\reboot').write_file
Chef::ShellOut.new("shutdown /r").run_command
end
end
end
这种解决方案并不是很优雅,但是应该可以。重启位于ruby块内部,只有在C:\ reboot不存在的情况下才会运行。如果该文件不存在,那么该块将创建该文件,然后调用重新引导。在第二次运行Chef时,该文件将存在,因此不会触发重新启动。
答案 1 :(得分:0)
来自reboot
名厨师资源:
使用重新启动资源重新启动节点,这是某些平台上某些安装的必要步骤。支持在Microsoft Windows,macOS和Linux平台上使用此资源。
reboot 'name' do
action :reboot_now
end
答案 2 :(得分:0)
如果only_if
不为空,则execute
资源中的ENV['JAVA_HOME']
防护将使执行资源运行。很可能已设置了此环境变量,这就是为什么每次Chef运行时都会运行execute
资源并触发重新启动的原因。
我的猜测是,仅在变量为空的情况下,您实际上是否需要运行相反的资源?为此,您只需从行中删除!
。
only_if { ENV['JAVA_HOME'].to_s.empty? }
如果我先前的猜测是错误的,那么您需要将only_if
保护措施更改为更可靠的方法。通过命令行,我了解您已创建了一些配置文件,因此当配置文件已存在时,您无需运行execute
资源:
not_if { ::File.exist?('/path/to/file/created/by/command') }