def action_run
case @new_resource.name_type
when "sname"
node = "-sname #{@new_resource.node_name}"
when "name"
node = "-name #{@new_resource.node_name}"
end
if @new_resource.cookie
cookie = "-c #{@new_resource.cookie}"
else
cookie = ""
end
if @new_resource.distributed
distributed = "-s"
else
distributed = ""
end
command = "erl_call -e #{distributed} #{node} #{cookie}"
begin
pid, stdin, stdout, stderr = popen4(command, :waitlast => true)
Chef::Log.debug("#{@new_resource} running")
Chef::Log.debug("#{@new_resource} command: #{command}")
Chef::Log.debug("#{@new_resource} code: #{@new_resource.code}")
@new_resource.code.each_line { |line| stdin.puts(line.chomp) }
stdin.close
Chef::Log.debug("#{@new_resource} output: ")
stdout_output = ""
stdout.each_line { |line| stdout_output << line }
stdout.close
stderr_output = ""
stderr.each_line { |line| stderr_output << line }
stderr.close
if stderr_output.length > 0
raise Chef::Exceptions::ErlCall, stderr_output
end
unless stdout_output[0..3].include?('{ok,')
raise Chef::Exceptions::ErlCall, stdout_output
end
@new_resource.updated_by_last_action(true)
Chef::Log.debug("#{@new_resource} #{stdout_output}")
Chef::Log.info("#{@new_resouce} ran successfully")
ensure
Process.wait(pid) if pid
end
end