class HammerCLICsv::CsvCommand::PuppetReportsCommand

Constants

ARCHITECTURE
CONTENTVIEW
CORES
ENVIRONMENT
HOST
OPERATINGSYSTEM
ORGANIZATION
PRODUCTS
RAM
SLA
SOCKETS
SUBSCRIPTIONS
SYSTEMGROUPS
VIRTUAL

Public Instance Methods

create_systems_from_csv(line) click to toggle source
# File lib/hammer_cli_csv/puppet_reports.rb, line 94
def create_systems_from_csv(line)
  if !@existing[line[ORGANIZATION]]
    @existing[line[ORGANIZATION]] = {}
    @api.resource(:systems).call(:index, {
        'organization_id' => line[ORGANIZATION],
        'per_page' => 999999
    })['results'].each do |system|
      @existing[line[ORGANIZATION]][system['name']] = system['uuid'] if system
    end
  end

  count(line[COUNT]).times do |number|
    name = namify(line[NAME], number)

    # TODO: w/ @daviddavis p-r
    #subscriptions(line).each do |subscription|
    #  get_subscription(line[ORGANIZATION], :name => subscription[:number])
    #end

    if !@existing[line[ORGANIZATION]].include? name
      print "Creating system '#{name}'..." if option_verbose?
      system_id = @api.resource(:systems).call(:create, {
          'name' => name,
          'organization_id' => line[ORGANIZATION],
          'environment_id' => lifecycle_environment(line[ORGANIZATION], :name => line[ENVIRONMENT]),
          'content_view_id' => lifecycle_contentview(line[ORGANIZATION], :name => line[CONTENTVIEW]),
          'facts' => facts(line),
          'installed_products' => products(line),
          'type' => 'system'
      })['uuid']
      @existing[line[ORGANIZATION]][name] = system_id
    else
      print "Updating system '#{name}'..." if option_verbose?
      puts line
      system_id = @api.resource(:systems).call(:update, {
          'id' => @existing[line[ORGANIZATION]][name],
          'name' => name,
          'environment_id' => katello_environment(line[ORGANIZATION], :name => line[ENVIRONMENT]),
          'content_view_id' => katello_contentview(line[ORGANIZATION], :name => line[CONTENTVIEW]),
          'facts' => facts(line),
          'installed_products' => products(line)
      })['uuid']
    end

    if line[VIRTUAL] == 'Yes' && line[HOST]
      raise "Host system '#{line[HOST]}' not found" if !@existing[line[ORGANIZATION]][line[HOST]]
      @host_guests[@existing[line[ORGANIZATION]][line[HOST]]] ||= []
      @host_guests[@existing[line[ORGANIZATION]][line[HOST]]] << system_id
    end

    set_host_collections(system_id, line)

    puts 'done' if option_verbose?
  end
end
export(csv) click to toggle source
# File lib/hammer_cli_csv/puppet_reports.rb, line 22
def export(csv)
  csv << [NAME, ORGANIZATION, ENVIRONMENT, CONTENTVIEW, SYSTEMGROUPS, VIRTUAL, HOST,
          OPERATINGSYSTEM, ARCHITECTURE, SOCKETS, RAM, CORES, SLA, PRODUCTS, SUBSCRIPTIONS]
  @api.resource(:organizations).call(:index, {
      :per_page => 999999
  })['results'].each do |organization|
    @api.resource(:systems).call(:index, {
        'per_page' => 999999,
        'organization_id' => organization['id']
    })['results'].each do |system|
      system = @api.resource(:systems).call(:show, {
          'id' => system['uuid'],
          'fields' => 'full'
      })

      name = system['name']
      organization_label = organization['label']
      environment = system['environment']['label']
      contentview = system['content_view']['name']
      hostcollections = CSV.generate do |column|
        column << system['systemGroups'].collect do |hostcollection|
          hostcollection['name']
        end
      end
      hostcollections.delete!("\n")
      virtual = system['facts']['virt.is_guest'] == 'true' ? 'Yes' : 'No'
      host = system['host']
      operatingsystem = "#{system['facts']['distribution.name']} " if system['facts']['distribution.name']
      operatingsystem += system['facts']['distribution.version'] if system['facts']['distribution.version']
      architecture = system['facts']['uname.machine']
      sockets = system['facts']['cpu.cpu_socket(s)']
      ram = system['facts']['memory.memtotal']
      cores = system['facts']['cpu.core(s)_per_socket']
      sla = ''
      products = CSV.generate do |column|
        column << system['installedProducts'].collect do |product|
          "#{product['productId']}|#{product['productName']}"
        end
      end
      products.delete!("\n")
      subscriptions = CSV.generate do |column|
        column << @api.resource(:subscriptions).call(:index, {
            'system_id' => system['uuid']
        })['results'].collect do |subscription|
          "#{subscription['product_id']}|#{subscription['product_name']}"
        end
      end
      subscriptions.delete!("\n")
      csv << [name, organization_label, environment, contentview, hostcollections, virtual, host,
              operatingsystem, architecture, sockets, ram, cores, sla, products, subscriptions]
    end
  end
end
import() click to toggle source
# File lib/hammer_cli_csv/puppet_reports.rb, line 76
def import
  @existing = {}
  @host_guests = {}

  thread_import do |line|
    create_systems_from_csv(line)
  end

  print 'Updating host and guest associations...' if option_verbose?
  @host_guests.each do |host_id, guest_ids|
    @api.resource(:systems).call(:update, {
        'id' => host_id,
        'guest_ids' => guest_ids
    })
  end
  puts 'done' if option_verbose?
end

Private Instance Methods

facts(line) click to toggle source
# File lib/hammer_cli_csv/puppet_reports.rb, line 152
def facts(line)
  facts = {}
  facts['cpu.core(s)_per_socket'] = line[CORES]
  facts['cpu.cpu_socket(s)'] = line[SOCKETS]
  facts['memory.memtotal'] = line[RAM]
  facts['uname.machine'] = line[ARCHITECTURE]
  if line[OPERATINGSYSTEM].index(' ')
    (facts['distribution.name'], facts['distribution.version']) = line[OPERATINGSYSTEM].split(' ')
  else
    (facts['distribution.name'], facts['distribution.version']) = ['RHEL', line[OPERATINGSYSTEM]]
  end
  facts['virt.is_guest'] = line[VIRTUAL] == 'Yes' ? true : false
  facts
end
products(line) click to toggle source
# File lib/hammer_cli_csv/puppet_reports.rb, line 176
def products(line)
  products = CSV.parse_line(line[PRODUCTS]).collect do |product_details|
    product = {}
    # TODO: these get passed straight through to candlepin; probably would be better to process in server
    #       to allow underscore product_id here
    (product['productId'], product['productName']) = product_details.split('|')
    product
  end
  products
end
set_host_collections(system_id, line) click to toggle source
# File lib/hammer_cli_csv/puppet_reports.rb, line 167
def set_host_collections(system_id, line)
  CSV.parse_line(line[SYSTEMGROUPS]).each do |hostcollection_name|
    @api.resource(:hostcollections).call(:add_systems, {
        'id' => katello_hostcollection(line[ORGANIZATION], :name => hostcollection_name),
        'system_ids' => [system_id]
    })
  end
end
subscriptions(line) click to toggle source
# File lib/hammer_cli_csv/puppet_reports.rb, line 187
def subscriptions(line)
  subscriptions = CSV.parse_line(line[SUBSCRIPTIONS]).collect do |subscription_details|
    subscription = {}
    (subscription[:number], subscription[:name]) = subscription_details.split('|')
    subscription
  end
  subscriptions
end