class Chef::Knife::Raw

Public Instance Methods

run() click to toggle source
# File lib/chef/knife/raw_essentials.rb, line 33
def run
  if name_args.length == 0
    show_usage
    ui.fatal("You must provide the path you want to hit on the server")
    exit(1)
  elsif name_args.length > 1
    show_usage
    ui.fatal("Only one path accepted for knife raw")
    exit(1)
  end

  path = name_args[0]
  data = false
  if config[:input]
    data = IO.read(config[:input])
  end
  chef_rest = Chef::REST.new(Chef::Config[:chef_server_url])
  begin
    method = config[:method].to_sym
    url = chef_rest.create_url(name_args[0])
    result = ::ChefFS::RawRequest.api_request(chef_rest, method, url, {}, data, :parse_json => config[:pretty])
    if result.is_a?(Hash) || result.is_a?(Array)
      result = Chef::JSONCompat.to_json_pretty(result)
    end
    output result
  rescue Timeout::Error => e
    ui.error "Server timeout"
    exit 1
  rescue Net::HTTPServerException => e
    ui.error "Server responded with error #{e.response.code} \"#{e.response.message}\""
    ui.error "Error Body: #{e.response.body}" if e.response.body && e.response.body != ''
    exit 1
  end
end