class HammerCLICsv::BaseCommand

Constants

COUNT
NAME

Public Class Methods

help_columns() click to toggle source
# File lib/hammer_cli_csv/base.rb, line 47
def self.help_columns
  ''
end
supported?() click to toggle source
# File lib/hammer_cli_csv/base.rb, line 34
def self.supported?
  false
end

Public Instance Methods

apipie_check_param(resource, action, name) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 983
def apipie_check_param(resource, action, name)
  method = @api.resource(pluralize(resource).to_sym).apidoc[:methods].detect do |api_method|
    api_method[:name] == action.to_s
  end
  return false unless method

  found = method[:params].detect do |param|
    param[:full_name] == name
  end
  if !found
    nested =  method[:params].detect do |param|
      param[:name] == resource.to_s
    end
    if nested
      found = nested[:params].detect do |param|
        param[:full_name] == name
      end
    end
  end
  found
end
associate_locations(id, locations, name) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 961
def associate_locations(id, locations, name)
  return if locations.nil?

  associations ||= {}
  CSV.parse_line(locations).each do |location|
    location_id = foreman_location(:name => location)
    if associations[location].nil?
      associations[location] = @api.resource(:locations).call(:show, {'id' => location_id})[pluralize(name)].collect do |reference_object|
        reference_object['id']
      end
    end
    associations[location] += [id] if !associations[location].include? id

    @api.resource(:locations).call(:update, {
        'id' => location_id,
        'location' => {
            "#{name}_ids" => associations[location]
        }
    })
  end if locations && !locations.empty?
end
associate_organizations(id, organizations, name) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 940
def associate_organizations(id, organizations, name)
  return if organizations.nil?

  associations ||= {}
  CSV.parse_line(organizations).each do |organization|
    organization_id = foreman_organization(:name => organization)
    if associations[organization].nil?
      associations[organization] = @api.resource(:organizations).call(:show, {'id' => organization_id})[pluralize(name)].collect do |reference_object|
        reference_object['id']
      end
    end
    associations[organization] += [id] if !associations[organization].include? id
    @api.resource(:organizations).call(:update, {
        'id' => organization_id,
        'organization' => {
            "#{name}_ids" => associations[organization]
        }
    })
  end if organizations && !organizations.empty?
end
authenticate_request(request) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 71
def authenticate_request(request)
  if HammerCLI.context[:api_connection]
    HammerCLIForeman.foreman_api_connection.authenticator.authenticate(request, {})
  else
    request.basic_auth(
      HammerCLIForeman.credentials.username,
      HammerCLIForeman.credentials.password
    )
  end
  request
end
build_os_name(name, major, minor) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 894
def build_os_name(name, major, minor)
  name += " #{major}" if major && major != ''
  name += ".#{minor}" if minor && minor != ''
  name
end
check_server_status(server) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 83
def check_server_status(server)
  url = "#{server}/api/status"
  uri = URI(url)
  nethttp = Net::HTTP.new(uri.host, uri.port)
  nethttp.use_ssl = uri.scheme == 'https'
  nethttp.verify_mode = OpenSSL::SSL::VERIFY_NONE
  server_status = nethttp.start do |http|
    request = Net::HTTP::Get.new uri
    authenticate_request(request)
    response = http.request(request)
    JSON.parse(response.body)
  end

  url = "#{server}/api/v2/plugins"
  uri = URI(url)
  nethttp = Net::HTTP.new(uri.host, uri.port)
  nethttp.use_ssl = uri.scheme == 'https'
  nethttp.verify_mode = OpenSSL::SSL::VERIFY_NONE
  server_status['plugins'] = nethttp.start do |http|
    request = Net::HTTP::Get.new uri
    authenticate_request(request)
    response = http.request(request)
    JSON.parse(response.body)['results']
  end

  server_status
end
collect_column(column) { |value| ... } click to toggle source
# File lib/hammer_cli_csv/base.rb, line 924
def collect_column(column)
  return [] if column.nil? || column.empty?
  CSV.parse_line(column, {:skip_blanks => true}).collect do |value|
    yield value
  end
end
count(value) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 1005
def count(value)
  return 1 if value.nil? || value.empty?
  value.to_i
end
execute() click to toggle source
# File lib/hammer_cli_csv/base.rb, line 51
def execute
  @api = api_connection
  @server_status = check_server_status(@server)

  if option_export?
    if option_file
      CSV.open(option_file, 'wb', {:force_quotes => false}) do |csv|
        export csv
      end
    else
      CSV do |csv|
        export csv
      end
    end
  else
    import
  end
  HammerCLI::EX_OK
end
export_column(object, name, field=nil) { |fields| ... } click to toggle source
# File lib/hammer_cli_csv/base.rb, line 914
def export_column(object, name, field=nil)
  return '' unless object[name]
  values = CSV.generate do |column|
    column << object[name].collect do |fields|
      field.nil? ? yield(fields) : fields[field]
    end
  end
  values.delete!("\n")
end
foreman_architecture(options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 413
def foreman_architecture(options = {})
  @architectures ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @architectures[options[:name]]
    if !options[:id]
      architecture = @api.resource(:architectures).call(:index, {
                                                          :per_page => 999999,
                                                          'search' => "name=\"#{options[:name]}\""
                                                        })['results']
      raise _("Architecture '%{name}' not found") % {:name => options[:name]} if !architecture || architecture.empty?
      options[:id] = architecture[0]['id']
      @architectures[options[:name]] = options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @architectures.key(options[:id])
    if !options[:name]
      architecture = @api.resource(:architectures).call(:show, {'id' => options[:id]})
      raise _("Architecture 'id=%{id}' not found") % {:id => options[:id]} if !architecture || architecture.empty?
      options[:name] = architecture['name']
      @architectures[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
foreman_container(options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 862
def foreman_container(options = {})
  @containers ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @containers[options[:name]]
    if !options[:id]
      container = @api.resource(:containers).call(:index, {
                                                   :per_page => 999999,
                                                   'search' => "name=\"#{options[:name]}\""
                                                 })['results']
      raise _("Container '%{name}' not found") % {:name => options[:name]} if !container || container.empty?
      options[:id] = container[0]['id']
      @containers[options[:name]] = options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @containers.key(options[:id])
    if !options[:name]
      container = @api.resource(:containers).call(:show, {'id' => options[:id]})
      raise _("Container 'id=%{id}' not found") % {:id => options[:id]} if !container || container.empty?
      options[:name] = container['name']
      @containers[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
foreman_domain(options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 444
def foreman_domain(options = {})
  @domains ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @domains[options[:name]]
    if !options[:id]
      domain = @api.resource(:domains).call(:index, {
                                              :per_page => 999999,
                                              'search' => "name=\"#{options[:name]}\""
                                            })['results']
      raise _("Domain '%{name}' not found") % {:name => options[:name]} if !domain || domain.empty?
      options[:id] = domain[0]['id']
      @domains[options[:name]] = options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @domains.key(options[:id])
    if !options[:name]
      domain = @api.resource(:domains).call(:show, {'id' => options[:id]})
      raise _("Domain 'id=%{id}' not found") % {:id => options[:id]} if !domain || domain.empty?
      options[:name] = domain['name']
      @domains[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
foreman_environment(options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 315
def foreman_environment(options = {})
  @environments ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @environments[options[:name]]
    if !options[:id]
      environment = @api.resource(:environments).call(:index, {
                                                        :per_page => 999999,
                                                        'search' => "name=\"#{ options[:name] }\""
                                                      })['results']
      raise _("Puppet environment '%{name}' not found") % {:name => options[:name]} if !environment || environment.empty?
      options[:id] = environment[0]['id']
      @environments[options[:name]] = options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @environments.key(options[:id])
    if !options[:name]
      environment = @api.resource(:environments).call(:show, {'id' => options[:id]})
      raise _("Puppet environment 'id=%{id}' not found") % {:id => options[:id]} if !environment || environment.empty?
      options[:name] = environment['name']
      @environments[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
foreman_filter(role, resource, search) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 301
def foreman_filter(role, resource, search)
  search = nil if search && search.empty?
  filters = @api.resource(:filters).call(:index, {
                                           :per_page => 999999,
                                           'search' => "role=\"#{role}\""
                                         })['results']
  filters.each do |filter|
    resource_type = (filter['resource_type'] || '').split(':')[-1] # To remove "Katello::" when present
    return filter['id'] if resource_type == resource && filter['search'] == search
  end

  nil
end
foreman_host(options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 539
def foreman_host(options = {})
  @query_hosts ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @query_hosts[options[:name]]
    if !options[:id]
      host = @api.resource(:hosts).call(:index, {
                                          :per_page => 999999,
                                          'search' => "name=\"#{options[:name]}\""
                                        })['results']
      raise _("Host '%{name}' not found") % {:name => options[:name]} if !host || host.empty?
      options[:id] = host[0]['id']
      @query_hosts[options[:name]] = options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @query_hosts.key(options[:id])
    if !options[:name]
      host = @api.resource(:hosts).call(:show, {'id' => options[:id]})
      raise _("Host 'id=%{id}' not found") % {:id => options[:id]} if !host || host.empty?
      options[:name] = host['name']
      @query_hosts[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
foreman_hostgroup(options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 570
def foreman_hostgroup(options = {})
  @query_hostgroups ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @query_hostgroups[options[:name]]
    if !options[:id]
      hostgroup = @api.resource(:hostgroups).call(:index, {
                                          :per_page => 999999,
                                          'search' => "name=\"#{options[:name]}\""
                                        })['results']
      raise _("Host Group '%{name}' not found") % {:name => options[:name]} if !hostgroup || hostgroup.empty?
      options[:id] = hostgroup[0]['id']
      @query_hostgroups[options[:name]] = options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @query_hostgroups.key(options[:id])
    if !options[:name]
      hostgroup = @api.resource(:hostgroups).call(:show, {'id' => options[:id]})
      raise _("Host Group 'id=%{id}' not found") % {:id => options[:id]} if !hostgroup || hostgroup.empty?
      options[:name] = hostgroup['name']
      @query_hostgroups[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
foreman_location(options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 208
def foreman_location(options = {})
  @locations ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @locations[options[:name]]
    if !options[:id]
      location = @api.resource(:locations).call(:index, {
                                                  :per_page => 999999,
                                                  'search' => "name=\"#{options[:name]}\""
                                                })['results']
      raise _("Location '%{name}' not found") % {:name => options[:name]} if !location || location.empty?
      options[:id] = location[0]['id']
      @locations[options[:name]] = options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @locations.key(options[:id])
    if !options[:name]
      location = @api.resource(:locations).call(:show, {'id' => options[:id]})
      raise _("Location 'id=%{id}' not found") % {:id => options[:id]} if !location || location.empty?
      options[:name] = location['name']
      @locations[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
foreman_medium(options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 507
def foreman_medium(options = {})
  @media ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @media[options[:name]]
    if !options[:id]
      ptable = @api.resource(:media).call(:index, {
                                              :per_page => 999999,
                                              'search' => "name=\"#{options[:name]}\""
                                            })['results']
      raise _("Partition table '%{name}' not found") % {:name => options[:name]} if !ptable || ptable.empty?
      options[:id] = ptable[0]['id']
      @media[options[:name]] = options[:id]
    end
    result = options[:id]
  elsif options[:id]
    return nil if options[:id].nil?
    options[:name] = @media.key(options[:id])
    if !options[:name]
      ptable = @api.resource(:media).call(:show, {'id' => options[:id]})
      options[:name] = ptable['name']
      @media[options[:name]] = options[:id]
    end
    result = options[:name]
  elsif !options[:name] && !options[:id]
    result = ''
  end

  result
end
foreman_operatingsystem(options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 377
def foreman_operatingsystem(options = {})
  @operatingsystems ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @operatingsystems[options[:name]]
    if !options[:id]
      (osname, major, minor) = split_os_name(options[:name])
      search = "name=\"#{osname}\" and major=\"#{major}\" and minor=\"#{minor}\""
      operatingsystems = @api.resource(:operatingsystems).call(:index, {
                                                                 :per_page => 999999,
                                                                 'search' => search
                                                               })['results']
      operatingsystem = operatingsystems[0]
      raise _("Operating system '%{name}' not found") % {:name => options[:name]} if !operatingsystem || operatingsystem.empty?
      options[:id] = operatingsystem['id']
      @operatingsystems[options[:name]] = options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @operatingsystems.key(options[:id])
    if !options[:name]
      operatingsystem = @api.resource(:operatingsystems).call(:show, {'id' => options[:id]})
      raise _("Operating system 'id=%{id}' not found") % {:id => options[:id]} if !operatingsystem || operatingsystem.empty?
      options[:name] = build_os_name(operatingsystem['name'],
                                     operatingsystem['major'],
                                     operatingsystem['minor'])
      @operatingsystems[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
foreman_organization(options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 177
def foreman_organization(options = {})
  @organizations ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @organizations[options[:name]]
    if !options[:id]
      organization = @api.resource(:organizations).call(:index, {
                                                          :per_page => 999999,
                                                          'search' => "name=\"#{options[:name]}\""
                                                        })['results']
      raise _("Organization '%{name}' not found") % {:name => options[:name]} if !organization || organization.empty?
      options[:id] = organization[0]['id']
      @organizations[options[:name]] = options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @organizations.key(options[:id])
    if !options[:name]
      organization = @api.resource(:organizations).call(:show, {'id' => options[:id]})
      raise _("Organization 'id=%{id}' not found") % {:id => options[:id]} if !organization || organization.empty?
      options[:name] = organization['name']
      @organizations[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
foreman_partitiontable(options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 475
def foreman_partitiontable(options = {})
  @ptables ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @ptables[options[:name]]
    if !options[:id]
      ptable = @api.resource(:ptables).call(:index, {
                                              :per_page => 999999,
                                              'search' => "name=\"#{options[:name]}\""
                                            })['results']
      raise _("Partition table '%{name}' not found") % {:name => options[:name]} if !ptable || ptable.empty?
      options[:id] = ptable[0]['id']
      @ptables[options[:name]] = options[:id]
    end
    result = options[:id]
  elsif options[:id]
    return nil if options[:id].nil?
    options[:name] = @ptables.key(options[:id])
    if !options[:name]
      ptable = @api.resource(:ptables).call(:show, {'id' => options[:id]})
      options[:name] = ptable['name']
      @ptables[options[:name]] = options[:id]
    end
    result = options[:name]
  elsif !options[:name] && !options[:id]
    result = ''
  end

  result
end
foreman_permission(options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 270
def foreman_permission(options = {})
  @permissions ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @permissions[options[:name]]
    if !options[:id]
      permission = @api.resource(:permissions).call(:index, {
                                                      :per_page => 999999,
                                                      'name' => options[:name]
                                                    })['results']
      raise _("Permission '%{name}' not found") % {:name => options[:name]} if !permission || permission.empty?
      options[:id] = permission[0]['id']
      @permissions[options[:name]] = options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @permissions.key(options[:id])
    if !options[:name]
      permission = @api.resource(:permissions).call(:show, {'id' => options[:id]})
      raise _("Permission 'id=%{id}' not found") % {:id => options[:id]} if !permission || permission.empty?
      options[:name] = permission['name']
      @permissions[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
foreman_provisioning_template(options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 601
def foreman_provisioning_template(options = {})
  @query_config_templates ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @query_config_templates[options[:name]]
    if !options[:id]
      config_template = @api.resource(:config_templates).call(:index, {
                                          :per_page => 999999,
                                          'search' => "name=\"#{options[:name]}\""
                                        })['results']
      raise _("Provisioning template '%{name}' not found") % {:name => options[:name]} if !config_template || config_template.empty?
      options[:id] = config_template[0]['id']
      @query_config_templates[options[:name]] = options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @query_config_templates.key(options[:id])
    if !options[:name]
      config_template = @api.resource(:config_templates).call(:show, {'id' => options[:id]})
      raise _("Provisioning template 'id=%{id}' not found") % {:id => options[:id]} if !config_template || config_template.empty?
      options[:name] = config_template['name']
      @query_config_templates[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
foreman_role(options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 239
def foreman_role(options = {})
  @roles ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @roles[options[:name]]
    if !options[:id]
      role = @api.resource(:roles).call(:index, {
                                          :per_page => 999999,
                                          'search' => "name=\"#{options[:name]}\""
                                        })['results']
      raise _("Role '%{name}' not found") % {:name => options[:name]} if !role || role.empty?
      options[:id] = role[0]['id']
      @roles[options[:name]] = options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @roles.key(options[:id])
    if !options[:name]
      role = @api.resource(:roles).call(:show, {'id' => options[:id]})
      raise _("Role 'id=%{id}' not found") % {:id => options[:id]} if !role || role.empty?
      options[:name] = role['name']
      @roles[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
foreman_smart_proxy(options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 632
def foreman_smart_proxy(options = {})
  @query_smart_proxies ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @query_smart_proxies[options[:name]]
    if !options[:id]
      smart_proxy = @api.resource(:smart_proxies).call(:index, {
                                          :per_page => 999999,
                                          'search' => "name=\"#{options[:name]}\""
                                        })['results']
      raise _("Smart Proxy '%{name}' not found") % {:name => options[:name]} if !smart_proxy || smart_proxy.empty?
      options[:id] = smart_proxy[0]['id']
      @query_smart_proxies[options[:name]] = options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @query_smart_proxies.key(options[:id])
    if !options[:name]
      smart_proxy = @api.resource(:smart_proxies).call(:show, {'id' => options[:id]})
      raise _("Smart Proxy 'id=%{id}' not found") % {:id => options[:id]} if !smart_proxy || smart_proxy.empty?
      options[:name] = smart_proxy['name']
      @query_smart_proxies[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
foreman_template_kind(options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 346
def foreman_template_kind(options = {})
  @template_kinds ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @template_kinds[options[:name]]
    if !options[:id]
      template_kind = @api.resource(:template_kinds).call(:index, {
                                          :per_page => 999999,
                                          'search' => "name=\"#{options[:name]}\""
                                        })['results']
      raise _("Template kind '%{name}' not found") % {:name => options[:name]} if !template_kind || template_kind.empty?
      options[:id] = template_kind[0]['id']
      @template_kinds[options[:name]] = options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @template_kinds.key(options[:id])
    if !options[:name]
      template_kind = @api.resource(:template_kinds).call(:show, {'id' => options[:id]})
      raise _("Template kind 'id=%{id}' not found") % {:id => options[:id]} if !template_kind || template_kind.empty?
      options[:name] = template_kind['name']
      @template_kinds[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
hammer(context = nil) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 173
def hammer(context = nil)
  HammerCLI::MainCommand.new('', context || hammer_context)
end
hammer_context() click to toggle source
# File lib/hammer_cli_csv/base.rb, line 165
def hammer_context
  {
    :interactive => false,
    :username => 'admin', # TODO: this needs to come from config/settings
    :password => 'changeme' # TODO: this needs to come from config/settings
  }
end
help() click to toggle source
Calls superclass method
# File lib/hammer_cli_csv/base.rb, line 42
def help
  print_message _('**** This command is unsupported and is provided as tech preview. ****') unless supported?
  super + self.class.help_columns
end
katello_contentview(organization, options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 697
def katello_contentview(organization, options = {})
  @contentviews ||= {}
  @contentviews[organization] ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @contentviews[organization][options[:name]]
    if !options[:id]
      @api.resource(:content_views).call(:index, {
          :per_page => 999999,
          'organization_id' => foreman_organization(:name => organization)
      })['results'].each do |contentview|
        @contentviews[organization][contentview['name']] = contentview['id']
      end
      options[:id] = @contentviews[organization][options[:name]]
      raise _("Content view '%{name}' not found") % {:name => options[:name]} if !options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @contentviews.key(options[:id])
    if !options[:name]
      contentview = @api.resource(:content_views).call(:show, {'id' => options[:id]})
      raise _("Puppet contentview 'id=%{id}' not found") % {:id => options[:id]} if !contentview || contentview.empty?
      options[:name] = contentview['name']
      @contentviews[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
katello_contentviewversion(organization, name, version='latest') click to toggle source
# File lib/hammer_cli_csv/base.rb, line 730
def katello_contentviewversion(organization, name, version='latest')
  @contentviewversions ||= {}
  @contentviewversions[organization] ||= {}
  versionname = "#{version}|#{name}"

  return nil if name.nil? || name.empty?
  id = @contentviewversions[organization][versionname]
  if !id
    contentview_id = katello_contentview(organization, :name => name)
    contentviewversions = @api.resource(:content_view_versions).call(:index, {
                              :per_page => 999999,
                              'content_view_id' => contentview_id
                          })['results'].sort { |a, b| a['created_at'] <=> b['created_at'] }
    if version == 'latest'
      @contentviewversions[organization][versionname] = contentviewversions[-1]['id']
    else
      contentviewversions.each do |contentviewversion|
        if contentviewversion['version'] == version.to_f
          @contentviewversions[organization][versionname] = contentviewversion['id']
        end
      end
    end
    id = @contentviewversions[organization][versionname]
    raise _("Content view version '%{name}' with version '%{version}' not found") % {:name => name, :version => version} if !id
  end

  id
end
katello_hostcollection(organization, options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 792
def katello_hostcollection(organization, options = {})
  @hostcollections ||= {}
  @hostcollections[organization] ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @hostcollections[organization][options[:name]]
    if !options[:id]
      @api.resource(:host_collections).call(:index,
              {
                :per_page => 999999,
                'organization_id' => foreman_organization(:name => organization),
                'search' => search_string('host-collections',options[:name])
              })['results'].each do |hostcollection|
        @hostcollections[organization][hostcollection['name']] = hostcollection['id'] if hostcollection
      end
      options[:id] = @hostcollections[organization][options[:name]]
      raise _("Host collection '%{name}' not found") % {:name => options[:name]} if !options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @hostcollections.key(options[:id])
    if !options[:name]
      hostcollection = @api.resource(:host_collections).call(:show, {'id' => options[:id]})
      raise _("Host collection 'id=%{id}' not found") % {:id => options[:id]} if !hostcollection || hostcollection.empty?
      options[:name] = hostcollection['name']
      @hostcollections[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
katello_product(organization, options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 827
def katello_product(organization, options = {})
  @products ||= {}
  @products[organization] ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @products[organization][options[:name]]
    if !options[:id]
      @api.resource(:products).call(:index,
              {
                :per_page => 999999,
                'organization_id' => foreman_organization(:name => organization),
                'search' => search_string('host-collections',options[:name])
              })['results'].each do |product|
        @products[organization][product['name']] = product['id'] if product
      end
      options[:id] = @products[organization][options[:name]]
      raise _("Host collection '%{name}' not found") % {:name => options[:name]} if !options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @products.key(options[:id])
    if !options[:name]
      product = @api.resource(:host_collections).call(:show, {'id' => options[:id]})
      raise _("Host collection 'id=%{id}' not found") % {:id => options[:id]} if !product || product.empty?
      options[:name] = product['name']
      @products[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
katello_repository(organization, options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 759
def katello_repository(organization, options = {})
  @repositories ||= {}
  @repositories[organization] ||= {}

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @repositories[organization][options[:name]]
    if !options[:id]
      @api.resource(:repositories).call(:index, {
          :per_page => 999999,
          'organization_id' => foreman_organization(:name => organization)
      })['results'].each do |repository|
        @repositories[organization][repository['name']] = repository['id']
      end
      options[:id] = @repositories[organization][options[:name]]
      raise _("Repository '%{name}' not found") % {:name => options[:name]} if !options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @repositories.key(options[:id])
    if !options[:name]
      repository = @api.resource(:repositories).call(:show, {'id' => options[:id]})
      raise _("Puppet repository 'id=%{id}' not found") % {:id => options[:id]} if !repository || repository.empty?
      options[:name] = repository['name']
      @repositoriesr[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
labelize(name) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 122
def labelize(name)
  name.gsub(/[^a-z0-9\-_]/i, '_')
end
lifecycle_environment(organization, options = {}) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 663
def lifecycle_environment(organization, options = {})
  @lifecycle_environments ||= {}
  @lifecycle_environments[organization] ||= {
  }

  if options[:name]
    return nil if options[:name].nil? || options[:name].empty?
    options[:id] = @lifecycle_environments[organization][options[:name]]
    if !options[:id]
      @api.resource(:lifecycle_environments).call(:index, {
          :per_page => 999999,
          'organization_id' => foreman_organization(:name => organization)
      })['results'].each do |environment|
        @lifecycle_environments[organization][environment['name']] = environment['id']
      end
      options[:id] = @lifecycle_environments[organization][options[:name]]
      raise _("Lifecycle environment '%{name}' not found") % {:name => options[:name]} if !options[:id]
    end
    result = options[:id]
  else
    return nil if options[:id].nil?
    options[:name] = @lifecycle_environments.key(options[:id])
    if !options[:name]
      environment = @api.resource(:lifecycle_environments).call(:show, {'id' => options[:id]})
      raise _("Lifecycle environment '%{name}' not found") % {:name => options[:name]} if !environment || environment.empty?
      options[:name] = environment['name']
      @lifecycle_environments[options[:name]] = options[:id]
    end
    result = options[:name]
  end

  result
end
namify(name_format, number = 0) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 111
def namify(name_format, number = 0)
  return '' unless name_format
  if name_format.index('%')
    name = name_format % number
  else
    name = name_format
  end
  name = "#{option_prefix}#{name}" if option_prefix
  name
end
pluralize(name) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 931
def pluralize(name)
  case name
  when /smart_proxy/
    'smart_proxies'
  else
    "#{name}s"
  end
end
split_os_name(name) click to toggle source

“Red Hat 6.4” => “Red Hat”, “6”, “4” “Red Hat 6” => “Red Hat”, “6”, ''

# File lib/hammer_cli_csv/base.rb, line 902
def split_os_name(name)
  tokens = name.split(' ')
  is_number = Float(tokens[-1]) rescue false
  if is_number
    (major, minor) = tokens[-1].split('.').flatten
    name = tokens[0...-1].join(' ')
  else
    name = tokens.join(' ')
  end
  [name, major || '', minor || '']
end
supported?() click to toggle source
# File lib/hammer_cli_csv/base.rb, line 38
def supported?
  self.class.supported?
end
thread_import(return_headers = false, filename=nil, name_column=nil) { |line| ... } click to toggle source
# File lib/hammer_cli_csv/base.rb, line 126
def thread_import(return_headers = false, filename=nil, name_column=nil)
  filename ||= option_file || '/dev/stdin'
  csv = []
  CSV.new(open(filename), {
      :skip_blanks => true,
      :headers => :first_row,
      :return_headers => return_headers
  }).each do |line|
    csv << line
  end
  lines_per_thread = csv.length / option_threads.to_i + 1
  splits = []

  option_threads.to_i.times do |current_thread|
    start_index = ((current_thread) * lines_per_thread).to_i
    finish_index = ((current_thread + 1) * lines_per_thread).to_i
    finish_index = csv.length if finish_index > csv.length
    if start_index <= finish_index
      lines = csv[start_index...finish_index].clone
      splits << Thread.new do
        lines.each do |line|
          next if !line[name_column || NAME].nil? && line[name_column || NAME][0] == '#'
          begin
            logger.debug(line)
            yield line
          rescue RuntimeError => e
            message = "#{e}\n#{line}"
            option_continue_on_error? ? $stderr.puts(_("Error: %{message}") % {:message => message}) : raise(message)
          end
        end
      end
    end
  end

  splits.each do |thread|
    thread.join
  end
end

Private Instance Methods

search_string(resource, name) click to toggle source
# File lib/hammer_cli_csv/base.rb, line 1012
def search_string(resource, name)
  operator = case resource
             when "gpg-key", "sync-plan", "lifecycle-environment", "host-collections"
               @server_status['version'] && @server_status['version'].match(/\A1\.6/) ? ':' : '='
             else
               ':'
             end
  "name#{operator}\"#{name}\""
end