class HammerCLICsv::CsvCommand::HostGroupsCommand

Constants

ARCHITECTURE
COMPUTE_PROFILE
CONTENT_SOURCE
DOMAIN
ENVIRONMENT
LOCATIONS
MEDIUM
OPERATING_SYSTEM
ORGANIZATIONS
PARENT
PARTITION_TABLE
PASSWORD
PUPPET_CA_PROXY
PUPPET_CLASSES
PUPPET_PROXY
REALM
SUBNET

Public Instance Methods

create_from_csv(line) click to toggle source
# File lib/hammer_cli_csv/host_groups.rb, line 77
def create_from_csv(line)
  return if option_organization && !CSV.parse_line(line[ORGANIZATIONS], {:skip_blanks => true}).include?(option_organization)

  params = {
    'hostgroup' => {
      'architecture_id' => foreman_architecture(:name => line[ARCHITECTURE]),
      'operatingsystem_id' => foreman_operatingsystem(:name => line[OPERATING_SYSTEM]),
      'medium_id' => foreman_medium(:name => line[MEDIUM]),
      'ptable_id' => foreman_partitiontable(:name => line[PARTITION_TABLE]),
      'root_pass' => line[PASSWORD],
      'organization_ids' => collect_column(line[ORGANIZATIONS]) do |organization|
        foreman_organization(:name => organization)
      end,
      'location_ids' => collect_column(line[LOCATIONS]) do |location|
        foreman_location(:name => location)
      end
    }
  }

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

    if !@existing.include? name
      print "Creating host group '#{name}'..." if option_verbose?
      hostgroup = @api.resource(:hostgroups).call(:create, params)
      @existing[name] = hostgroup['id']
    else
      print "Updating host '#{name}'..." if option_verbose?
      params['id'] = @existing[name]
      hostgroup = @api.resource(:hostgroups).call(:update, params)
    end

    # TODO: puppet classes
    puppetclass_ids = collect_column(line[PUPPET_CLASSES]) do |puppet_class|
      module_name, name = puppet_class.split('/')
      foreman_puppet_class(:name => name)
    end
    existing_ids = hostgroup['puppet_classes'].collect { |puppet_class| puppet_class['id'] }
    # DELETE existing_ids - puppetclass_ids
    # POST puppetclass_ids - existing_ids

    print "done\n" if option_verbose?
  end
end
export(csv) click to toggle source
# File lib/hammer_cli_csv/host_groups.rb, line 25
def export(csv)
  csv << [NAME, PARENT, ORGANIZATIONS, LOCATIONS, SUBNET, DOMAIN, OPERATING_SYSTEM,
          ENVIRONMENT, COMPUTE_PROFILE, PARTITION_TABLE, MEDIUM, ARCHITECTURE, REALM,
          PUPPET_PROXY, PUPPET_CA_PROXY, CONTENT_SOURCE, PASSWORD, PUPPET_CLASSES]
  search_options = {:per_page => 999999}
  search_options['search'] = "organization=\"#{option_organization}\"" if option_organization
  search_options['search'] = "#{search_options['search']} AND #{option_search}" if option_search
  @api.resource(:hostgroups).call(:index, search_options)['results'].each do |hostgroup|
    hostgroup = @api.resource(:hostgroups).call(:show, {'id' => hostgroup['id']})
    raise "Host Group 'id=#{hostgroup['id']}' not found" if !hostgroup || hostgroup.empty?

    name = hostgroup['name']
    organizations = export_column(hostgroup, 'organizations', 'name')
    locations = export_column(hostgroup, 'locations', 'name')
    subnet = hostgroup['subnet_name']
    operating_system = hostgroup['operatingsystem_name']
    domain = hostgroup['domain_name']
    puppet_environment = hostgroup['environment_name']
    compute_profile = hostgroup['compute_profile_name']
    partition_table = hostgroup['ptable_name']
    medium = hostgroup['medium_name']
    architecture = hostgroup['architecture_name']
    realm = hostgroup['realm_name']
    puppet_proxy = hostgroup['puppet_proxy_id'] ? foreman_host(:id => hostgroup['puppet_proxy_id']) : nil
    puppet_ca_proxy = hostgroup['puppet_ca_proxy_id'] ? foreman_host(:id => hostgroup['puppet_ca_proxy_id']) : nil
    content_source = hostgroup['content_source_id'] ? foreman_host(:id => hostgroup['content_source_id']) : nil
    parent = hostgroup['ancestry'] ? foreman_hostgroup(:id => hostgroup['ancestry']) : nil
    password = nil
    puppet_classes = export_column(hostgroup, 'puppetclasses') do |puppet_class|
      "#{puppet_class['module_name']}/#{puppet_class['name']}"
    end

    # TODO: http://projects.theforeman.org/issues/6273
    # API call to get the smart class variable override values

    csv << [name, parent, organizations, locations, subnet, domain, operating_system,
            puppet_environment, compute_profile, partition_table, medium, architecture,
            realm, puppet_proxy, puppet_ca_proxy, content_source, password, puppet_classes]
  end
end
import() click to toggle source
# File lib/hammer_cli_csv/host_groups.rb, line 66
def import
  @existing = {}
  @api.resource(:hostgroups).call(:index, {:per_page => 999999})['results'].each do |host_group|
    @existing[host_group['name']] = host_group['id'] if host_group
  end

  thread_import do |line|
    create_from_csv(line)
  end
end