class Chef::Provider::ErlCall

Public Class Methods

new(node, new_resource) click to toggle source
Calls superclass method Chef::Provider.new
# File lib/chef/provider/erl_call.rb, line 28
def initialize(node, new_resource)
  super(node, new_resource)
end

Public Instance Methods

action_run() click to toggle source
# File lib/chef/provider/erl_call.rb, line 40
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}"

  converge_by("run erlang block") do
    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

      # fail if stderr contains anything
      if stderr_output.length > 0
        raise Chef::Exceptions::ErlCall, stderr_output
      end

      # fail if the first 4 characters aren't "{ok,"
      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
end
load_current_resource() click to toggle source
# File lib/chef/provider/erl_call.rb, line 36
def load_current_resource
  true
end
whyrun_supported?() click to toggle source
# File lib/chef/provider/erl_call.rb, line 32
def whyrun_supported?
  true
end