Skip to content

Commit

Permalink
general fixes
Browse files Browse the repository at this point in the history
+ rex wip
operating-systems - additional columns, redmine issues created
+ allow --dir w/ individual --
  • Loading branch information
Tom McKay committed Jan 8, 2016
1 parent f3f82d6 commit 6b4c161
Show file tree
Hide file tree
Showing 10 changed files with 120 additions and 35 deletions.
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,13 @@ Creating organization 'abcMega Corporation'... done
| Name | Name of the operating systems to update or create | x | x | x | x | |
| Count | Number of times to iterate this CSV row, incrementing value for substitution | | x | x | x | |
| Family | Operating system family | | x | x | x | |
| Description | Operating system description | | x | x | x | |
| Password Hash | MD5, SHA256, SHA512, or Base64 | | x | x | x | |
| Partition Tables | List of partition table names | | x | x | x | |
| Architectures | List of architectures names | | x | x | x | |
| Media | List of media names | | x | x | x | |
| Provisioning Templates | List of provisioning template names | | x | x | x | |
| Parameters | List of parameters | | x | x | x | |

## Domains

Expand Down
35 changes: 33 additions & 2 deletions lib/hammer_cli_csv/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -546,6 +546,37 @@ def foreman_hostgroup(options = {})
result
end

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 '#{options[:name]}' not found" 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=#{options[:id]}' not found" 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

def foreman_smart_proxy(options = {})
@query_smart_proxies ||= {}

Expand Down Expand Up @@ -864,11 +895,11 @@ def split_os_name(name)
[name, major || '', minor || '']
end

def export_column(object, name, field)
def export_column(object, name, field=nil)
return '' unless object[name]
values = CSV.generate do |column|
column << object[name].collect do |fields|
fields[field]
field.nil? ? yield(fields) : fields[field]
end
end
values.delete!("\n")
Expand Down
4 changes: 2 additions & 2 deletions lib/hammer_cli_csv/content_view_filters.rb
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ def create_filters_from_csv(line)
'inclusion' => filter_inclusion?(line[TYPE]),
'repository_ids' => repository_ids
})['id']
@existing_filters[line[ORGANIZATION]][filter_name] = filter_id
@existing_filters[line[ORGANIZATION]][line[CONTENTVIEW]][filter_name] = filter_id
else
print "Updating filter '#{filter_name}' for content view filter '#{line[CONTENTVIEW]}'..." if option_verbose?
@api.resource(:content_view_filters).call(:update, {
Expand Down Expand Up @@ -173,7 +173,7 @@ def import_filter_type(type)
end

def export_filter_type(type)
case type.split[1]
case type
when /rpm/i
'Packages'
when /package_group/i
Expand Down
3 changes: 2 additions & 1 deletion lib/hammer_cli_csv/hosts.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,15 @@ def export

name = host['name']
organization = foreman_organization(:id => host['organization_id'])
location = foreman_location(:id => host['location_id'])
environment = foreman_environment(:id => host['environment_id'])
operatingsystem = foreman_operatingsystem(:id => host['operatingsystem_id'])
architecture = foreman_architecture(:id => host['architecture_id'])
mac = host['mac']
domain = foreman_domain(:id => host['domain_id'])
ptable = foreman_partitiontable(:id => host['ptable_id'])

csv << [name, organization, environment, operatingsystem, architecture, mac, domain, ptable]
csv << [name, organization, location, environment, operatingsystem, architecture, mac, domain, ptable]
end
end
end
Expand Down
11 changes: 8 additions & 3 deletions lib/hammer_cli_csv/import.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,14 @@ def execute
@api = ApipieBindings::API.new({:uri => @server, :username => @username,
:password => @password, :api_version => 2})

# Swing the hammers
resources_specified = RESOURCES.collect do |resource|
resource if self.send("option_#{resource}") || ARGV.include?('--' + resource.gsub('_', '-'))
end
resources_specified.compact!
RESOURCES.each do |resource|
hammer_resource(resource)
if resources_specified.include?(resource) || (resources_specified == [] && option_dir)
hammer_resource(resource)
end
end

HammerCLI::EX_OK
Expand All @@ -62,7 +67,7 @@ def hammer(context = nil)

def hammer_resource(resource)
return if !self.send("option_#{resource}") && !option_dir
options_file = self.send("option_#{resource}") || "#{option_dir}/#{resource.gsub('_', '-')}.csv"
options_file = "#{option_dir}/#{resource.gsub('_', '-')}.csv" || self.send("option_#{resource}")
unless options_file_exists? options_file
if option_dir
puts _("Skipping #{resource} because '#{options_file}' does not exist") if option_verbose?
Expand Down
8 changes: 7 additions & 1 deletion lib/hammer_cli_csv/job_templates.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@ class JobTemplatesCommand < BaseCommand
PROVIDER = 'Provider'
SNIPPET = 'Snippet'
TEMPLATE = 'Template'
INPUT_NAME = 'Input Name'

def export
CSV.open(option_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
csv << [NAME, ORGANIZATIONS, LOCATIONS, JOB, PROVIDER, SNIPPET, TEMPLATE]
csv << [NAME, ORGANIZATIONS, LOCATIONS, JOB, PROVIDER, SNIPPET, TEMPLATE, INPUT_NAME]
@api.resource(:job_templates).call(:index, {
:per_page => 999999
})['results'].each do |template_id|
Expand All @@ -27,6 +28,11 @@ def export
organizations = export_column(template, 'organizations', 'name')
locations = export_column(template, 'locations', 'name')
csv << [name, organizations, locations, job, provider, snippet, template['template']]

template['template_inputs'].each do |input_id|
input = @api.resource(:templates).call(:template_inputs, {:template_id => template['id'], :id => input_id['id']})
x = input
end
end
end
end
Expand Down
37 changes: 33 additions & 4 deletions lib/hammer_cli_csv/operating_systems.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,32 @@ class OperatingSystemsCommand < BaseCommand

FAMILY = 'Family'
DESCRIPTION = 'Description'
PASSWORD_HASH = 'Password Hash'
PARTITION_TABLES = 'Partition Tables'
ARCHITECTURES = 'Architectures'
MEDIA = 'Media'
PROVISIONING_TEMPLATES = 'Provisioning Templates'
PARAMETERS = 'Parameters'

def export
CSV.open(option_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
csv << [NAME, DESCRIPTION, FAMILY]
@api.resource(:operatingsystems).call(:index, {:per_page => 999999})['results'].each do |operatingsystem|
csv << [NAME, DESCRIPTION, FAMILY, PASSWORD_HASH, PARTITION_TABLES, ARCHITECTURES, MEDIA,
PROVISIONING_TEMPLATES, PARAMETERS]
@api.resource(:operatingsystems).call(:index, {:per_page => 999999})['results'].each do |operatingsystem_id|
operatingsystem = @api.resource(:operatingsystems).call(:show, {:id => operatingsystem_id['id']})
name = build_os_name(operatingsystem['name'], operatingsystem['major'], operatingsystem['minor'])
description = operatingsystem['description']
family = operatingsystem['family']
csv << [name, description, family]
password_hash = operatingsystem['password_hash']
partition_tables = export_column(operatingsystem, 'ptables', 'name')
architectures = export_column(operatingsystem, 'architectures', 'name')
media = export_column(operatingsystem, 'media', 'name')
partition_tables = export_column(operatingsystem, 'ptables', 'name')
parameters = export_column(operatingsystem, 'parameters') do |parameter|
"#{parameter['name']}|#{parameter['value']}"
end
csv << [name, description, family, password_hash, partition_tables, architectures,
media, partition_tables, parameters]
end
end
end
Expand All @@ -34,9 +51,21 @@ def create_operatingsystems_from_csv(line)
params = {
'operatingsystem' => {
'family' => line[FAMILY],
'description' => line[DESCRIPTION]
'description' => line[DESCRIPTION],
'password_hash' => line[PASSWORD_HASH]
}
}
params['operatingsystem']['architecture_ids'] = collect_column(line[ARCHITECTURES]) do |name|
foreman_architecture(:name => name)
end
# TODO: http://projects.theforeman.org/issues/12919
#params['operatingsystem']['provisioning_template_ids'] = collect_column(line[PROVISIONING_TEMPLATES]) do |name|
# foreman_provisioning_template(:name => name)
#end
# TODO: http://projects.theforeman.org/issues/12920
#params['operatingsystem']['os_parameters?'] = collect_column(line[PARAMETERS]) do |name_value|
# ????
#end
count(line[COUNT]).times do |number|
name = namify(line[NAME], number)
(osname, major, minor) = split_os_name(name)
Expand Down
12 changes: 8 additions & 4 deletions lib/hammer_cli_csv/provisioning_templates.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ class ProvisioningTemplatesCommand < BaseCommand
command_name 'provisioning-templates'
desc 'import or export provisioning templates'

option %w(--include-locked), :flag, 'Include locked templates (will fail if re-imported)',
:attribute_name => :option_include_locked

ORGANIZATIONS = 'Organizations'
LOCATIONS = 'Locations'
OPERATINGSYSTEMS = 'Operating Systems'
Expand All @@ -14,12 +17,13 @@ class ProvisioningTemplatesCommand < BaseCommand
def export
CSV.open(option_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
csv << [NAME, ORGANIZATIONS, LOCATIONS, OPERATINGSYSTEMS, ASSOCIATIONS, KIND, TEMPLATE]
@api.resource(:config_templates).call(:index, {
params = {
:per_page => 999999
})['results'].each do |template_id|
}
params['search'] = "organization = \"#{option_organization}\"" if option_organization
@api.resource(:config_templates).call(:index, params)['results'].each do |template_id|
template = @api.resource(:config_templates).call(:show, {:id => template_id['id']})
next if template['locked']
next unless option_organization.nil? || template['organizations'].detect { |org| org['name'] == option_organization }
next if template['locked'] && !option_include_locked?
name = template['name']
kind = template['snippet'] ? 'snippet' : template['template_kind_name']
organizations = export_column(template, 'organizations', 'name')
Expand Down
1 change: 1 addition & 0 deletions lib/hammer_cli_csv/subscriptions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ def enable_products_from_csv(line)
end

def import_manifest_from_csv(line)
return if option_organization && line[ORGANIZATION] != option_organization
args = %W{
--server #{ @server } --username #{ @username } --password #{ @password }
subscription upload --file #{ line[MANIFEST] }
Expand Down
37 changes: 19 additions & 18 deletions test/data/products.csv
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
Name,Count,Label,Organization,Repository,Repository Type,Repository Url
katello-client-1.4,1,katello-client-1_4,Mega Corporation,katello-1.4-client,Custom Yum,http://fedorapeople.org/groups/katello/releases/yum/1.4-client/RHEL/6Server/x86_64/
katello-1.4,1,katello-1_4,Mega Corporation,katello-1.4,Custom Yum,http://fedorapeople.org/groups/katello/releases/yum/1.4/RHEL/6Server/x86_64/
Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server Kickstart x86_64 6.1,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.1/x86_64/kickstart
Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server Kickstart x86_64 6.2,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.2/x86_64/kickstart
Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server Kickstart x86_64 6.3,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.3/x86_64/kickstart
Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server Kickstart x86_64 6.4,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.4/x86_64/kickstart
Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server Kickstart x86_64 6.5,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.5/x86_64/kickstart
Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server Kickstart x86_64 6Server,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6Server/x86_64/kickstart
Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server RPMs x86_64 6.1,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.1/x86_64/os
Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server RPMs x86_64 6.2,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.2/x86_64/os
Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server RPMs x86_64 6.3,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.3/x86_64/os
Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server RPMs x86_64 6.4,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.4/x86_64/os
Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server RPMs x86_64 6.5,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.5/x86_64/os
Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server RPMs x86_64 6Server,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6Server/x86_64/os
Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 7 Server Kickstart x86_64 7.0,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/7/7.0/x86_64/kickstart
Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 7 Server Kickstart) x86_64 7Server,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/7/7Server/x86_64/kickstart
Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 7 Server RPMs x86_64 7.0,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/7/7.0/x86_64/os
Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 7 Server RPMs x86_64 7Server,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/7/7Server/x86_64/os
Puppet Labs,1,puppetlabs,Mega Corporation,puppet-forge,Custom Puppet,https://forge.puppetlabs.com/
# katello-client-1.4,1,katello-client-1_4,Mega Corporation,katello-1.4-client,Custom Yum,http://fedorapeople.org/groups/katello/releases/yum/1.4-client/RHEL/6Server/x86_64/
# katello-1.4,1,katello-1_4,Mega Corporation,katello-1.4,Custom Yum,http://fedorapeople.org/groups/katello/releases/yum/1.4/RHEL/6Server/x86_64/
# Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server Kickstart x86_64 6.1,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.1/x86_64/kickstart
# Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server Kickstart x86_64 6.2,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.2/x86_64/kickstart
# Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server Kickstart x86_64 6.3,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.3/x86_64/kickstart
# Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server Kickstart x86_64 6.4,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.4/x86_64/kickstart
# Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server Kickstart x86_64 6.5,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.5/x86_64/kickstart
# Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server Kickstart x86_64 6Server,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6Server/x86_64/kickstart
# Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server RPMs x86_64 6.1,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.1/x86_64/os
# Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server RPMs x86_64 6.2,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.2/x86_64/os
# Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server RPMs x86_64 6.3,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.3/x86_64/os
# Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server RPMs x86_64 6.4,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.4/x86_64/os
# Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server RPMs x86_64 6.5,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6.5/x86_64/os
# Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 6 Server RPMs x86_64 6Server,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/6/6Server/x86_64/os
# Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 7 Server Kickstart x86_64 7.0,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/7/7.0/x86_64/kickstart
# Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 7 Server Kickstart) x86_64 7Server,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/7/7Server/x86_64/kickstart
# Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 7 Server RPMs x86_64 7.0,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/7/7.0/x86_64/os
# Red Hat Enterprise Linux Server,1,Red_Hat_Enterprise_Linux_Server,Mega Corporation,Red Hat Enterprise Linux 7 Server RPMs x86_64 7Server,Red Hat Yum,https://cdn.redhat.com/content/dist/rhel/server/7/7Server/x86_64/os

0 comments on commit 6b4c161

Please sign in to comment.