Class: HammerCLIForeman::IdResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/hammer_cli_foreman/id_resolver.rb

Constant Summary collapse

ALL_PER_PAGE =
1000

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api, searchables) ⇒ IdResolver



96
97
98
99
100
# File 'lib/hammer_cli_foreman/id_resolver.rb', line 96

def initialize(api, searchables)
  @api = api
  @searchables = searchables
  define_id_finders
end

Instance Attribute Details

#apiObject (readonly)

Returns the value of attribute api.



94
95
96
# File 'lib/hammer_cli_foreman/id_resolver.rb', line 94

def api
  @api
end

Instance Method Details

#environment_id(options) ⇒ Object



154
155
156
# File 'lib/hammer_cli_foreman/id_resolver.rb', line 154

def environment_id(options)
  puppet_environment_id(options)
end

#environment_ids(options) ⇒ Object



162
163
164
# File 'lib/hammer_cli_foreman/id_resolver.rb', line 162

def environment_ids(options)
  puppet_environment_ids(options)
end

#puppet_environment_id(options) ⇒ Object



158
159
160
# File 'lib/hammer_cli_foreman/id_resolver.rb', line 158

def puppet_environment_id(options)
  get_id(:environments, options)
end

#puppet_environment_ids(options) ⇒ Object



166
167
168
# File 'lib/hammer_cli_foreman/id_resolver.rb', line 166

def puppet_environment_ids(options)
  get_ids(:environments, options)
end

#puppetclass_ids(options) ⇒ Object



132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/hammer_cli_foreman/id_resolver.rb', line 132

def puppetclass_ids(options)
  resource_name = :puppetclasses
  resource = @api.resource(resource_name)
  results = if (ids = options[HammerCLI.option_accessor_name("ids")])
    ids
  elsif (ids = nil_from_searchables(resource_name, options, :plural => true))
    ids
  elsif options_not_set?(resource, options)
    raise MissingSearchOptions.new(_("Missing options to search %s") % resource.name, resource)
  elsif options_empty?(resource, options)
    []
  else
    require('hammer_cli_foreman/puppet_class')
    results = HammerCLIForeman::PuppetClass::ListCommand.unhash_classes(
      resolved_call(resource_name, :index, options, :multi)
    )
    raise ResolverError.new(_("one of %s not found.") % resource.name, resource) if results.count < expected_record_count(options, resource, :multi)

    results.map { |r| r['id'] }
  end
end

#scoped_options(scope, options, mode = nil) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/hammer_cli_foreman/id_resolver.rb', line 103

def scoped_options(scope, options, mode = nil)
  scoped_options = options.dup

  resource = HammerCLIForeman.param_to_resource(scope)
  return scoped_options unless resource

  option_names = []
  if (mode.nil? || mode == :single)
    option_names += searchables(resource).map { |s| s.name }
    option_names << "id" unless option_names.include?("id")
  end
  if (mode.nil? || mode == :multi)
    option_names << "ids"
    option_names += searchables(resource).map { |s| s.plural_name }
  end
  option_names.each do |name|
    option = HammerCLI.option_accessor_name(name)
    scoped_option = HammerCLI.option_accessor_name("#{scope}_#{name}")
    # remove the scope
    # e.g. option_architecture_id -> option_id
    if scoped_options[scoped_option]
      scoped_options[option] = scoped_options.delete(scoped_option)
    else
      scoped_options.delete(option)
    end
  end
  scoped_options
end

#searchables(resource) ⇒ Object



170
171
172
173
# File 'lib/hammer_cli_foreman/id_resolver.rb', line 170

def searchables(resource)
  resource = @api.resource(resource) if resource.is_a? Symbol
  @searchables.for(resource)
end