class ForemanApiClient::Connection

Constants

ALLOW_404

some foreman servers don't have locations or organizations, just return nil

Attributes

connection_attrs[RW]

Public Class Methods

new(attrs) click to toggle source
# File lib/foreman_api_client/connection.rb, line 8
def initialize(attrs)
  self.connection_attrs = attrs.dup
  connection_attrs[:uri] = connection_attrs.delete(:base_url)
  connection_attrs[:api_version] ||= 2
  connection_attrs[:apidoc_cache_dir] ||= tmpdir
  options = {:verify_ssl => connection_attrs.delete(:verify_ssl)}
  @api = ApipieBindings::API.new(connection_attrs, options)
end

Public Instance Methods

all(resource, filter = {}) click to toggle source
# File lib/foreman_api_client/connection.rb, line 22
def all(resource, filter = {})
  page = 0
  all = []

  loop do
    page_params = {:page => (page += 1), :per_page => 50}.merge(filter)
    small = fetch(resource, :index, page_params)
    return if small.nil? # 404
    all += small.to_a
    break if small.empty? || all.size >= small.total
  end
  PagedResponse.new(all)
end
all_with_details(resource, filter = {}) click to toggle source

ala n+1

# File lib/foreman_api_client/connection.rb, line 37
def all_with_details(resource, filter = {})
  load_details(all(resource, filter), resource)
end
api_cached?() click to toggle source

used for tests to manually invoke loading api from server this keeps http calls consistent

# File lib/foreman_api_client/connection.rb, line 62
def api_cached?
  File.exist?(@api.apidoc_cache_file)
end
ensure_api_cached() click to toggle source
# File lib/foreman_api_client/connection.rb, line 66
def ensure_api_cached
  @api.apidoc
end
fetch(resource, action = :index, filter = {}) click to toggle source

filter: “page” => 2, “per_page” => 50, “search” => “field=value”, “value”

# File lib/foreman_api_client/connection.rb, line 46
def fetch(resource, action = :index, filter = {})
  action, filter = :index, action if action.kind_of?(Hash)
  logger.info("#{self.class.name}##{__method__} Calling Apipie Resource: #{resource.inspect} Action: #{action.inspect} Params: #{dump_hash(filter)}")
  PagedResponse.new(@api.resource(resource).action(action).call(filter))
rescue RestClient::ResourceNotFound
  raise unless ALLOW_404.include?(resource)
  nil
end
host(manager_ref) click to toggle source
# File lib/foreman_api_client/connection.rb, line 55
def host(manager_ref)
  ::ForemanApiClient::Host.new(self, manager_ref)
end
load_details(resources, resource) click to toggle source
# File lib/foreman_api_client/connection.rb, line 41
def load_details(resources, resource)
  resources.map! { |os| fetch(resource, :show, "id" => os["id"]).first } if resources
end
verify?() click to toggle source
# File lib/foreman_api_client/connection.rb, line 17
def verify?
  results = Array(fetch(:home).try(:results)).first
  results.respond_to?(:key?) && results.key?("links")
end

Private Instance Methods

tmpdir() click to toggle source
# File lib/foreman_api_client/connection.rb, line 72
def tmpdir
  if defined?(Rails)
    Rails.root.join("tmp/foreman").to_s
  else
    require 'tmpdir'
    "#{Dir.tmpdir}/foreman"
  end
end