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