hammer_cli_csv 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/lib/hammer_cli_csv.rb +48 -0
- data/lib/hammer_cli_csv/activation_keys.rb +170 -0
- data/lib/hammer_cli_csv/architectures.rb +95 -0
- data/lib/hammer_cli_csv/base.rb +706 -0
- data/lib/hammer_cli_csv/compute_profiles.rb +94 -0
- data/lib/hammer_cli_csv/compute_resources.rb +92 -0
- data/lib/hammer_cli_csv/content_hosts.rb +357 -0
- data/lib/hammer_cli_csv/content_view_filters.rb +158 -0
- data/lib/hammer_cli_csv/content_views.rb +86 -0
- data/lib/hammer_cli_csv/csv.rb +23 -0
- data/lib/hammer_cli_csv/domains.rb +103 -0
- data/lib/hammer_cli_csv/exception_handler.rb +53 -0
- data/lib/hammer_cli_csv/host_collections.rb +108 -0
- data/lib/hammer_cli_csv/hosts.rb +118 -0
- data/lib/hammer_cli_csv/import.rb +82 -0
- data/lib/hammer_cli_csv/installation_medias.rb +88 -0
- data/lib/hammer_cli_csv/lifecycle_environments.rb +116 -0
- data/lib/hammer_cli_csv/locations.rb +84 -0
- data/lib/hammer_cli_csv/operating_systems.rb +95 -0
- data/lib/hammer_cli_csv/organizations.rb +107 -0
- data/lib/hammer_cli_csv/partition_tables.rb +98 -0
- data/lib/hammer_cli_csv/products.rb +179 -0
- data/lib/hammer_cli_csv/provisioning_templates.rb +96 -0
- data/lib/hammer_cli_csv/puppet_environments.rb +105 -0
- data/lib/hammer_cli_csv/puppet_facts.rb +99 -0
- data/lib/hammer_cli_csv/puppet_reports.rb +244 -0
- data/lib/hammer_cli_csv/reports.rb +91 -0
- data/lib/hammer_cli_csv/roles.rb +115 -0
- data/lib/hammer_cli_csv/smart_proxies.rb +88 -0
- data/lib/hammer_cli_csv/subnets.rb +121 -0
- data/lib/hammer_cli_csv/subscriptions.rb +135 -0
- data/lib/hammer_cli_csv/users.rb +133 -0
- data/lib/hammer_cli_csv/version.rb +16 -0
- data/test/activation_keys_test.rb +17 -0
- data/test/apipie_resource_mock.rb +77 -0
- data/test/config.template.yml +17 -0
- data/test/csv_test_helper.rb +65 -0
- data/test/data/activation-keys.csv +119 -0
- data/test/data/architectures.csv +5 -0
- data/test/data/content-hosts.csv +4 -0
- data/test/data/content-view-filters.csv +2 -0
- data/test/data/content-views.csv +6 -0
- data/test/data/domains.csv +8 -0
- data/test/data/host-collections.csv +16 -0
- data/test/data/hosts.csv +12 -0
- data/test/data/installation-medias.csv +7 -0
- data/test/data/lifecycle-environments.csv +6 -0
- data/test/data/locations.csv +10 -0
- data/test/data/operating-systems.csv +16 -0
- data/test/data/organizations.csv +5 -0
- data/test/data/partition-tables.csv +187 -0
- data/test/data/products.csv +19 -0
- data/test/data/puppet-environments.csv +6 -0
- data/test/data/puppet-facts.csv +9 -0
- data/test/data/reports.csv +4 -0
- data/test/data/roles.csv +159 -0
- data/test/data/smart-proxies.csv +2 -0
- data/test/data/subscriptions.csv +19 -0
- data/test/data/users.csv +119 -0
- data/test/helpers/command.rb +67 -0
- data/test/helpers/resource_disabled.rb +69 -0
- data/test/hosts_test.rb +47 -0
- data/test/organizations_test.rb +74 -0
- data/test/roles_test.rb +39 -0
- data/test/setup_test.rb +164 -0
- data/test/systems_test.rb +71 -0
- data/test/users_test.rb +35 -0
- metadata +174 -0
@@ -0,0 +1,95 @@
|
|
1
|
+
# Copyright 2013-2014 Red Hat, Inc.
|
2
|
+
#
|
3
|
+
# This software is licensed to you under the GNU General Public
|
4
|
+
# License as published by the Free Software Foundation; either version
|
5
|
+
# 2 of the License (GPLv2) or (at your option) any later version.
|
6
|
+
# There is NO WARRANTY for this software, express or implied,
|
7
|
+
# including the implied warranties of MERCHANTABILITY,
|
8
|
+
# NON-INFRINGEMENT, or FITNESS FOR A PARTICULAR PURPOSE. You should
|
9
|
+
# have received a copy of GPLv2 along with this software; if not, see
|
10
|
+
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
|
11
|
+
|
12
|
+
#
|
13
|
+
# -= Operating Systems CSV =-
|
14
|
+
#
|
15
|
+
# Columns
|
16
|
+
# Name
|
17
|
+
# - Operating system name
|
18
|
+
# - May contain '%d' which will be replaced with current iteration number of Count
|
19
|
+
# - eg. "os%d" -> "os1"
|
20
|
+
# Count
|
21
|
+
# - Number of times to iterate on this line of the CSV file
|
22
|
+
# Major
|
23
|
+
# Minor
|
24
|
+
# Family
|
25
|
+
#
|
26
|
+
|
27
|
+
require 'hammer_cli'
|
28
|
+
require 'json'
|
29
|
+
require 'csv'
|
30
|
+
|
31
|
+
module HammerCLICsv
|
32
|
+
class CsvCommand
|
33
|
+
class OperatingSystemsCommand < BaseCommand
|
34
|
+
command_name 'operating-systems'
|
35
|
+
desc 'import or export operating systems'
|
36
|
+
|
37
|
+
FAMILY = 'Family'
|
38
|
+
|
39
|
+
def export
|
40
|
+
CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
|
41
|
+
csv << [NAME, COUNT, FAMILY]
|
42
|
+
@api.resource(:operatingsystems).call(:index, {:per_page => 999999})['results'].each do |operatingsystem|
|
43
|
+
name = build_os_name(operatingsystem['name'], operatingsystem['major'], operatingsystem['minor'])
|
44
|
+
count = 1
|
45
|
+
family = operatingsystem['family']
|
46
|
+
csv << [name, count, family]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def import
|
52
|
+
@existing = {}
|
53
|
+
@api.resource(:operatingsystems).call(:index, {:per_page => 999999})['results'].each do |operatingsystem|
|
54
|
+
@existing[build_os_name(operatingsystem['name'], operatingsystem['major'], operatingsystem['minor'])] = operatingsystem['id'] if operatingsystem
|
55
|
+
end
|
56
|
+
|
57
|
+
thread_import do |line|
|
58
|
+
create_operatingsystems_from_csv(line)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def create_operatingsystems_from_csv(line)
|
63
|
+
line[COUNT].to_i.times do |number|
|
64
|
+
name = namify(line[NAME], number)
|
65
|
+
(osname, major, minor) = split_os_name(name)
|
66
|
+
if !@existing.include? name
|
67
|
+
print "Creating operating system '#{name}'..." if option_verbose?
|
68
|
+
@api.resource(:operatingsystems).call(:create, {
|
69
|
+
'operatingsystem' => {
|
70
|
+
'name' => osname,
|
71
|
+
'major' => major,
|
72
|
+
'minor' => minor,
|
73
|
+
'family' => line[FAMILY]
|
74
|
+
}
|
75
|
+
})
|
76
|
+
else
|
77
|
+
print "Updating operating system '#{name}'..." if option_verbose?
|
78
|
+
@api.resource(:operatingsystems).call(:update, {
|
79
|
+
'id' => @existing[name],
|
80
|
+
'operatingsystem' => {
|
81
|
+
'name' => osname,
|
82
|
+
'major' => major,
|
83
|
+
'minor' => minor,
|
84
|
+
'family' => line[FAMILY]
|
85
|
+
}
|
86
|
+
})
|
87
|
+
end
|
88
|
+
print "done\n" if option_verbose?
|
89
|
+
end
|
90
|
+
rescue RuntimeError => e
|
91
|
+
raise "#{e}\n #{line}"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
# Copyright 2013-2014 Red Hat, Inc.
|
2
|
+
#
|
3
|
+
# This software is licensed to you under the GNU General Public
|
4
|
+
# License as published by the Free Software Foundation; either version
|
5
|
+
# 2 of the License (GPLv2) or (at your option) any later version.
|
6
|
+
# There is NO WARRANTY for this software, express or implied,
|
7
|
+
# including the implied warranties of MERCHANTABILITY,
|
8
|
+
# NON-INFRINGEMENT, or FITNESS FOR A PARTICULAR PURPOSE. You should
|
9
|
+
# have received a copy of GPLv2 along with this software; if not, see
|
10
|
+
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
|
11
|
+
|
12
|
+
#
|
13
|
+
# -= Organizations CSV =-
|
14
|
+
#
|
15
|
+
# Columns
|
16
|
+
# Name
|
17
|
+
# - Name of the organization.
|
18
|
+
# - May contain '%d' which will be replaced with current iteration number of Count
|
19
|
+
# - eg. "organization%d" -> "organization1"
|
20
|
+
# Count
|
21
|
+
# - Number of times to iterate on this line of the CSV file
|
22
|
+
# Org Label
|
23
|
+
# - Label of the organization.
|
24
|
+
# - May contain '%d' which will be replaced with current iteration number of Count
|
25
|
+
# - eg. "organization%d" -> "organization1"
|
26
|
+
# Description
|
27
|
+
#
|
28
|
+
|
29
|
+
require 'hammer_cli'
|
30
|
+
#require 'net/http'
|
31
|
+
require 'json'
|
32
|
+
require 'csv'
|
33
|
+
|
34
|
+
module HammerCLICsv
|
35
|
+
class CsvCommand
|
36
|
+
class OrganizationsCommand < BaseCommand
|
37
|
+
command_name 'organizations'
|
38
|
+
desc 'import or export organizations'
|
39
|
+
|
40
|
+
option %w(--sam), :flag, 'export from SAM-1.3 or SAM-1.4'
|
41
|
+
|
42
|
+
ORGANIZATION = 'Organization'
|
43
|
+
DESCRIPTION = 'Description'
|
44
|
+
|
45
|
+
def export
|
46
|
+
CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
|
47
|
+
csv << [NAME, COUNT, ORGANIZATION, DESCRIPTION]
|
48
|
+
if option_sam?
|
49
|
+
server = option_server || HammerCLI::Settings.get(:csv, :host)
|
50
|
+
username = option_username || HammerCLI::Settings.get(:csv, :username)
|
51
|
+
password = option_password || HammerCLI::Settings.get(:csv, :password)
|
52
|
+
url = "#{server}/api/organizations"
|
53
|
+
uri = URI(url)
|
54
|
+
Net::HTTP.start(uri.host, uri.port,
|
55
|
+
:use_ssl => uri.scheme == 'https',
|
56
|
+
:verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http|
|
57
|
+
request = Net::HTTP::Get.new uri.request_uri
|
58
|
+
request.basic_auth(username, password)
|
59
|
+
response = http.request(request)
|
60
|
+
|
61
|
+
JSON.parse(response.body).each do |organization|
|
62
|
+
csv << [organization['name'], 1, organization['label'], organization['description']]
|
63
|
+
end
|
64
|
+
end
|
65
|
+
else
|
66
|
+
@api.resource(:organizations).call(:index, {:per_page => 999999})['results'].each do |organization|
|
67
|
+
csv << [organization['name'], 1, organization['label'], organization['description']]
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def import
|
74
|
+
@existing = {}
|
75
|
+
@api.resource(:organizations).call(:index, {:per_page => 999999})['results'].each do |organization|
|
76
|
+
@existing[organization['name']] = organization['id'] if organization
|
77
|
+
end
|
78
|
+
|
79
|
+
thread_import do |line|
|
80
|
+
create_organizations_from_csv(line)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def create_organizations_from_csv(line)
|
85
|
+
line[COUNT].to_i.times do |number|
|
86
|
+
name = namify(line[NAME], number)
|
87
|
+
label = namify(line[ORGANIZATION], number)
|
88
|
+
if !@existing.include? name
|
89
|
+
print "Creating organization '#{name}'... " if option_verbose?
|
90
|
+
@api.resource(:organizations).call(:create, {
|
91
|
+
'name' => name,
|
92
|
+
'label' => label,
|
93
|
+
'description' => line[DESCRIPTION]
|
94
|
+
})
|
95
|
+
else
|
96
|
+
print "Updating organization '#{name}'... " if option_verbose?
|
97
|
+
@api.resource(:organizations).call(:update, {
|
98
|
+
'id' => label,
|
99
|
+
'description' => line[DESCRIPTION]
|
100
|
+
})
|
101
|
+
end
|
102
|
+
print "done\n" if option_verbose?
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# Copyright 2013-2014 Red Hat, Inc.
|
2
|
+
#
|
3
|
+
# This software is licensed to you under the GNU General Public
|
4
|
+
# License as published by the Free Software Foundation; either version
|
5
|
+
# 2 of the License (GPLv2) or (at your option) any later version.
|
6
|
+
# There is NO WARRANTY for this software, express or implied,
|
7
|
+
# including the implied warranties of MERCHANTABILITY,
|
8
|
+
# NON-INFRINGEMENT, or FITNESS FOR A PARTICULAR PURPOSE. You should
|
9
|
+
# have received a copy of GPLv2 along with this software; if not, see
|
10
|
+
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
|
11
|
+
|
12
|
+
#
|
13
|
+
# -= Partition Tables CSV =-
|
14
|
+
#
|
15
|
+
# Columns
|
16
|
+
# Name
|
17
|
+
# - Partition table name
|
18
|
+
# - May contain '%d' which will be replaced with current iteration number of Count
|
19
|
+
# - eg. "os%d" -> "os1"
|
20
|
+
# Count
|
21
|
+
# - Number of times to iterate on this line of the CSV file
|
22
|
+
#
|
23
|
+
|
24
|
+
require 'hammer_cli'
|
25
|
+
require 'json'
|
26
|
+
require 'csv'
|
27
|
+
|
28
|
+
module HammerCLICsv
|
29
|
+
class CsvCommand
|
30
|
+
class PartitionTablesCommand < BaseCommand
|
31
|
+
command_name 'partition-tables'
|
32
|
+
desc 'import or export partition tables'
|
33
|
+
|
34
|
+
OSFAMILY = 'OS Family'
|
35
|
+
OPERATINGSYSTEMS = 'Operating Systems'
|
36
|
+
LAYOUT = 'Layout'
|
37
|
+
|
38
|
+
def export
|
39
|
+
CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
|
40
|
+
csv << [NAME, COUNT, OSFAMILY, OPERATINGSYSTEMS, LAYOUT]
|
41
|
+
@api.resource(:ptables).call(:index, {:per_page => 999999})['results'].each do |ptable|
|
42
|
+
ptable = @api.resource(:ptables).call(:show, {'id' => ptable['id']})
|
43
|
+
name = ptable['name']
|
44
|
+
count = 1
|
45
|
+
osfamily = ptable['os_family']
|
46
|
+
layout = ptable['layout']
|
47
|
+
csv << [name, count, osfamily, layout]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def import
|
53
|
+
@existing = {}
|
54
|
+
@api.resource(:ptables).call(:index, {:per_page => 999999})['results'].each do |ptable|
|
55
|
+
@existing[ptable['name']] = ptable['id'] if ptable
|
56
|
+
end
|
57
|
+
|
58
|
+
thread_import do |line|
|
59
|
+
create_ptables_from_csv(line)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def create_ptables_from_csv(line)
|
64
|
+
line[COUNT].to_i.times do |number|
|
65
|
+
name = namify(line[NAME], number)
|
66
|
+
operatingsystem_ids = CSV.parse_line(line[OPERATINGSYSTEMS]).collect do |operatingsystem_name|
|
67
|
+
foreman_operatingsystem(:name => operatingsystem_name)
|
68
|
+
end if line[OPERATINGSYSTEMS]
|
69
|
+
if !@existing.include? name
|
70
|
+
print "Creating ptable '#{name}'... " if option_verbose?
|
71
|
+
@api.resource(:ptables).call(:create, {
|
72
|
+
'ptable' => {
|
73
|
+
'name' => name,
|
74
|
+
'os_family' => line[OSFAMILY],
|
75
|
+
'operatingsystem_ids' => operatingsystem_ids,
|
76
|
+
'layout' => line[LAYOUT]
|
77
|
+
}
|
78
|
+
})
|
79
|
+
else
|
80
|
+
print "Updating ptable '#{name}'..." if option_verbose?
|
81
|
+
@api.resource(:ptables).call(:update, {
|
82
|
+
'id' => @existing[name],
|
83
|
+
'ptable' => {
|
84
|
+
'name' => name,
|
85
|
+
'os_family' => line[OSFAMILY],
|
86
|
+
'operatingsystem_ids' => operatingsystem_ids,
|
87
|
+
'layout' => line[LAYOUT]
|
88
|
+
}
|
89
|
+
})
|
90
|
+
end
|
91
|
+
print "done\n" if option_verbose?
|
92
|
+
end
|
93
|
+
rescue RuntimeError => e
|
94
|
+
raise "#{e}\n #{line}"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,179 @@
|
|
1
|
+
# Copyright 2013-2014 Red Hat, Inc.
|
2
|
+
#
|
3
|
+
# This software is licensed to you under the GNU General Public
|
4
|
+
# License as published by the Free Software Foundation; either version
|
5
|
+
# 2 of the License (GPLv2) or (at your option) any later version.
|
6
|
+
# There is NO WARRANTY for this software, express or implied,
|
7
|
+
# including the implied warranties of MERCHANTABILITY,
|
8
|
+
# NON-INFRINGEMENT, or FITNESS FOR A PARTICULAR PURPOSE. You should
|
9
|
+
# have received a copy of GPLv2 along with this software; if not, see
|
10
|
+
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
|
11
|
+
|
12
|
+
module HammerCLICsv
|
13
|
+
class CsvCommand
|
14
|
+
class ProductsCommand < BaseCommand
|
15
|
+
command_name 'products'
|
16
|
+
desc 'import or export products'
|
17
|
+
|
18
|
+
LABEL = 'Label'
|
19
|
+
ORGANIZATION = 'Organization'
|
20
|
+
REPOSITORY = 'Repository'
|
21
|
+
REPOSITORY_TYPE = 'Repository Type'
|
22
|
+
REPOSITORY_URL = 'Repository Url'
|
23
|
+
DESCRIPTION = 'Description'
|
24
|
+
|
25
|
+
def export
|
26
|
+
CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => false}) do |csv|
|
27
|
+
csv << [NAME, COUNT, LABEL, ORGANIZATION, REPOSITORY, REPOSITORY_TYPE, REPOSITORY_URL]
|
28
|
+
@api.resource(:organizations)
|
29
|
+
.call(:index, {
|
30
|
+
:per_page => 999999
|
31
|
+
})['results'].each do |organization|
|
32
|
+
@api.resource(:products)
|
33
|
+
.call(:index, {
|
34
|
+
'per_page' => 999999,
|
35
|
+
'enabled' => true,
|
36
|
+
'organization_id' => foreman_organization(:name => organization['name'])
|
37
|
+
})['results'].each do |product|
|
38
|
+
product['repositories'].each do |repository|
|
39
|
+
repository_type = repository['product_type'] == 'custom' ? 'Custom' : 'Red Hat'
|
40
|
+
repository_type += " #{repository['content_type'].capitalize}"
|
41
|
+
csv << [product['name'], 1, product['label'], organization['name'],
|
42
|
+
repository['name'], repository_type, repository['url']]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def import
|
50
|
+
@existing_products = {}
|
51
|
+
@existing_repositories = {}
|
52
|
+
|
53
|
+
thread_import do |line|
|
54
|
+
create_products_from_csv(line)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def create_products_from_csv(line)
|
59
|
+
if !@existing_products[line[ORGANIZATION]]
|
60
|
+
@existing_products[line[ORGANIZATION]] = {}
|
61
|
+
@api.resource(:products)
|
62
|
+
.call(:index, {
|
63
|
+
'per_page' => 999999,
|
64
|
+
'organization_id' => foreman_organization(:name => line[ORGANIZATION]),
|
65
|
+
'enabled' => true
|
66
|
+
})['results'].each do |product|
|
67
|
+
@existing_products[line[ORGANIZATION]][product['name']] = product['id']
|
68
|
+
|
69
|
+
@api.resource(:repositories)
|
70
|
+
.call(:index, {
|
71
|
+
'page_size' => 999999, 'paged' => true,
|
72
|
+
'organization_id' => foreman_organization(:name => line[ORGANIZATION]),
|
73
|
+
'product_id' => product['id'],
|
74
|
+
'enabled' => true,
|
75
|
+
'library' => true
|
76
|
+
})['results'].each do |repository|
|
77
|
+
@existing_repositories[line[ORGANIZATION] + product['name']] ||= {}
|
78
|
+
@existing_repositories[line[ORGANIZATION] + product['name']][repository['label']] = repository['id']
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
line[COUNT].to_i.times do |number|
|
84
|
+
name = namify(line[NAME], number)
|
85
|
+
product_id = @existing_products[line[ORGANIZATION]][name]
|
86
|
+
if product_id.nil?
|
87
|
+
print "Creating product '#{name}'..." if option_verbose?
|
88
|
+
if line[REPOSITORY_TYPE] =~ /Red Hat/
|
89
|
+
raise "Red Hat product '#{name}' does not exist in '#{line[ORGANIZATION]}'"
|
90
|
+
end
|
91
|
+
|
92
|
+
product_id = @api.resource(:products)
|
93
|
+
.call(:create, {
|
94
|
+
'organization_id' => foreman_organization(:name => line[ORGANIZATION]),
|
95
|
+
'name' => name
|
96
|
+
})['id']
|
97
|
+
@existing_products[line[ORGANIZATION]][name] = product_id
|
98
|
+
else
|
99
|
+
# Nothing to update for products
|
100
|
+
print "Updating product '#{name}'..." if option_verbose?
|
101
|
+
end
|
102
|
+
@existing_repositories[line[ORGANIZATION] + name] = {}
|
103
|
+
print "done\n" if option_verbose?
|
104
|
+
|
105
|
+
repository_name = namify(line[REPOSITORY], number)
|
106
|
+
|
107
|
+
if !@existing_repositories[line[ORGANIZATION] + name][repository_name]
|
108
|
+
@api.resource(:repositories)
|
109
|
+
.call(:index, {
|
110
|
+
'organization_id' => foreman_organization(:name => line[ORGANIZATION]),
|
111
|
+
'library' => true,
|
112
|
+
'all' => false,
|
113
|
+
'product_id' => product_id
|
114
|
+
})['results'].each do |repository|
|
115
|
+
@existing_repositories[line[ORGANIZATION] + name][repository['name']] = repository
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
repository = @existing_repositories[line[ORGANIZATION] + name][repository_name]
|
120
|
+
if !repository
|
121
|
+
raise "Red Hat product '#{name}' does not have repository '#{repository_name}'" if line[REPOSITORY_TYPE] =~ /Red Hat/
|
122
|
+
|
123
|
+
print "Creating repository '#{repository_name}' in product '#{name}'..." if option_verbose?
|
124
|
+
repository = @api.resource(:repositories)
|
125
|
+
.call(:create, {
|
126
|
+
'organization_id' => foreman_organization(:name => line[ORGANIZATION]),
|
127
|
+
'name' => repository_name,
|
128
|
+
'label' => labelize(repository_name),
|
129
|
+
'product_id' => product_id,
|
130
|
+
'url' => line[REPOSITORY_URL],
|
131
|
+
'content_type' => content_type(line[REPOSITORY_TYPE])
|
132
|
+
})
|
133
|
+
@existing_repositories[line[ORGANIZATION] + name][line[LABEL]] = repository
|
134
|
+
puts 'done' if option_verbose?
|
135
|
+
end
|
136
|
+
|
137
|
+
print "Sync'ing repository '#{repository_name}' in product '#{name}'..." if option_verbose?
|
138
|
+
if repository['sync_state'] == 'finished'
|
139
|
+
puts 'already done' if option_verbose?
|
140
|
+
else
|
141
|
+
if line[REPOSITORY_TYPE] =~ /Red Hat/
|
142
|
+
print 'skipping Red Hat repo sync... so slow!... '
|
143
|
+
else
|
144
|
+
sync_repository(line, repository)
|
145
|
+
end
|
146
|
+
print "done\n" if option_verbose?
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
rescue RuntimeError => e
|
151
|
+
raise "#{e}\n #{line}"
|
152
|
+
end
|
153
|
+
|
154
|
+
private
|
155
|
+
|
156
|
+
def content_type(repository_type)
|
157
|
+
case repository_type
|
158
|
+
when /yum/i
|
159
|
+
'yum'
|
160
|
+
when /puppet/i
|
161
|
+
'puppet'
|
162
|
+
else
|
163
|
+
raise "Unrecognized repository type '#{repository_type}'"
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def sync_repository(line, repository)
|
168
|
+
# TODO: --server needs to come from config/settings
|
169
|
+
args = %W{ repository synchronize
|
170
|
+
--id #{ repository['id'] }
|
171
|
+
--organization-id #{ foreman_organization(:name => line[ORGANIZATION]) } }
|
172
|
+
hammer.run(args)
|
173
|
+
|
174
|
+
rescue RuntimeError => e
|
175
|
+
raise "#{e}\n #{line}"
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|