Project

General

Profile

« Previous | Next » 

Revision bfc065ce

Added by Thomas McKay over 10 years ago

roles-test - wip

roles-test - users now get roles, orgs, and locations

View differences:

.gitignore
pickle-email-*.html
.project
config/initializers/secret_token.rb
test/data/*.zip
test/config.yml
Gemfile
gem 'pry'
gem 'pry-debugger'
group :test do
gem 'rake'
gem 'thor'
gem 'minitest', '4.7.4'
gem 'minitest-spec-context'
gem 'simplecov'
gem 'mocha'
gem 'ci_reporter'
end
Rakefile
Rake::TestTask.new do |t|
t.libs << "lib"
t.test_files = Dir.glob('test/**/*_test.rb')
t.test_files = Dir['test/setup_test.rb'] + Dir.glob('test/**/*_test.rb')
t.verbose = true
end
hammer-it
#!/bin/csh -f
# Replaced with: rake test TEST=test/setup_test.rb
bundle exec hammer -v csv:organizations --csv-file test/data/organizations.csv
bundle exec hammer -v csv:users --csv-file test/data/users.csv
bundle exec hammer -v csv:operatingsystems --csv-file test/data/operatingsystems.csv
......
bundle exec hammer -v csv:systemgroups --csv-file test/data/systemgroups.csv
bundle exec hammer -v csv:systems --csv-file test/data/systems.csv
bundle exec hammer -v csv:activationkeys --csv-file test/data/activationkeys.csv
bundle exec hammer -v csv:roles --csv-file test/data/roles.csv
lib/hammer_cli_csv.rb
require 'hammer_cli_csv/activation_keys'
require 'hammer_cli_csv/architectures'
require 'hammer_cli_csv/domains'
require 'hammer_cli_csv/puppet_environments'
require 'hammer_cli_csv/hosts'
require 'hammer_cli_csv/locations'
require 'hammer_cli_csv/operating_systems'
require 'hammer_cli_csv/organizations'
require 'hammer_cli_csv/permissions'
require 'hammer_cli_csv/partition_tables'
require 'hammer_cli_csv/permissions'
require 'hammer_cli_csv/puppet_environments'
require 'hammer_cli_csv/puppet_facts'
require 'hammer_cli_csv/puppet_reports'
require 'hammer_cli_csv/reports'
require 'hammer_cli_csv/roles'
require 'hammer_cli_csv/system_groups'
require 'hammer_cli_csv/users'
require 'hammer_cli_csv/puppet_facts'
require 'hammer_cli_csv/puppet_reports'
require 'hammer_cli_csv/lifecycle_environments'
require 'hammer_cli_csv/activation_keys'
require 'hammer_cli_csv/content_views'
require 'hammer_cli_csv/lifecycle_environments'
require 'hammer_cli_csv/products'
require 'hammer_cli_csv/subscriptions'
require 'hammer_cli_csv/systems'
require 'hammer_cli_csv/system_groups'
require 'hammer_cli_csv/products'
require 'hammer_cli_csv/activation_keys'
end
lib/hammer_cli_csv/activation_keys.rb
@existing[line[ORGANIZATION]] = {}
@k_activationkey_api.index({
'per_page' => 999999,
'organization_id' => line[ORGANIZATION]
'organization_id' => katello_organization(:name => line[ORGANIZATION])
})[0]['results'].each do |activationkey|
@existing[line[ORGANIZATION]][activationkey['name']] = activationkey['id'] if activationkey
end
......
})[0]
@existing[line[ORGANIZATION]][activationkey['name']] = activationkey['id']
else
print "Updating activationkey '#{name}'..." if option_verbose?
print "Updating activation key '#{name}'..." if option_verbose?
activationkey = @k_activationkey_api.update({
'id' => @existing[line[ORGANIZATION]][name],
'name' => name,
lib/hammer_cli_csv/base.rb
@f_permission_api ||= ForemanApi::Resources::Permission.new(@init_options)
@f_partitiontable_api ||= ForemanApi::Resources::Ptable.new(@init_options)
@f_puppetfacts_api ||= ForemanApi::Resources::FactValue.new(@init_options)
@f_report_api ||= ForemanApi::Resources::Report.new(@init_options)
@f_role_api ||= ForemanApi::Resources::Role.new(@init_options)
@f_user_api ||= ForemanApi::Resources::User.new(@init_options)
......
HammerCLI::EX_OK
end
def get_lines(filename)
file = File.open(filename ,'r')
contents = file.readlines
file.close
contents
end
def namify(name_format, number=0)
if name_format.index('%')
name = name_format % number
......
return nil if options[:name].nil? || options[:name].empty?
options[:id] = @organizations[options[:name]]
if !options[:id]
organization = @f_organization_api.index({'search' => "name=\"#{options[:name]}\""})[0]['results']
organization = @f_organization_api.index({'search' => "title=\"#{options[:name]}\""})[0]['results']
raise RuntimeError, "Organization '#{options[:name]}' not found" if !organization || organization.empty?
options[:id] = organization[0]['id']
@organizations[options[:name]] = options[:id]
......
result
end
def katello_organization(options={})
@organizations ||= {}
if options[:name]
return nil if options[:name].nil? || options[:name].empty?
options[:id] = @organizations[options[:name]]
if !options[:id]
organization = @k_organization_api.index({'search' => "title=\"#{options[:name]}\""})[0]['results']
raise RuntimeError, "Organization '#{options[:name]}' not found" if !organization || organization.empty?
options[:id] = organization[0]['label']
@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 = @k_organization_api.show({'id' => options[:id]})[0]
raise "Organization 'id=#{options[:id]}' not found" if !organization || organization.empty?
options[:name] = organization['name']
@organizations[options[:name]] = options[:id]
end
result = options[:name]
end
result
end
def foreman_location(options={})
@locations ||= {}
......
result
end
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 = @f_role_api.index({'search' => "name=\"#{options[:name]}\""})[0]['results']
raise RuntimeError, "Role '#{options[:name]}' not found" 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 = @f_role_api.show({'id' => options[:id]})[0]
raise "Role 'id=#{options[:id]}' not found" if !role || role.empty?
options[:name] = role['name']
@roles[options[:name]] = options[:id]
end
result = options[:name]
end
result
end
def foreman_permission(options={})
@permissions ||= {}
......
return nil if options[:name].nil? || options[:name].empty?
options[:id] = @environments[organization][options[:name]]
if !options[:id]
@k_environment_api.index({'organization_id' => organization})[0]['results'].each do |environment|
@k_environment_api.index({'organization_id' => katello_organization(:name => organization)})[0]['results'].each do |environment|
@environments[organization][environment['name']] = environment['id']
end
options[:id] = @environments[organization][options[:name]]
......
return nil if options[:name].nil? || options[:name].empty?
options[:id] = @contentviews[organization][options[:name]]
if !options[:id]
@k_contentview_api.index({'organization_id' => organization})[0]['results'].each do |contentview|
@k_contentview_api.index({'organization_id' => katello_organization(:name => organization)})[0]['results'].each do |contentview|
@contentviews[organization][contentview['name']] = contentview['id']
end
options[:id] = @contentviews[organization][options[:name]]
......
options[:id] = @subscriptions[organization][options[:name]]
if !options[:id]
results = @k_subscription_api.index({
'organization_id' => organization,
'organization_id' => katello_organization(:name => organization),
'search' => "name:\"#{options[:name]}\""
})[0]
raise "No subscriptions match '#{options[:name]}'" if results['subtotal'] == 0
......
options[:id] = @systemgroups[organization][options[:name]]
if !options[:id]
@k_systemgroup_api.index({
'organization_id' => organization,
'organization_id' => katello_organization(:name => organization),
'search' => "name:\"#{options[:name]}\""
})[0]['results'].each do |systemgroup|
@systemgroups[organization][systemgroup['name']] = systemgroup['id'] if systemgroup
......
name
end
# "Red Hat 6.4" => "Red Hat", "6", "4"
# "Red Hat 6" => "Red Hat", "6", ""
def split_os_name(name)
(name, major, minor) = name.split(' ').collect {|s| s.split('.')}.flatten
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
end
lib/hammer_cli_csv/domains.rb
})[0]['domain']['id']
end
CSV.parse_line(line[ORGANIZATIONS]).each do |organization_label|
CSV.parse_line(line[ORGANIZATIONS]).each do |organization|
@k_organization_api.update({
'id' => organization_label,
'id' => foreman_organization(:name => organization),
'domain_ids' => [domain_id]
})
end
lib/hammer_cli_csv/hosts.rb
@f_host_api.create({
'host' => {
'name' => name,
'root_pass' => 'changeme',
'mac' => namify(line[MACADDRESS], number),
'organization_id' => foreman_organization(:name => line[ORGANIZATION]),
'environment_id' => foreman_environment(:name => line[ENVIRONMENT]),
lib/hammer_cli_csv/lifecycle_environments.rb
label = environment['label']
prior = environment['prior']
description = environment['description']
csv << [name, count, label, organization['label'], prior, description]
csv << [name, count, label, organization['name'], prior, description]
end
end
end
......
@k_organization_api.index({'per_page' => 999999})[0]['results'].each do |organization|
@k_environment_api.index({
'per_page' => 999999,
'organization_id' => organization['label']
'organization_id' => katello_organization(:name => organization['name'])
})[0]['results'].each do |environment|
@existing[organization['label']] ||= {}
@existing[organization['label']][environment['name']] = environment['id'] if environment
@existing[organization['name']] ||= {}
@existing[organization['name']][environment['name']] = environment['id'] if environment
end
end
......
if !@existing[line[ORGANIZATION]].include? name
print "Creating environment '#{name}'..." if option_verbose?
@k_environment_api.create({
'organization_id' => line[ORGANIZATION],
'organization_id' => katello_organization(:name => line[ORGANIZATION]),
'name' => name,
'label' => label,
'prior' => prior,
'prior' => katello_environment(line[ORGANIZATION], :name => prior),
'description' => line[DESCRIPTION]
})
else
print "Updating environment '#{name}'..." if option_verbose?
@k_environment_api.update({
'id' => label,
'id' => katello_environment(line[ORGANIZATION], :name => label),
'name' => name,
'new_name' => name,
'organization_id' => line[ORGANIZATION],
'organization_id' => katello_organization(:name => line[ORGANIZATION]),
'prior' => prior,
'description' => line[DESCRIPTION]
})
lib/hammer_cli_csv/locations.rb
# Copyright (c) 2013-2014 Red Hat
#
# MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
#
# -= Locations CSV =-
#
# Columns
# Name
# - Name of the location.
# - May contain '%d' which will be replaced with current iteration number of Count
# - eg. "location%d" -> "location1"
# Count
# - Number of times to iterate on this line of the CSV file
#
require 'hammer_cli'
require 'katello_api'
require 'json'
require 'csv'
module HammerCLICsv
class LocationsCommand < BaseCommand
def export
CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
csv << [NAME, COUNT]
@f_location_api.index({:per_page => 999999})[0]['results'].each do |location|
csv << [location['name'], 1]
end
end
end
def import
@existing = {}
@f_location_api.index({:per_page => 999999})[0]['results'].each do |location|
@existing[location['name']] = location['id'] if location
end
thread_import do |line|
create_locations_from_csv(line)
end
end
def create_locations_from_csv(line)
line[COUNT].to_i.times do |number|
name = namify(line[NAME], number)
if !@existing.include? name
print "Creating location '#{name}'... " if option_verbose?
@f_location_api.create({
'name' => name
})
else
print "Updating location '#{name}'... " if option_verbose?
#@f_location_api.update({
# 'id' => label
# })
end
print "done\n" if option_verbose?
end
end
end
HammerCLI::MainCommand.subcommand("csv:locations", "ping the katello server", HammerCLICsv::LocationsCommand)
end
lib/hammer_cli_csv/operating_systems.rb
}
})
else
print "Updating operatingsystem '#{name}'..." if option_verbose?
print "Updating operating system '#{name}'..." if option_verbose?
@f_operatingsystem_api.update({
'id' => @existing[name],
'operatingsystem' => {
lib/hammer_cli_csv/partition_tables.rb
class PartitionTablesCommand < BaseCommand
OSFAMILY = 'OS Family'
OPERATINGSYSTEMS = 'Operating Systems'
LAYOUT = 'Layout'
def export
CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
csv << [NAME, COUNT, OSFAMILY, LAYOUT]
csv << [NAME, COUNT, OSFAMILY, OPERATINGSYSTEMS, LAYOUT]
@f_partitiontable_api.index({:per_page => 999999})[0]['results'].each do |ptable|
ptable = @f_partitiontable_api.show({'id' => ptable['id']})[0]
name = ptable['name']
count = 1
osfamily = ptable['os_family']
layout = ptable['layout']
raise "TODO: operating systems"
csv << [name, count, osfamily, layout]
end
end
......
def create_ptables_from_csv(line)
line[COUNT].to_i.times do |number|
name = namify(line[NAME], number)
operatingsystem_ids = CSV.parse_line(line[OPERATINGSYSTEMS]).collect do |operatingsystem_name|
foreman_operatingsystem(:name => operatingsystem_name)
end if line[OPERATINGSYSTEMS]
if !@existing.include? name
print "Creating ptable '#{name}'... " if option_verbose?
@f_partitiontable_api.create({
'ptable' => {
'name' => name,
'os_family' => line[OSFAMILY],
'layout' => line[LAYOUT]
}
})
'ptable' => {
'name' => name,
'os_family' => line[OSFAMILY],
'operatingsystem_ids' => operatingsystem_ids,
'layout' => line[LAYOUT]
}
})
else
print "Updating ptable '#{name}'..." if option_verbose?
@f_partitiontable_api.update({
'id' => @existing[name],
'ptable' => {
'name' => name,
'os_family' => line[OSFAMILY],
'layout' => line[LAYOUT]
'id' => @existing[name],
'ptable' => {
'name' => name,
'os_family' => line[OSFAMILY],
'operatingsystem_ids' => operatingsystem_ids,
'layout' => line[LAYOUT]
}
})
end
lib/hammer_cli_csv/products.rb
class ProductsCommand < BaseCommand
ORGANIZATION = 'Organization'
PROVIDER = 'Provider'
REPOSITORY = 'Repository'
REPOSITORY_TYPE = 'Repository Type'
REPOSITORY_URL = 'Repository Url'
......
def import
@existing_products = {}
@existing_providers = {}
@existing_repositories = {}
thread_import do |line|
......
end
def create_products_from_csv(line)
if !@existing_providers[line[ORGANIZATION]]
# TODO: get the red hat provider explicitly and put into list since it's not returned by index
@existing_providers[line[ORGANIZATION]] = {}
@k_provider_api.index({'organization_id' => line[ORGANIZATION], 'page_size' => 999999, 'paged' => true})[0]['results'].each do |provider|
@existing_providers[line[ORGANIZATION]][provider['name']] = provider['id'] if provider
end
if !@existing_products[line[ORGANIZATION]]
@existing_products[line[ORGANIZATION]] = {}
@k_product_api.index({'organization_id' => line[ORGANIZATION], 'page_size' => 999999, 'paged' => true})[0]['results'].each do |product|
@k_product_api.index({
'organization_id' => katello_organization(:name => line[ORGANIZATION]),
'page_size' => 999999,
'paged' => true
})[0]['results'].each do |product|
@existing_products[line[ORGANIZATION]][product['name']] = product['id'] if product
if product
@k_repository_api.index({
'organization_id' => line[ORGANIZATION],
'organization_id' => katello_organization(:name => line[ORGANIZATION]),
'product_id' => product['id'],
'enabled' => true,
'library' => true,
......
end
end
# Only creating providers, not updating
if !@existing_providers[line[ORGANIZATION]][line[PROVIDER]]
print "Creating provider '#{line[PROVIDER]}'..." if option_verbose?
id = @k_provider_api.create({
'name' => line[PROVIDER],
'organization_id' => line[ORGANIZATION]
})[0]['id']
@existing_providers[line[ORGANIZATION]][line[PROVIDER]] = id
print "done\n" if option_verbose?
end
provider_id = @existing_providers[line[ORGANIZATION]][line[PROVIDER]]
# Only creating products, not updating
line[COUNT].to_i.times do |number|
name = namify(line[NAME], number)
......
if !product_id
print "Creating product '#{name}'..." if option_verbose?
product_id = @k_product_api.create({
'name' => name,
'provider_id' => provider_id
'organization_id' => katello_organization(:name => line[ORGANIZATION]),
'name' => name
})[0]['id']
@existing_products[line[ORGANIZATION]][name] = product_id
print "done\n" if option_verbose?
......
if !@existing_repositories[line[ORGANIZATION] + name][labelize(repository_name)]
print "Creating repository '#{repository_name}' in product '#{name}'..." if option_verbose?
@k_repository_api.create({
'organization_id' => katello_organization(:name => line[ORGANIZATION]),
'name' => repository_name,
'label' => labelize(repository_name),
'product_id' => product_id,
......
end
end
HammerCLI::MainCommand.subcommand("csv:products", "import/export products and repositories", HammerCLICsv::ProductsCommand)
HammerCLI::MainCommand.subcommand("csv:products", "import/export products and repositories",
HammerCLICsv::ProductsCommand)
end
lib/hammer_cli_csv/puppet_environments.rb
module HammerCLICsv
class PuppetEnvironmentsCommand < BaseCommand
ORGANIZATIONS = 'Organizations'
def export
CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
csv << [NAME, COUNT]
csv << [NAME, COUNT, ORGANIZATIONS]
@f_environment_api.index({:per_page => 999999})[0]['results'].each do |environment|
name = environment['name']
count = 1
raise "TODO: organizations"
csv << [name, count]
end
end
......
name = namify(line[NAME], number)
if !@existing.include? name
print "Creating environment '#{name}'..." if option_verbose?
@f_environment_api.create({
'environment' => {
'name' => name
}
})
id = @f_environment_api.create({
'environment' => {
'name' => name
}
})[0]['environment']['id']
else
print "Updating environment '#{name}'..." if option_verbose?
@f_environment_api.update({
'id' => @existing[name],
'environment' => {
'name' => name
}
})
id = @f_environment_api.update({
'id' => @existing[name],
'environment' => {
'name' => name
}
})[0]['environment']['id']
end
CSV.parse_line(line[ORGANIZATIONS]).each do |organization|
@k_organization_api.update({
'id' => foreman_organization(:name => organization),
'environment_ids' => [id]
})
end
print "done\n" if option_verbose?
end
rescue RuntimeError => e
lib/hammer_cli_csv/reports.rb
# Copyright (c) 2013-2014 Red Hat
#
# MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
module HammerCLICsv
class ReportsCommand < BaseCommand
TIME = 'Time'
APPLIED = 'Applied'
RESTARTED = 'Restarted'
FAILED = 'Failed'
FAILED_RESTARTS = 'Failed Restarts'
SKIPPED = 'Skipped'
PENDING = 'Pending'
METRICS = 'Metrics'
def export
CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => false}) do |csv|
csv << [NAME, COUNT]
@f_report_api.index({'per_page' => 999999})[0]['results'].each do |report|
csv << [report['host_name'], 1, report['metrics'].to_json]
end
end
HammerCLI::EX_OK
end
def import
@existing_reports = {}
@f_report_api.index({'per_page' => 999999})[0]['results'].each do |report|
@existing_reports[report['name']] = report['id']
end
thread_import do |line|
create_reports_from_csv(line)
end
end
def create_reports_from_csv(line)
line[COUNT].to_i.times do |number|
name = namify(line[NAME], number)
if !@existing_reports[name]
print "Creating report '#{name}'..." if option_verbose?
report = @f_report_api.create({
'host' => name,
'reported_at' => line[TIME],
'status' => {
'applied' => line[APPLIED],
'restarted' => line[RESTARTED],
'failed' => line[FAILED],
'failed_restarts' => line[FAILED_RESTARTS],
'skipped' => line[SKIPPED],
'pending' => line[PENDING]
},
'metrics' => JSON.parse(line[METRICS]),
'logs' => []
})[0]
=begin
'metrics' => {
'time' => {
'config_retrieval' => line[CONFIG_RETRIEVAL]
},
'resources' => {
'applied' => 0,
'failed' => 0,
'failed_restarts' => 0,
'out_of_sync' => 0,
'restarted' => 0,
'scheduled' => 1368,
'skipped' => 1,
'total' => 1450
},
'changes' => {
'total' => 0
}
},
=end
@existing_reports[name] = report['id']
else
print "Updating report '#{name}'..." if option_verbose?
@f_report_api.update({
'id' => @existing_reports[name]
})
end
puts "done" if option_verbose?
end
end
end
HammerCLI::MainCommand.subcommand("csv:reports", "import / export reports", HammerCLICsv::ReportsCommand)
end
lib/hammer_cli_csv/roles.rb
def create_roles_from_csv(line)
line[COUNT].to_i.times do |number|
name = namify(line[NAME], number)
filter = namify(line[FILTER], number)
filter = namify(line[FILTER], number) if line[FILTER]
if !@existing_roles[name]
print "Creating role '#{name}'..." if option_verbose?
role = @f_role_api.create({
'name' => name
})[0]
@existing_roles[name] = role['id']
else
print "Updating role '#{name}'..." if option_verbose?
@f_role_api.update({
......
permissions = CSV.parse_line(line[PERMISSIONS], {:skip_blanks => true}).collect do |permission|
foreman_permission(:name => permission)
end
puts permissions
end if line[PERMISSIONS]
organizations = CSV.parse_line(line[ORGANIZATIONS], {:skip_blanks => true}).collect do |organization|
foreman_organization(:name => organization)
end
end if line[ORGANIZATIONS]
locations = CSV.parse_line(line[LOCATIONS], {:skip_blanks => true}).collect do |location|
foreman_location(:name => location)
end
end if line[LOCATIONS]
filter_id = foreman_filter(name, :name => filter)
if !filter_id
@f_filter_api.create({
'role_id' => @existing_roles[name],
'search' => filter,
'organization_ids' => organizations,
'location_ids' => locations
})
else
@f_filter_api.update({
'id' => filter_id,
'search' => filter,
'organization_ids' => organizations,
'location_ids' => locations,
'permission_ids' => permissions
})
if filter
filter_id = foreman_filter(name, :name => filter)
if !filter_id
@f_filter_api.create({
'role_id' => @existing_roles[name],
'search' => filter,
'organization_ids' => organizations || [],
'location_ids' => locations || [],
'permission_ids' => permissions || []
})
else
@f_filter_api.update({
'id' => filter_id,
'search' => filter,
'organization_ids' => organizations || [],
'location_ids' => locations || [],
'permission_ids' => permissions || []
})
end
end
puts "done" if option_verbose?
lib/hammer_cli_csv/system_groups.rb
'description' => line[DESCRIPTION]
})
else
print "Updating systemgroup '#{name}'..." if option_verbose?
print "Updating system group '#{name}'..." if option_verbose?
@k_systemgroup_api.update({
'organization_id' => line[ORGANIZATION],
'id' => @existing[line[ORGANIZATION]][name],
lib/hammer_cli_csv/users.rb
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
#
# -= Users CSV =-
#
# Columns
# Login
# - Login name of the user.
# - May contain '%d' which will be replaced with current iteration number of Count
# - eg. "user%d" -> "user1"
# Count
# - Number of times to iterate on this line of the CSV file
# First Name
# Last Name
# Email
#
require 'hammer_cli'
require 'katello_api'
......
FIRSTNAME = 'First Name'
LASTNAME = 'Last Name'
EMAIL = 'Email'
ORGANIZATIONS = 'Organizations'
LOCATIONS = 'Locations'
ROLES = 'Roles'
def export
CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
csv << [NAME, COUNT, FIRSTNAME, LASTNAME, EMAIL]
csv << [NAME, COUNT, FIRSTNAME, LASTNAME, EMAIL, ORGANIZATIONS, LOCATIONS, ROLES]
@f_user_api.index({:per_page => 999999})[0]['results'].each do |user|
csv << [user['login'], 1, user['firstname'], user['lastname'], user['mail']]
organizations = CSV.generate do |column|
column << user['organizations'].collect do |organization|
organization['name']
end
end.delete!("\n") if user['organizations']
locations = CSV.generate do |column|
column << user['locations'].collect do |location|
location['name']
end
end.delete!("\n") if user['locations']
roles = CSV.generate do |column|
column << user['roles'].collect do |role|
role['name']
end
end.delete!("\n") if user['roles']
if user['login'] != 'admin' && !user['login'].start_with?('hidden-')
csv << [user['login'], 1, user['firstname'], user['lastname'], user['mail'], organizations, locations, roles]
end
end
end
end
......
def create_users_from_csv(line)
line[COUNT].to_i.times do |number|
name = namify(line[NAME], number)
roles = CSV.parse_line(line[ROLES], {:skip_blanks => true}).collect do |role|
foreman_role(:name => namify(role, number))
end if line[ROLES]
organizations = CSV.parse_line(line[ORGANIZATIONS], {:skip_blanks => true}).collect do |organization|
foreman_organization(:name => organization)
end if line[ORGANIZATIONS]
locations = CSV.parse_line(line[LOCATIONS], {:skip_blanks => true}).collect do |location|
foreman_location(:name => location)
end if line[LOCATIONS]
if !@existing.include? name
print "Creating user '#{name}'... " if option_verbose?
@f_user_api.create({
......
'firstname' => line[FIRSTNAME],
'lastname' => line[LASTNAME],
'mail' => line[EMAIL],
'password' => 'admin',
'password' => 'changeme',
'auth_source_id' => 1, # INTERNAL auth
'organization_ids' => organizations,
'location_ids' => locations,
'role_ids' => roles
}
})
else
......
'firstname' => line[FIRSTNAME],
'lastname' => line[LASTNAME],
'mail' => line[EMAIL],
'password' => 'admin'
'password' => 'changeme',
'organization_ids' => organizations,
'location_ids' => locations,
'role_ids' => roles
}
})
end
test/activation_keys_test.rb
extend CommandTestHelper
before :each do
@activationkey_api = ApipieResourceMock.new(KatelloApi::Resources::ActivationKey)
@organization_api = ApipieResourceMock.new(KatelloApi::Resources::Organization)
@environment_api = ApipieResourceMock.new(KatelloApi::Resources::Environment)
@contentview_api = ApipieResourceMock.new(KatelloApi::Resources::ContentView)
end
context "ActivationKeysCommand" do
let(:cmd) { HammerCLICsv::ActivationKeysCommand.new("", ctx) }
context "parameters" do
it "blah" do
cmd.stubs(:get_lines).returns([
"Name,Count,Org Label,Description,Limit,Environment,Content View,System Groups",
"'akey',1,'org','some description','Unlimited','Library','Default_Content_view',"
])
cmd.run(['--csv-file=some_file', '--threads=1']).must_equal HammerCLI::EX_OK
end
end
end
end
test/csv_test_helper.rb
require "mocha/setup"
require 'hammer_cli_csv'
require 'hammer_cli_katello'
require 'hammer_cli_foreman'
def ctx
{ :adapter => :silent }
def ctx
{
:adapter => :csv,
:interactive => false
}
end
def hammer
HammerCLI::MainCommand.new("", ctx)
end
def capture
old_stdout = $stdout
old_stderr = $stderr
$stdout = stdout = StringIO.new
$stderr = stderr = StringIO.new
yield
[stdout.string, stderr.string]
ensure
$stdout = old_stdout
$stderr = old_stderr
end
def set_user(username, password='changeme')
HammerCLI::Settings.load({
:_params => {
:username => username,
:password => password,
:interactive => false
}})
end
test/data/activationkeys.csv
Name,Count,Organization,Description,Limit,Environment,Content View,System Groups,Subscriptions
damon.dials@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee","""RH00004|Red Hat Enterprise Linux Server, Standard (Physical or Virtual Nodes)"""
# jenee.jahns@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# gilbert.guerriero@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# quiana.quesnel@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# bernard.bigler@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# marietta.menzel@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# ruby.rieser@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# leonor.limberg@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# herminia.hochmuth@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# luana.larson@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# gilda.gutirrez@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# karlene.kirch@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# chelsea.calaway@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# tajuana.thies@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# dominica.dubberly@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# gregg.gault@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# boyd.buckle@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# georgeanna.griffiths@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# julio.jerabek@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# chaya.cordova@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# reinaldo.reardon@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# nancie.nassar@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# ayako.alday@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# skye.strobl@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# merle.miceli@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# sung.skipper@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# danilo.dilbeck@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# marylee.millsap@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# rolf.rueb@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# miriam.messenger@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# danae.drayer@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# stan.stokely@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# martin.magallon@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# orville.oneill@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# kourtney.kyle@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# tessa.treiber@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# kamilah.kurland@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# zelma.zemke@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# jefferson.jock@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# shirely.stowe@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# niesha.nold@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# bruce.butterworth@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# denna.debartolo@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# janay.johnson@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# kristen.kellems@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# tiny.tacy@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# dolores.delay@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# shira.sitzes@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# aron.askew@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# nydia.neil@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# theodore.talbert@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# shani.spinks@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# diedra.darrow@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# judith.joachim@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# melda.metheny@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# nannie.nobles@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# annamae.audie@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# kalyn.kimzey@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# hsiu.henningsen@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# delcie.diez@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# edris.ekhoff@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# monique.maly@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# robbi.rosendahl@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# lakeesha.loiacono@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# coralee.culbert@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# danette.dewitt@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# cinthia.cadieux@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# myron.mclawhorn@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# madeleine.magers@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# evita.epting@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# karrie.kindel@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# moses.modisette@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# winifred.wessels@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# ashton.aumann@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# guillermina.gloster@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# jeremy.jong@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# marilou.mcintosh@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# rubin.ravenscroft@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# peggie.phillips@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# evelina.elders@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# edda.elam@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# fausto.fortino@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# elena.eisert@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# mariella.molock@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# starla.scheiber@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# parker.paetzold@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# vallie.vizcaino@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# renea.rubenstein@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# lien.lipscomb@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# debby.dupuy@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# carolann.corbo@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# lee.litchfield@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# lashon.locker@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# caroll.colquitt@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# lillian.louviere@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# rafaela.rasco@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# mandie.mcquinn@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# bambi.bivona@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# jacques.joaquin@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# wes.wallner@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# retta.rosso@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# melia.meche@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# nga.nordquist@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# georgine.grimmett@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# elden.easley@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# van.villanveva@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# shemika.spikes@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# bettina.budniewski@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# yun.yarberry@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# mac.malmberg@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# rory.rollinson@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Employee"
# silva.sotelo@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Contractor"
# le.leggett@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Contractor"
# eartha.edie@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Contractor"
# tenisha.tinajero@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Contractor"
# hien.hamby@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Contractor"
# milford.mize@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Contractor"
# elnora.efaw@megacorp.org,1,megacorp,"Individual account",1,Library,Default Organization View,"Contractor"
damon.dials@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee","""RH00004|Red Hat Enterprise Linux Server, Standard (Physical or Virtual Nodes)"""
jenee.jahns@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
gilbert.guerriero@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
quiana.quesnel@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
bernard.bigler@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
marietta.menzel@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
ruby.rieser@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
leonor.limberg@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
herminia.hochmuth@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
luana.larson@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
gilda.gutirrez@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
karlene.kirch@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
chelsea.calaway@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
tajuana.thies@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
dominica.dubberly@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
gregg.gault@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
boyd.buckle@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
georgeanna.griffiths@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
julio.jerabek@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
chaya.cordova@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
reinaldo.reardon@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
nancie.nassar@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
ayako.alday@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
skye.strobl@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
merle.miceli@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
sung.skipper@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
danilo.dilbeck@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
marylee.millsap@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
rolf.rueb@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
miriam.messenger@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
danae.drayer@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
stan.stokely@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
martin.magallon@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
orville.oneill@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
kourtney.kyle@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
tessa.treiber@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
kamilah.kurland@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
zelma.zemke@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
jefferson.jock@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
shirely.stowe@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
niesha.nold@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
bruce.butterworth@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
denna.debartolo@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
janay.johnson@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
kristen.kellems@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
tiny.tacy@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
dolores.delay@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
shira.sitzes@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
aron.askew@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
nydia.neil@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
theodore.talbert@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
shani.spinks@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
diedra.darrow@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
judith.joachim@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
melda.metheny@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
nannie.nobles@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
annamae.audie@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
kalyn.kimzey@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
hsiu.henningsen@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
delcie.diez@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
edris.ekhoff@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
monique.maly@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
robbi.rosendahl@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
lakeesha.loiacono@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
coralee.culbert@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
danette.dewitt@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
cinthia.cadieux@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
myron.mclawhorn@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
madeleine.magers@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
evita.epting@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
karrie.kindel@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
moses.modisette@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
winifred.wessels@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
ashton.aumann@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
guillermina.gloster@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
jeremy.jong@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
marilou.mcintosh@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
rubin.ravenscroft@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
peggie.phillips@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
evelina.elders@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
edda.elam@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
fausto.fortino@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
elena.eisert@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
mariella.molock@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
starla.scheiber@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
parker.paetzold@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
vallie.vizcaino@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
renea.rubenstein@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
lien.lipscomb@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
debby.dupuy@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
carolann.corbo@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
lee.litchfield@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
lashon.locker@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
caroll.colquitt@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
lillian.louviere@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
rafaela.rasco@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
mandie.mcquinn@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
bambi.bivona@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
jacques.joaquin@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
wes.wallner@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
retta.rosso@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
melia.meche@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
nga.nordquist@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
georgine.grimmett@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
elden.easley@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
van.villanveva@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
shemika.spikes@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
bettina.budniewski@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
yun.yarberry@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
mac.malmberg@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
rory.rollinson@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Employee"
silva.sotelo@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Contractor"
le.leggett@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Contractor"
eartha.edie@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Contractor"
tenisha.tinajero@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Contractor"
hien.hamby@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Contractor"
milford.mize@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Contractor"
elnora.efaw@megacorp.com,1,Mega Corporation,"Individual account",1,Library,Default Organization View,"Contractor"
test/data/domains.csv
"Name","Count","Full Name","Organizations"
"megacorp.com","1","","megacorp"
"demo.megacorp.com","1","","megacorp"
"qa.lab.tlv.megacorp.com","1","QA","megacorp"
"sat.lab.tlv.megacorp.com","1","SATLAB","megacorp"
"test.megacorp.com","1","","megacorp"
"tlv.megacorp.com","1","","megacorp"
"virt.bos.megacorp.com","1","","megacorp"
"megacorp.com","1","","Mega Corporation"
"demo.megacorp.com","1","","Mega Corporation"
"qa.lab.tlv.megacorp.com","1","QA","Mega Corporation"
"sat.lab.tlv.megacorp.com","1","SATLAB","Mega Corporation"
"test.megacorp.com","1","","Mega Corporation"
"tlv.megacorp.com","1","","Mega Corporation"
"virt.bos.megacorp.com","1","","Mega Corporation"
test/data/hosts.csv
Name,Count,Organization,Environment,Operating System,Architecture,MAC Address,Domain,Partition Table
dhcp129-0%02d.megacorp.com,255,Mega Corporation,Development,RHEL 6.4,x86_64,"01:FE:B5:E0:70:%02x",megacorp.com,RedHat default
dhcp129-%03d.megacorp.com,255,Mega Corporation,Development,RHEL 6.4,x86_64,"01:FE:B5:E0:70:%02x",megacorp.com,RedHat default
# dhcp129-1%02d.megacorp.com,255,Mega Corporation,Development,RHEL 6.4,x86_64,"01:FE:B5:E1:70:%02x",megacorp.com,RedHat default
# dhcp129-2%02d.megacorp.com,255,Mega Corporation,Development,RHEL 6.4,x86_64,"01:FE:B5:E2:70:%02x",megacorp.com,RedHat default
# dhcp129-3%02d.megacorp.com,255,Mega Corporation,Development,RHEL 6.4,x86_64,"01:FE:B5:E3:70:%02x",megacorp.com,RedHat default
test/data/lifecycleenvironments.csv
"Name","Count","Label","Organization","Prior Environment","Description"
"Development","1","Development","megacorp","Library",""
"Testing","1","Testing","megacorp","Development",""
"Stage","1","Stage","megacorp","Testing",""
"Production","1","Production","megacorp","Stage",""
"OpenStack","1","OpenStack","megacorp","Library",""
"Development","1","Development","Mega Corporation","Library",""
"Testing","1","Testing","Mega Corporation","Development",""
"Stage","1","Stage","Mega Corporation","Testing",""
"Production","1","Production","Mega Corporation","Stage",""
"OpenStack","1","OpenStack","Mega Corporation","Library",""
test/data/locations.csv
Name,Count
Asia Pacific (Tokyo) Region,1
Asia Pacific (Singapore) Region,1
Asia Pacific (Sydney) Region,1
EU (Ireland) Region,1
South America (Sao Paulo) Region,1
US East (Northern Virginia) Region,1
US West (Northern California) Region,1
US West (Oregon) Region,1
test/data/organizations.csv
"Name","Count","Org Label","Description"
"Mega Corporation","1","megacorp","The number one mega company in the world!"
"Mega Subsidiary","1","subcorp","The number one subsidiary of the number one mega company in the world!"
test/data/partitiontables.csv
"Name","Count","OS Family","Layout"
"ext4 default","1","Redhat","zerombr
"Name","Count","OS Family","Operating Systems","Layout"
"ext4 default","1","Redhat",,"zerombr
clearpart --all --initlabel
part /boot --fstype=ext4 --size=500
part / --fstype=ext4 --size=1024 --grow
part swap --recommended"
"F16 / Grub2","1","Redhat","part biosboot --fstype=biosboot --size=1
"F16 / Grub2","1","Redhat",,"part biosboot --fstype=biosboot --size=1
zerombr
clearpart --all --initlabel
part /boot --fstype=ext4 --size=500
part / --fstype=ext4 --size=1024 --grow
part swap --recommended"
"Katello Fedora Default","1","Redhat","zerombr
"Katello Fedora Default","1","Redhat",,"zerombr
clearpart --all --initlabel
part /boot --fstype ext3 --size=100 --asprimary
part / --fstype ext3 --size=1024 --grow
part swap --recommended"
"OpenStack Storage","1","Debian","d-i partman-auto/disk string /dev/vda
"OpenStack Storage","1","Debian",,"d-i partman-auto/disk string /dev/vda
d-i partman-auto/method string lvm
d-i partman-lvm/device_remove_lvm boolean true
......
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
"
"RedHat default","1","Redhat","zerombr yes
"RedHat default","1","Redhat","RHEL 6.4,RHEL 6.3","zerombr yes
clearpart --all --initlabel
part /boot --fstype ext3 --size=100 --asprimary
part / --fstype ext3 --size=1024 --grow
part swap --recommended"
"Solaris medium disk mirrored","1","Solaris","filesys mirror:d10 c1t0d0s0 c1t1d0s0 16000 /
"Solaris medium disk mirrored","1","Solaris",,"filesys mirror:d10 c1t0d0s0 c1t1d0s0 16000 /
filesys mirror:d20 c1t0d0s1 c1t1d0s1 8000 swap
filesys mirror:d40 c1t0d0s4 c1t1d0s4 free /var/tmp
metadb c1t0d0s7 size 8192 count 3
metadb c1t1d0s7 size 8192 count 3
"
"Solaris small disk c1t0","1","Solaris","filesys c1t0d0s0 7000 /
"Solaris small disk c1t0","1","Solaris",,"filesys c1t0d0s0 7000 /
filesys c1t0d0s1 1000 swap
filesys c1t0d0s3 15 unnamed
filesys c1t0d0s7 free /tmp2
"
"Suse Entire SCSI Disk","1","Suse"," <partitioning config:type=""list"">
"Suse Entire SCSI Disk","1","Suse",," <partitioning config:type=""list"">
<drive>
<device>/dev/sda</device>
<use>all</use>
</drive>
</partitioning>"
"Suse Entire Virtual Disk","1","Suse"," <partitioning config:type=""list"">
"Suse Entire Virtual Disk","1","Suse",," <partitioning config:type=""list"">
<drive>
<device>/dev/vda</device>
<use>all</use>
</drive>
</partitioning>"
"Ubuntu custom LVM","1","Debian","d-i partman-auto/disk string /dev/vda
"Ubuntu custom LVM","1","Debian",,"d-i partman-auto/disk string /dev/vda
d-i partman-auto/method string lvm
d-i partman-lvm/device_remove_lvm boolean true
......
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
"
"Ubuntu default","1","Debian","d-i partman-auto/disk string /dev/vda
"Ubuntu default","1","Debian",,"d-i partman-auto/disk string /dev/vda
d-i partman-auto/method string regular
d-i partman-auto/init_automatically_partition select Guided - use entire disk
d-i partman/confirm_write_new_label boolean true
......
Finish partitioning and write changes to disk
d-i partman/confirm boolean true
"
"vg-redhat","1","Redhat","zerombr yes
"vg-redhat","1","Redhat",,"zerombr yes
clearpart --all --initlabel
part /boot --fstype ext4 --size 200 --asprimary
part pv.01 --grow --size=1024
volgroup <%= shortname %> pv.01
logvol / --fstype=ext4 --name=root --vgname=<%= shortname %> --grow --size=1024
logvol swap --name=swap --vgname=<%= shortname %> --recommended"
"Windows Entire SCSI Disk","1","Windows"," <partitioning config:type=""list"">
"Windows Entire SCSI Disk","1","Windows",," <partitioning config:type=""list"">
<drive>
<device>/stuff</device>
<use>all</use>
</drive>
</partitioning>"
"Windows Entire Virtual Disk","1","Windows"," <partitioning config:type=""list"">
"Windows Entire Virtual Disk","1","Windows",," <partitioning config:type=""list"">
<drive>
<device>/data</device>
<use>all</use>
test/data/products.csv
Name,Count,Organization,Provider,Repository,Repository Type,Repository Url
Point of Sale,1,megacorp,MegaCorp,katello-1.4-client,yum,http://fedorapeople.org/groups/katello/releases/yum/1.4-client/RHEL/6Server/x86_64/
katello-1.4,1,megacorp,MegaCorp,katello-1.4,yum,http://fedorapeople.org/groups/katello/releases/yum/1.4/RHEL/6Server/x86_64/
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff