На самом деле я нашел способ сделать это, выполнив второе схождение шеф-повара, выполнив несколько вещей в рецепте. Я удивлен, что кому-то еще это нужно.
Это мое описание взлома повторной конвергенции
Ниже приведено то, что, по моему мнению, необходимо для этого, пожалуйста, просмотрите также и блог.
#some parts of your recipe can go up here #Initialize a new chef client object client = Chef::Client.new client.run_ohai #you probably only need this if you need to get new data client.load_node client.build_node #Intialize a new run context to evaluate later run_context = if client.events.nil? Chef::RunContext.new(client.node, {}) else Chef::RunContext.new(client.node, {}, client.events) end #Initialize a chef resource that downloads the remote file r = Chef::Resource::Execute.new("build_info", run_context) r.cwd node[:source_folder] + "/tools" r.command "php buildInfo.php /etc/chef/serverInfo.json" r.run_action(:run) #Converge and run the new resources runner = Chef::Runner.new(run_context) runner.converge #Since the file is now created from the above hack, Chef will be able to read it node.override.merge!(JSON.parse(File.read("/etc/chef/serverInfo.json")))