hammer_cli_csv 0.0.2 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/hammer_cli_csv.rb +3 -0
- data/lib/hammer_cli_csv/activation_keys.rb +54 -28
- data/lib/hammer_cli_csv/base.rb +50 -7
- data/lib/hammer_cli_csv/export.rb +72 -0
- data/lib/hammer_cli_csv/headpin_api.rb +59 -0
- data/lib/hammer_cli_csv/import.rb +3 -9
- data/lib/hammer_cli_csv/locations.rb +1 -1
- data/lib/hammer_cli_csv/organizations.rb +6 -20
- data/lib/hammer_cli_csv/provisioning_templates.rb +57 -9
- data/lib/hammer_cli_csv/roles.rb +31 -26
- data/lib/hammer_cli_csv/version.rb +1 -1
- data/test/config.template.yml +12 -3
- data/test/csv_test_helper.rb +21 -12
- data/test/data/organizations.csv +1 -1
- data/test/data/roles.csv +42 -41
- data/test/data/subscriptions.csv +1 -1
- data/test/roles_test.rb +31 -15
- metadata +10 -8
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NmZkZjQ0Zjg5NmI0MDZkNzExZTI5ZGM1MWE2NzA2MjAzMGZiMWRlYw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MWYyZWY2MWQxNTMwNWM0ODBkN2I3Y2Q0ZmQzNmJmZTRiZTgwZTEwMw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZGQxN2E3Mjg4MzRiN2Y2Y2VhNGY3NDhjZDI3YTkwMjU3MGUxMzQ2ODBkNmE4
|
10
|
+
YjFjNTUwMWI4NmIyNmFiMzE0NjdjYjVhZmM3NTE1MWZlNDMxNzYzNjZlYmJh
|
11
|
+
MzI0YWJlMDE5MTViOTEyOTIxOGI3NDAzMDQ1ZjI5OGJmODA4M2U=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NzIzZGE4OTg1NmE1ZDc0NjFiYjgzZjExZmQ1ODdkZmM2YmJlNGRhMmExODQ4
|
14
|
+
MWNhYWQ3MGI3NzIzMzQzZmVkYWM1ODAxYWZiODI3ZDAyNThlNWY4MDNhYmJl
|
15
|
+
OGZhNjQzMzU2ZDZjY2I2MTRiNWQxOWNiYmRjOTU3ZWNmZjU2Yzk=
|
data/lib/hammer_cli_csv.rb
CHANGED
@@ -25,6 +25,7 @@ module HammerCLICsv
|
|
25
25
|
require 'hammer_cli_csv/content_views'
|
26
26
|
require 'hammer_cli_csv/content_view_filters'
|
27
27
|
require 'hammer_cli_csv/domains'
|
28
|
+
require 'hammer_cli_csv/export'
|
28
29
|
require 'hammer_cli_csv/host_collections'
|
29
30
|
require 'hammer_cli_csv/hosts'
|
30
31
|
require 'hammer_cli_csv/import'
|
@@ -45,4 +46,6 @@ module HammerCLICsv
|
|
45
46
|
require 'hammer_cli_csv/subnets'
|
46
47
|
require 'hammer_cli_csv/subscriptions'
|
47
48
|
require 'hammer_cli_csv/users'
|
49
|
+
|
50
|
+
require 'hammer_cli_csv/headpin_api'
|
48
51
|
end
|
@@ -27,34 +27,60 @@ module HammerCLICsv
|
|
27
27
|
CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => false}) do |csv|
|
28
28
|
csv << [NAME, COUNT, ORGANIZATION, DESCRIPTION, LIMIT, ENVIRONMENT, CONTENTVIEW,
|
29
29
|
SYSTEMGROUPS, SUBSCRIPTIONS]
|
30
|
-
@
|
31
|
-
.
|
32
|
-
|
33
|
-
|
34
|
-
|
30
|
+
if @server_status['release'] == 'Headpin'
|
31
|
+
@headpin.get(:organizations).each do |organization|
|
32
|
+
@headpin.get("organizations/#{organization['label']}/activation_keys").each do |activationkey|
|
33
|
+
puts "Writing activation key '#{activationkey['name']}'" if option_verbose?
|
34
|
+
name = namify(activationkey['name'])
|
35
|
+
count = 1
|
36
|
+
description = activationkey['description']
|
37
|
+
limit = activationkey['usage_limit'].to_i < 0 ? 'Unlimited' : activationkey['usage_limit']
|
38
|
+
environment = @headpin.environment(activationkey['environment_id'])['name']
|
39
|
+
contentview = @headpin.content_view(activationkey['content_view_id'])['name']
|
40
|
+
# TODO: https://bugzilla.redhat.com/show_bug.cgi?id=1160888
|
41
|
+
# Act keys in SAM-1 do not include system groups
|
42
|
+
hostcollections = nil #???? export_column(activationkey, 'systemGroups', 'name')
|
43
|
+
subscriptions = CSV.generate do |column|
|
44
|
+
column << activationkey['pools'].collect do |subscription|
|
45
|
+
amount = subscription['calculatedAttributes']['compliance_type'] == 'Stackable' ? 1 : 'Automatic'
|
46
|
+
"#{amount}|#{subscription['productId']}|#{subscription['productName']}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
subscriptions.delete!("\n")
|
50
|
+
csv << [name, count, organization['label'], description, limit, environment, contentview,
|
51
|
+
hostcollections, subscriptions]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
else
|
55
|
+
@api.resource(:organizations)\
|
35
56
|
.call(:index, {
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
57
|
+
:per_page => 999999
|
58
|
+
})['results'].each do |organization|
|
59
|
+
@api.resource(:activation_keys)\
|
60
|
+
.call(:index, {
|
61
|
+
'per_page' => 999999,
|
62
|
+
'organization_id' => organization['id']
|
63
|
+
})['results'].each do |activationkey|
|
64
|
+
puts "Writing activation key '#{activationkey['name']}'" if option_verbose?
|
65
|
+
name = namify(activationkey['name'])
|
66
|
+
count = 1
|
67
|
+
description = activationkey['description']
|
68
|
+
limit = activationkey['usage_limit'].to_i < 0 ? 'Unlimited' : sytemgroup['usage_limit']
|
69
|
+
environment = activationkey['environment']['label']
|
70
|
+
contentview = activationkey['content_view']['name']
|
71
|
+
hostcollections = export_column(activationkey, 'systemGroups', 'name')
|
72
|
+
subscriptions = CSV.generate do |column|
|
73
|
+
column << @api.resource(:subscriptions).call(:index, {
|
74
|
+
'activation_key_id' => activationkey['id']
|
75
|
+
})['results'].collect do |subscription|
|
76
|
+
amount = subscription['amount'] == 0 ? 'Automatic' : subscription['amount']
|
77
|
+
"#{amount}|#{subscription['product_name']}"
|
78
|
+
end
|
53
79
|
end
|
80
|
+
subscriptions.delete!("\n")
|
81
|
+
csv << [name, count, organization['label'], description, limit, environment, contentview,
|
82
|
+
hostcollections, subscriptions]
|
54
83
|
end
|
55
|
-
subscriptions.delete!("\n")
|
56
|
-
csv << [name, count, organization['label'], description, limit, environment, contentview,
|
57
|
-
hostcollections, subscriptions]
|
58
84
|
end
|
59
85
|
end
|
60
86
|
end
|
@@ -109,10 +135,10 @@ module HammerCLICsv
|
|
109
135
|
'description' => line[DESCRIPTION],
|
110
136
|
'usage_limit' => usage_limit(line[LIMIT])
|
111
137
|
})
|
112
|
-
end
|
113
138
|
|
114
|
-
|
115
|
-
|
139
|
+
update_subscriptions(activationkey, line)
|
140
|
+
update_groups(activationkey, line)
|
141
|
+
end
|
116
142
|
|
117
143
|
puts 'done' if option_verbose?
|
118
144
|
end
|
data/lib/hammer_cli_csv/base.rb
CHANGED
@@ -15,6 +15,7 @@ require 'json'
|
|
15
15
|
require 'csv'
|
16
16
|
require 'hammer_cli_csv/csv'
|
17
17
|
|
18
|
+
# rubocop:disable ClassLength
|
18
19
|
module HammerCLICsv
|
19
20
|
class BaseCommand < HammerCLI::Apipie::Command
|
20
21
|
option %w(-v --verbose), :flag, 'be verbose'
|
@@ -40,17 +41,58 @@ module HammerCLICsv
|
|
40
41
|
end
|
41
42
|
end
|
42
43
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
44
|
+
server = option_server ||
|
45
|
+
HammerCLI::Settings.get(:csv, :host) ||
|
46
|
+
HammerCLI::Settings.get(:katello, :host) ||
|
47
|
+
HammerCLI::Settings.get(:foreman, :host)
|
48
|
+
username = option_username ||
|
49
|
+
HammerCLI::Settings.get(:csv, :username) ||
|
50
|
+
HammerCLI::Settings.get(:katello, :username) ||
|
51
|
+
HammerCLI::Settings.get(:foreman, :username)
|
52
|
+
password = option_password ||
|
53
|
+
HammerCLI::Settings.get(:csv, :password) ||
|
54
|
+
HammerCLI::Settings.get(:katello, :password) ||
|
55
|
+
HammerCLI::Settings.get(:foreman, :password)
|
56
|
+
|
57
|
+
@server_status = check_server_status
|
58
|
+
|
59
|
+
unless @server_status['release'] == 'Headpin'
|
60
|
+
@api = ApipieBindings::API.new({
|
61
|
+
:uri => server,
|
62
|
+
:username => username,
|
63
|
+
:password => password,
|
64
|
+
:api_version => 2
|
65
|
+
})
|
66
|
+
else
|
67
|
+
@headpin = HeadpinApi.new({
|
68
|
+
:server => server,
|
69
|
+
:username => username,
|
70
|
+
:password => password
|
71
|
+
})
|
72
|
+
end
|
49
73
|
|
50
74
|
option_csv_export? ? export : import
|
51
75
|
HammerCLI::EX_OK
|
52
76
|
end
|
53
77
|
|
78
|
+
def check_server_status
|
79
|
+
server = option_server || HammerCLI::Settings.get(:csv, :host)
|
80
|
+
username = option_username || HammerCLI::Settings.get(:csv, :username)
|
81
|
+
password = option_password || HammerCLI::Settings.get(:csv, :password)
|
82
|
+
url = "#{server}/api/status"
|
83
|
+
uri = URI(url)
|
84
|
+
server_status = Net::HTTP.start(uri.host, uri.port,
|
85
|
+
:use_ssl => uri.scheme == 'https',
|
86
|
+
:verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http|
|
87
|
+
request = Net::HTTP::Get.new uri.request_uri
|
88
|
+
request.basic_auth(username, password)
|
89
|
+
response = http.request(request)
|
90
|
+
JSON.parse(response.body)
|
91
|
+
end
|
92
|
+
|
93
|
+
server_status
|
94
|
+
end
|
95
|
+
|
54
96
|
def namify(name_format, number = 0)
|
55
97
|
if name_format.index('%')
|
56
98
|
name = name_format % number
|
@@ -241,7 +283,8 @@ module HammerCLICsv
|
|
241
283
|
'search' => "role=\"#{role}\""
|
242
284
|
})['results']
|
243
285
|
filters.each do |filter|
|
244
|
-
|
286
|
+
resource_type = (filter['resource_type'] || '').split(':')[-1] # To remove "Katello::" when present
|
287
|
+
return filter['id'] if resource_type == resource && filter['search'] == search
|
245
288
|
end
|
246
289
|
|
247
290
|
nil
|
@@ -0,0 +1,72 @@
|
|
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
|
+
module HammerCLICsv
|
14
|
+
class CsvCommand
|
15
|
+
class ExportCommand < HammerCLI::Apipie::Command
|
16
|
+
command_name 'export'
|
17
|
+
desc 'export into directory'
|
18
|
+
|
19
|
+
option %w(-v --verbose), :flag, 'be verbose'
|
20
|
+
option %w(--threads), 'THREAD_COUNT', 'Number of threads to hammer with', :default => 1
|
21
|
+
option %w(--server), 'SERVER', 'Server URL'
|
22
|
+
option %w(-u --username), 'USERNAME', 'Username to access server'
|
23
|
+
option %w(-p --password), 'PASSWORD', 'Password to access server'
|
24
|
+
option '--dir', 'DIRECTORY', 'directory to import from'
|
25
|
+
|
26
|
+
RESOURCES = %w( organizations locations puppet_environments operating_systems
|
27
|
+
domains architectures partition_tables lifecycle_environments host_collections
|
28
|
+
provisioning_templates
|
29
|
+
subscriptions activation_keys hosts content_hosts reports roles users )
|
30
|
+
RESOURCES.each do |resource|
|
31
|
+
dashed = resource.sub('_', '-')
|
32
|
+
option "--#{dashed}", 'FILE', "csv file for #{dashed}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def execute
|
36
|
+
@api = ApipieBindings::API.new({
|
37
|
+
:uri => option_server || HammerCLI::Settings.get(:csv, :host),
|
38
|
+
:username => option_username || HammerCLI::Settings.get(:csv, :username),
|
39
|
+
:password => option_password || HammerCLI::Settings.get(:csv, :password),
|
40
|
+
:api_version => 2
|
41
|
+
})
|
42
|
+
|
43
|
+
# Swing the hammers
|
44
|
+
RESOURCES.each do |resource|
|
45
|
+
hammer_resource(resource)
|
46
|
+
end
|
47
|
+
|
48
|
+
HammerCLI::EX_OK
|
49
|
+
end
|
50
|
+
|
51
|
+
def hammer(context = nil)
|
52
|
+
context ||= {
|
53
|
+
:interactive => false,
|
54
|
+
:username => 'admin', # TODO: this needs to come from config/settings
|
55
|
+
:password => 'changeme' # TODO: this needs to come from config/settings
|
56
|
+
}
|
57
|
+
|
58
|
+
HammerCLI::MainCommand.new('', context)
|
59
|
+
end
|
60
|
+
|
61
|
+
def hammer_resource(resource)
|
62
|
+
return if !self.send("option_#{resource}") && !option_dir
|
63
|
+
options_file = self.send("option_#{resource}") || "#{option_dir}/#{resource.sub('_', '-')}.csv"
|
64
|
+
args = %W( csv #{resource.sub('_', '-')} --csv-export --csv-file #{options_file} )
|
65
|
+
args << '-v' if option_verbose?
|
66
|
+
args += %W( --threads #{option_threads} )
|
67
|
+
args += %W( --server #{option_server} ) if option_server
|
68
|
+
hammer.run(args)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# Copyright 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
|
+
require 'csv'
|
13
|
+
|
14
|
+
module HammerCLICsv
|
15
|
+
class HeadpinApi
|
16
|
+
def initialize(config)
|
17
|
+
@server = config[:server]
|
18
|
+
@username = config[:username]
|
19
|
+
@password = config[:password]
|
20
|
+
end
|
21
|
+
|
22
|
+
def get(name)
|
23
|
+
url = "#{@server}/api/#{name}"
|
24
|
+
uri = URI(url)
|
25
|
+
Net::HTTP.start(uri.host, uri.port,
|
26
|
+
:use_ssl => uri.scheme == 'https',
|
27
|
+
:verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http|
|
28
|
+
request = Net::HTTP::Get.new uri.request_uri
|
29
|
+
request.basic_auth(@username, @password)
|
30
|
+
response = http.request(request)
|
31
|
+
return JSON.parse(response.body)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def environment(id)
|
36
|
+
@environments ||= {}
|
37
|
+
environment = @environments[id]
|
38
|
+
if environment.nil?
|
39
|
+
environment = get("environments/#{id}")
|
40
|
+
raise environment['displayMessage'] if environment['displayMessage']
|
41
|
+
@environments[id] = environment
|
42
|
+
end
|
43
|
+
|
44
|
+
return environment
|
45
|
+
end
|
46
|
+
|
47
|
+
def content_view(id)
|
48
|
+
@content_views ||= {}
|
49
|
+
content_view = @content_views[id]
|
50
|
+
if content_view.nil?
|
51
|
+
content_view = get("content_views/#{id}")
|
52
|
+
raise content_view['displayMessage'] if content_view['displayMessage']
|
53
|
+
@content_views[id] = content_view
|
54
|
+
end
|
55
|
+
|
56
|
+
return content_view
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -9,13 +9,6 @@
|
|
9
9
|
# have received a copy of GPLv2 along with this software; if not, see
|
10
10
|
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
|
11
11
|
|
12
|
-
require 'hammer_cli'
|
13
|
-
require 'hammer_cli_csv'
|
14
|
-
require 'hammer_cli_foreman'
|
15
|
-
require 'hammer_cli_katello'
|
16
|
-
require 'json'
|
17
|
-
require 'csv'
|
18
|
-
require 'uri'
|
19
12
|
|
20
13
|
module HammerCLICsv
|
21
14
|
class CsvCommand
|
@@ -30,9 +23,10 @@ module HammerCLICsv
|
|
30
23
|
option %w(-p --password), 'PASSWORD', 'Password to access server'
|
31
24
|
option '--dir', 'DIRECTORY', 'directory to import from'
|
32
25
|
|
33
|
-
RESOURCES = %w( organizations locations
|
26
|
+
RESOURCES = %w( organizations locations puppet_environments operating_systems
|
34
27
|
domains architectures partition_tables lifecycle_environments host_collections
|
35
|
-
|
28
|
+
provisioning_templates
|
29
|
+
subscriptions activation_keys hosts content_hosts reports roles users )
|
36
30
|
RESOURCES.each do |resource|
|
37
31
|
dashed = resource.sub('_', '-')
|
38
32
|
option "--#{dashed}", 'FILE', "csv file for #{dashed}"
|
@@ -39,7 +39,7 @@ module HammerCLICsv
|
|
39
39
|
CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
|
40
40
|
csv << [NAME, COUNT, PARENT]
|
41
41
|
@api.resource(:locations).call(:index, {:per_page => 999999})['results'].each do |location|
|
42
|
-
csv << [location['name'], 1]
|
42
|
+
csv << [location['name'], 1, '']
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -37,30 +37,16 @@ module HammerCLICsv
|
|
37
37
|
command_name 'organizations'
|
38
38
|
desc 'import or export organizations'
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
ORGANIZATION = 'Organization'
|
40
|
+
LABEL = 'Label'
|
43
41
|
DESCRIPTION = 'Description'
|
44
42
|
|
45
43
|
def export
|
46
44
|
CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
|
47
|
-
csv << [NAME, COUNT,
|
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)
|
45
|
+
csv << [NAME, COUNT, LABEL, DESCRIPTION]
|
60
46
|
|
61
|
-
|
62
|
-
|
63
|
-
|
47
|
+
if @server_status['release'] == 'Headpin'
|
48
|
+
@headpin.get(:organizations).each do |organization|
|
49
|
+
csv << [organization['name'], 1, organization['label'], organization['description']]
|
64
50
|
end
|
65
51
|
else
|
66
52
|
@api.resource(:organizations).call(:index, {:per_page => 999999})['results'].each do |organization|
|
@@ -84,7 +70,7 @@ module HammerCLICsv
|
|
84
70
|
def create_organizations_from_csv(line)
|
85
71
|
line[COUNT].to_i.times do |number|
|
86
72
|
name = namify(line[NAME], number)
|
87
|
-
label = namify(line[
|
73
|
+
label = namify(line[LABEL], number)
|
88
74
|
if !@existing.include? name
|
89
75
|
print "Creating organization '#{name}'... " if option_verbose?
|
90
76
|
@api.resource(:organizations).call(:create, {
|
@@ -18,11 +18,11 @@ module HammerCLICsv
|
|
18
18
|
ORGANIZATIONS = 'Organizations'
|
19
19
|
LOCATIONS = 'Locations'
|
20
20
|
KIND = 'Kind'
|
21
|
-
|
21
|
+
TEMPLATE = 'Template'
|
22
22
|
|
23
23
|
def export
|
24
24
|
CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
|
25
|
-
csv << [NAME, COUNT, ORGANIZATIONS, LOCATIONS, KIND,
|
25
|
+
csv << [NAME, COUNT, ORGANIZATIONS, LOCATIONS, KIND, TEMPLATE]
|
26
26
|
@api.resource(:config_templates)\
|
27
27
|
.call(:index, {
|
28
28
|
:per_page => 999999
|
@@ -66,25 +66,73 @@ module HammerCLICsv
|
|
66
66
|
name = namify(line[NAME], number)
|
67
67
|
if !@existing.include? name
|
68
68
|
print "Creating provisioning template '#{name}'..." if option_verbose?
|
69
|
-
|
69
|
+
template_id = @api.resource(:config_templates)\
|
70
70
|
.call(:create, {
|
71
71
|
'name' => name,
|
72
72
|
'snippet' => line[KIND] == 'snippet',
|
73
73
|
'template_kind_id' => line[KIND] == 'snippet' ? nil : foreman_template_kind(:name => line[KIND]),
|
74
|
-
'
|
75
|
-
'
|
74
|
+
'organization_ids' => organizations,
|
75
|
+
'location_ids' => locations,
|
76
|
+
'template' => line[TEMPLATE]
|
76
77
|
})['id']
|
77
78
|
else
|
78
79
|
print "Updating provisioning template '#{name}'..." if option_verbose?
|
79
|
-
|
80
|
+
template_id = @api.resource(:config_templates)\
|
80
81
|
.call(:update, {
|
81
82
|
'id' => @existing[name],
|
82
83
|
'name' => name,
|
83
|
-
'
|
84
|
-
'
|
84
|
+
'snippet' => line[KIND] == 'snippet',
|
85
|
+
'template_kind_id' => line[KIND] == 'snippet' ? nil : foreman_template_kind(:name => line[KIND]),
|
86
|
+
'organization_ids' => organizations,
|
87
|
+
'location_ids' => locations,
|
88
|
+
'template' => line[TEMPLATE]
|
85
89
|
})['id']
|
86
90
|
end
|
87
|
-
@existing[name] =
|
91
|
+
@existing[name] = template_id
|
92
|
+
|
93
|
+
# Update associated resources
|
94
|
+
template_organizations ||= {}
|
95
|
+
organizations.each do |organization_id|
|
96
|
+
if template_organizations[organization_id].nil?
|
97
|
+
template_organizations[organization_id] = @api.resource(:organizations)\
|
98
|
+
.call(:show, {
|
99
|
+
'id' => organization_id
|
100
|
+
})['config_templates'].collect do |template|
|
101
|
+
template['id']
|
102
|
+
end
|
103
|
+
end
|
104
|
+
if !template_organizations[organization_id].include? template_id
|
105
|
+
template_organizations[organization_id] += [template_id]
|
106
|
+
@api.resource(:organizations)\
|
107
|
+
.call(:update, {
|
108
|
+
'id' => organization_id,
|
109
|
+
'organization' => {
|
110
|
+
'config_template_ids' => template_organizations[organization_id]
|
111
|
+
}
|
112
|
+
})
|
113
|
+
end
|
114
|
+
end
|
115
|
+
template_locations ||= {}
|
116
|
+
locations.each do |location_id|
|
117
|
+
if template_locations[location_id].nil?
|
118
|
+
template_locations[location_id] = @api.resource(:locations)\
|
119
|
+
.call(:show, {
|
120
|
+
'id' => location_id
|
121
|
+
})['config_templates'].collect do |template|
|
122
|
+
template['id']
|
123
|
+
end
|
124
|
+
end
|
125
|
+
if !template_locations[location_id].include? template_id
|
126
|
+
template_locations[location_id] += [template_id]
|
127
|
+
@api.resource(:locations)\
|
128
|
+
.call(:update, {
|
129
|
+
'id' => location_id,
|
130
|
+
'location' => {
|
131
|
+
'config_template_ids' => template_locations[location_id]
|
132
|
+
}
|
133
|
+
})
|
134
|
+
end
|
135
|
+
end
|
88
136
|
|
89
137
|
print "done\n" if option_verbose?
|
90
138
|
end
|
data/lib/hammer_cli_csv/roles.rb
CHANGED
@@ -59,9 +59,20 @@ module HammerCLICsv
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def create_roles_from_csv(line)
|
62
|
+
|
63
|
+
permissions = collect_column(line[PERMISSIONS]) do |permission|
|
64
|
+
foreman_permission(:name => permission)
|
65
|
+
end
|
66
|
+
organizations = collect_column(line[ORGANIZATIONS]) do |organization|
|
67
|
+
foreman_organization(:name => organization)
|
68
|
+
end
|
69
|
+
locations = collect_column(line[LOCATIONS]) do |location|
|
70
|
+
foreman_location(:name => location)
|
71
|
+
end
|
72
|
+
|
62
73
|
line[COUNT].to_i.times do |number|
|
63
74
|
name = namify(line[NAME], number)
|
64
|
-
search = namify(line[SEARCH], number)
|
75
|
+
search = line[SEARCH] ? namify(line[SEARCH], number) : nil
|
65
76
|
|
66
77
|
if !@existing_roles[name]
|
67
78
|
print "Creating role '#{name}'..." if option_verbose?
|
@@ -76,35 +87,29 @@ module HammerCLICsv
|
|
76
87
|
})
|
77
88
|
end
|
78
89
|
|
79
|
-
permissions = collect_column(line[PERMISSIONS]) do |permission|
|
80
|
-
foreman_permission(:name => permission)
|
81
|
-
end
|
82
|
-
organizations = collect_column(line[ORGANIZATIONS]) do |organization|
|
83
|
-
foreman_organization(:name => organization)
|
84
|
-
end
|
85
|
-
locations = collect_column(line[LOCATIONS]) do |location|
|
86
|
-
foreman_location(:name => location)
|
87
|
-
end
|
88
|
-
|
89
90
|
filter_id = foreman_filter(name, line[RESOURCE], search)
|
90
91
|
if !filter_id
|
91
|
-
print " creating filter #{line[RESOURCE]}..."
|
92
|
-
@api.resource(:filters)
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
92
|
+
print " creating filter #{line[RESOURCE]}..." if option_verbose?
|
93
|
+
@api.resource(:filters)\
|
94
|
+
.call(:create, { 'filter' => {
|
95
|
+
'role_id' => @existing_roles[name],
|
96
|
+
'search' => search,
|
97
|
+
'unlimited' => search.empty?,
|
98
|
+
'organization_ids' => organizations,
|
99
|
+
'location_ids' => locations,
|
100
|
+
'permission_ids' => permissions
|
101
|
+
}})
|
99
102
|
else
|
100
103
|
print " updating filter #{line[RESOURCE]}..."
|
101
|
-
@api.resource(:filters)
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
104
|
+
@api.resource(:filters)\
|
105
|
+
.call(:update, {
|
106
|
+
'id' => filter_id,
|
107
|
+
'search' => search,
|
108
|
+
'unlimited' => search.empty?,
|
109
|
+
'organization_ids' => organizations,
|
110
|
+
'location_ids' => locations,
|
111
|
+
'permission_ids' => permissions
|
112
|
+
})
|
108
113
|
end
|
109
114
|
|
110
115
|
puts 'done' if option_verbose?
|
data/test/config.template.yml
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
:ui:
|
2
|
+
:interactive: true
|
3
|
+
:per_page: 20
|
4
|
+
:history_file: './log/history'
|
5
|
+
|
6
|
+
:watch_plain: true # enable/disable color output of logger in Clamp commands
|
7
|
+
|
8
|
+
:log_dir: './log'
|
9
|
+
:log_level: 'error'
|
10
|
+
:log_api_calls: false
|
11
|
+
:log_size: 5 # MB
|
12
|
+
|
1
13
|
:csv:
|
2
14
|
:enable_module: true
|
3
15
|
:host: 'https://localhost'
|
@@ -12,6 +24,3 @@
|
|
12
24
|
|
13
25
|
:katello:
|
14
26
|
:enable_module: true
|
15
|
-
:host: 'https://localhost'
|
16
|
-
:username: 'admin'
|
17
|
-
:password: 'changeme'
|
data/test/csv_test_helper.rb
CHANGED
@@ -25,16 +25,15 @@ require 'hammer_cli_csv'
|
|
25
25
|
require 'hammer_cli_foreman'
|
26
26
|
require 'hammer_cli_katello'
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
:password => 'changeme'
|
33
|
-
}
|
28
|
+
module HammerCLIForeman
|
29
|
+
def self.clear_credentials
|
30
|
+
@credentials = nil
|
31
|
+
end
|
34
32
|
end
|
35
33
|
|
34
|
+
|
36
35
|
def hammer(context=nil)
|
37
|
-
HammerCLI::MainCommand.new("", context ||
|
36
|
+
HammerCLI::MainCommand.new("", context || HammerCLI::Settings.dump)
|
38
37
|
end
|
39
38
|
|
40
39
|
def capture
|
@@ -50,12 +49,22 @@ ensure
|
|
50
49
|
end
|
51
50
|
|
52
51
|
def set_user(username, password='changeme')
|
52
|
+
HammerCLI::Connection.drop_all
|
53
|
+
HammerCLIForeman.clear_credentials
|
53
54
|
HammerCLI::Settings.load({
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
55
|
+
:_params => {
|
56
|
+
:username => username,
|
57
|
+
:password => password
|
58
|
+
},
|
59
|
+
:foreman => {
|
60
|
+
:username => username,
|
61
|
+
:password => password
|
62
|
+
},
|
63
|
+
:csv => {
|
64
|
+
:username => username,
|
65
|
+
:password => password
|
66
|
+
}
|
67
|
+
})
|
59
68
|
end
|
60
69
|
|
61
70
|
|
data/test/data/organizations.csv
CHANGED
data/test/data/roles.csv
CHANGED
@@ -15,6 +15,7 @@ chelseacalaway,1,ActivationKey,name = chelsea.calaway@megacorp.com,"view_activat
|
|
15
15
|
cinthiacadieux,1,ActivationKey,name = cinthia.cadieux@megacorp.com,"view_activation_keys",Mega Corporation,
|
16
16
|
coraleeculbert,1,ActivationKey,name = coralee.culbert@megacorp.com,"view_activation_keys",Mega Corporation,
|
17
17
|
damondials,1,ActivationKey,name = damon.dials@megacorp.com,"view_activation_keys",Mega Corporation,
|
18
|
+
damondials,1,Organization,"name = ""Mega Corporation""","view_organizations",,
|
18
19
|
danaedrayer,1,ActivationKey,name = danae.drayer@megacorp.com,"view_activation_keys",Mega Corporation,
|
19
20
|
danettedewitt,1,ActivationKey,name = danette.dewitt@megacorp.com,"view_activation_keys",Mega Corporation,
|
20
21
|
danilodilbeck,1,ActivationKey,name = danilo.dilbeck@megacorp.com,"view_activation_keys",Mega Corporation,
|
@@ -45,7 +46,7 @@ hsiuhenningsen,1,ActivationKey,name = hsiu.henningsen@megacorp.com,"view_activat
|
|
45
46
|
jacquesjoaquin,1,ActivationKey,name = jacques.joaquin@megacorp.com,"view_activation_keys",Mega Corporation,
|
46
47
|
janayjohnson,1,ActivationKey,name = janay.johnson@megacorp.com,"view_activation_keys",Mega Corporation,
|
47
48
|
jeffersonjock,1,ActivationKey,name = jefferson.jock@megacorp.com,"view_activation_keys",Mega Corporation,
|
48
|
-
jeneejahns,1,ActivationKey
|
49
|
+
jeneejahns,1,ActivationKey,name = jenee.jahns@megacorp.com,"view_activation_keys,create_activation_keys,edit_activation_keys,destroy_activation_keys",Mega Corporation,
|
49
50
|
jeremyjong,1,ActivationKey,name = jeremy.jong@megacorp.com,"view_activation_keys",Mega Corporation,
|
50
51
|
judithjoachim,1,ActivationKey,name = judith.joachim@megacorp.com,"view_activation_keys",Mega Corporation,
|
51
52
|
juliojerabek,1,ActivationKey,name = julio.jerabek@megacorp.com,"view_activation_keys",Mega Corporation,
|
@@ -117,43 +118,43 @@ weswallner,1,ActivationKey,name = wes.wallner@megacorp.com,"view_activation_keys
|
|
117
118
|
winifredwessels,1,ActivationKey,name = winifred.wessels@megacorp.com,"view_activation_keys",Mega Corporation,
|
118
119
|
yunyarberry,1,ActivationKey,name = yun.yarberry@megacorp.com,"view_activation_keys",Mega Corporation,
|
119
120
|
zelmazemke,1,ActivationKey,name = zelma.zemke@megacorp.com,"view_activation_keys",Mega Corporation,
|
120
|
-
Mega Corporation Admin,1,ActivationKey,"","view_activation_keys,create_activation_keys,edit_activation_keys,destroy_activation_keys",Mega Corporation,
|
121
|
-
Mega Corporation Admin,1,Architecture,"","view_architectures,create_architectures,edit_architectures,destroy_architectures"
|
122
|
-
Mega Corporation Admin,1,Audit,"",view_audit_logs
|
123
|
-
Mega Corporation Admin,1,Bookmark,"","view_bookmarks,create_bookmarks,edit_bookmarks,destroy_bookmarks"
|
124
|
-
Mega Corporation Admin,1,CommonParameter,"","view_globals,create_globals,edit_globals,destroy_globals"
|
125
|
-
Mega Corporation Admin,1,ComputeProfile,"","view_compute_profiles,create_compute_profiles,edit_compute_profiles,destroy_compute_profiles"
|
126
|
-
Mega Corporation Admin,1,ComputeResource,"","console_compute_resources_vms,power_compute_resources_vms,destroy_compute_resources_vms,edit_compute_resources_vms,create_compute_resources_vms,view_compute_resources_vms,destroy_compute_resources,edit_compute_resources,create_compute_resources,view_compute_resources",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,
|
127
|
-
Mega Corporation Admin,1,System,"","view_content_hosts,create_content_hosts,edit_content_hosts,destroy_content_hosts",Mega Corporation,
|
128
|
-
Mega Corporation Admin,1,ContentView,"","view_content_views,create_content_views,edit_content_views,destroy_content_views,publish_content_views",Mega Corporation,
|
129
|
-
Mega Corporation Admin,1,Domain,"","view_domains,create_domains,edit_domains,destroy_domains",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,
|
130
|
-
Mega Corporation Admin,1,Environment,"","view_environments,create_environments,edit_environments,destroy_environments,import_environments",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,
|
131
|
-
Mega Corporation Admin,1,FactValue,"","view_facts,upload_facts"
|
132
|
-
Mega Corporation Admin,1,Filter,"","view_filters,create_filters,edit_filters,destroy_filters",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,
|
133
|
-
Mega Corporation Admin,1,GpgKey,"","view_gpg_keys,create_gpg_keys,edit_gpg_keys,destroy_gpg_keys",Mega Corporation,
|
134
|
-
Mega Corporation Admin,1,Hostgroup,"","view_hostgroups,create_hostgroups,edit_hostgroups,destroy_hostgroups",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,
|
135
|
-
Mega Corporation Admin,1,HostClass,"",edit_classes
|
136
|
-
Mega Corporation Admin,1,Host,"","puppetrun_hosts,ipmi_boot,console_hosts,power_hosts,build_hosts,destroy_hosts,edit_hosts,create_hosts,view_hosts",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,
|
137
|
-
Mega Corporation Admin,1,Image,"","view_images,create_images,edit_images,destroy_images"
|
138
|
-
Mega Corporation Admin,1,Location,"","view_locations,create_locations,edit_locations,destroy_locations,assign_locations"
|
139
|
-
Mega Corporation Admin,1,KTEnvironment,"","view_lifecycle_environments,create_lifecycle_environments,edit_lifecycle_environments,destroy_lifecycle_environments",Mega Corporation,
|
140
|
-
Mega Corporation Admin,1,LookupKey,"","view_external_variables,create_external_variables,edit_external_variables,destroy_external_variables"
|
141
|
-
Mega Corporation Admin,1,Medium,"","view_media,create_media,edit_media,destroy_media",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,
|
142
|
-
Mega Corporation Admin,1,Model,"","view_models,create_models,edit_models,destroy_models"
|
143
|
-
Mega Corporation Admin,1,Operatingsystem,"","view_operatingsystems,create_operatingsystems,edit_operatingsystems,destroy_operatingsystems"
|
144
|
-
Mega Corporation Admin,1,Organization,"","delete_manifest,import_manifest,unattach_subscriptions,attach_subscriptions,view_subscriptions,assign_organizations,edit_organizations,view_organizations"
|
145
|
-
Mega Corporation Admin,1,Parameter,"","create_params,edit_params,destroy_params"
|
146
|
-
Mega Corporation Admin,1,Ptable,"","view_ptables,create_ptables,edit_ptables,destroy_ptables"
|
147
|
-
Mega Corporation Admin,1,Product,"","view_products,create_products,edit_products,destroy_products,sync_products",Mega Corporation,
|
148
|
-
Mega Corporation Admin,1,ConfigTemplate,"","view_templates,create_templates,edit_templates,destroy_templates,deploy_templates",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,
|
149
|
-
Mega Corporation Admin,1,Puppetclass,"","view_puppetclasses,create_puppetclasses,edit_puppetclasses,destroy_puppetclasses,import_puppetclasses"
|
150
|
-
Mega Corporation Admin,1,Realm,"","view_realms,create_realms,edit_realms,destroy_realms",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,
|
151
|
-
Mega Corporation Admin,1,Report,"","view_reports,destroy_reports,upload_reports"
|
152
|
-
Mega Corporation Admin,1,Role,"","view_roles,create_roles,edit_roles,destroy_roles"
|
153
|
-
Mega Corporation Admin,1,SmartProxy,"","destroy_smart_proxies_puppetca,edit_smart_proxies_puppetca,view_smart_proxies_puppetca,destroy_smart_proxies_autosign,create_smart_proxies_autosign,view_smart_proxies_autosign,destroy_smart_proxies,edit_smart_proxies,create_smart_proxies,view_smart_proxies",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,
|
154
|
-
Mega Corporation Admin,1,Subnet,"","view_subnets,create_subnets,edit_subnets,destroy_subnets,import_subnets",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,
|
155
|
-
Mega Corporation Admin,1,SyncPlan,"","view_sync_plans,create_sync_plans,edit_sync_plans,destroy_sync_plans",Mega Corporation,
|
156
|
-
Mega Corporation Admin,1,Trend,"","view_trends,create_trends,edit_trends,destroy_trends,edit_trends"
|
157
|
-
Mega Corporation Admin,1,User,"","view_users,create_users,edit_users,destroy_users",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,
|
158
|
-
Mega Corporation Admin,1,Usergroup,"","view_usergroups,create_usergroups,edit_usergroups,destroy_usergroups"
|
159
|
-
Mega Corporation Admin,1,,"","view_tasks,view_statistics,view_plugins,access_settings,access_dashboard"
|
121
|
+
Mega Corporation Admin,1,ActivationKey,"","view_activation_keys,create_activation_keys,edit_activation_keys,destroy_activation_keys",Mega Corporation,
|
122
|
+
Mega Corporation Admin,1,Architecture,"","view_architectures,create_architectures,edit_architectures,destroy_architectures",,
|
123
|
+
Mega Corporation Admin,1,Audit,"",view_audit_logs,,
|
124
|
+
Mega Corporation Admin,1,Bookmark,"","view_bookmarks,create_bookmarks,edit_bookmarks,destroy_bookmarks",,
|
125
|
+
Mega Corporation Admin,1,CommonParameter,"","view_globals,create_globals,edit_globals,destroy_globals",,
|
126
|
+
Mega Corporation Admin,1,ComputeProfile,"","view_compute_profiles,create_compute_profiles,edit_compute_profiles,destroy_compute_profiles",,
|
127
|
+
Mega Corporation Admin,1,ComputeResource,"","console_compute_resources_vms,power_compute_resources_vms,destroy_compute_resources_vms,edit_compute_resources_vms,create_compute_resources_vms,view_compute_resources_vms,destroy_compute_resources,edit_compute_resources,create_compute_resources,view_compute_resources",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,Default Location,EU (Ireland) Region,South America (Sao Paulo) Region,US East (Northern Virginia) Region,US West (Northern California) Region,US West (Oregon) Region"
|
128
|
+
Mega Corporation Admin,1,System,"","view_content_hosts,create_content_hosts,edit_content_hosts,destroy_content_hosts",Mega Corporation,
|
129
|
+
Mega Corporation Admin,1,ContentView,"","view_content_views,create_content_views,edit_content_views,destroy_content_views,publish_content_views",Mega Corporation,
|
130
|
+
Mega Corporation Admin,1,Domain,"","view_domains,create_domains,edit_domains,destroy_domains",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,Default Location,EU (Ireland) Region,South America (Sao Paulo) Region,US East (Northern Virginia) Region,US West (Northern California) Region,US West (Oregon) Region"
|
131
|
+
Mega Corporation Admin,1,Environment,"","view_environments,create_environments,edit_environments,destroy_environments,import_environments",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,Default Location,EU (Ireland) Region,South America (Sao Paulo) Region,US East (Northern Virginia) Region,US West (Northern California) Region,US West (Oregon) Region"
|
132
|
+
Mega Corporation Admin,1,FactValue,"","view_facts,upload_facts",,
|
133
|
+
Mega Corporation Admin,1,Filter,"","view_filters,create_filters,edit_filters,destroy_filters",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,Default Location,EU (Ireland) Region,South America (Sao Paulo) Region,US East (Northern Virginia) Region,US West (Northern California) Region,US West (Oregon) Region"
|
134
|
+
Mega Corporation Admin,1,GpgKey,"","view_gpg_keys,create_gpg_keys,edit_gpg_keys,destroy_gpg_keys",Mega Corporation,
|
135
|
+
Mega Corporation Admin,1,Hostgroup,"","view_hostgroups,create_hostgroups,edit_hostgroups,destroy_hostgroups",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,Default Location,EU (Ireland) Region,South America (Sao Paulo) Region,US East (Northern Virginia) Region,US West (Northern California) Region,US West (Oregon) Region"
|
136
|
+
Mega Corporation Admin,1,HostClass,"",edit_classes,,
|
137
|
+
Mega Corporation Admin,1,Host,"","puppetrun_hosts,ipmi_boot,console_hosts,power_hosts,build_hosts,destroy_hosts,edit_hosts,create_hosts,view_hosts",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,Default Location,EU (Ireland) Region,South America (Sao Paulo) Region,US East (Northern Virginia) Region,US West (Northern California) Region,US West (Oregon) Region"
|
138
|
+
Mega Corporation Admin,1,Image,"","view_images,create_images,edit_images,destroy_images",,
|
139
|
+
Mega Corporation Admin,1,Location,"","view_locations,create_locations,edit_locations,destroy_locations,assign_locations",,
|
140
|
+
Mega Corporation Admin,1,KTEnvironment,"","view_lifecycle_environments,create_lifecycle_environments,edit_lifecycle_environments,destroy_lifecycle_environments",Mega Corporation,
|
141
|
+
Mega Corporation Admin,1,LookupKey,"","view_external_variables,create_external_variables,edit_external_variables,destroy_external_variables",,
|
142
|
+
Mega Corporation Admin,1,Medium,"","view_media,create_media,edit_media,destroy_media",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,Default Location,EU (Ireland) Region,South America (Sao Paulo) Region,US East (Northern Virginia) Region,US West (Northern California) Region,US West (Oregon) Region"
|
143
|
+
Mega Corporation Admin,1,Model,"","view_models,create_models,edit_models,destroy_models",,
|
144
|
+
Mega Corporation Admin,1,Operatingsystem,"","view_operatingsystems,create_operatingsystems,edit_operatingsystems,destroy_operatingsystems",,
|
145
|
+
Mega Corporation Admin,1,Organization,"","delete_manifest,import_manifest,unattach_subscriptions,attach_subscriptions,view_subscriptions,assign_organizations,edit_organizations,view_organizations",,
|
146
|
+
Mega Corporation Admin,1,Parameter,"","create_params,edit_params,destroy_params",,
|
147
|
+
Mega Corporation Admin,1,Ptable,"","view_ptables,create_ptables,edit_ptables,destroy_ptables",,
|
148
|
+
Mega Corporation Admin,1,Product,"","view_products,create_products,edit_products,destroy_products,sync_products",Mega Corporation,
|
149
|
+
Mega Corporation Admin,1,ConfigTemplate,"","view_templates,create_templates,edit_templates,destroy_templates,deploy_templates",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,Default Location,EU (Ireland) Region,South America (Sao Paulo) Region,US East (Northern Virginia) Region,US West (Northern California) Region,US West (Oregon) Region"
|
150
|
+
Mega Corporation Admin,1,Puppetclass,"","view_puppetclasses,create_puppetclasses,edit_puppetclasses,destroy_puppetclasses,import_puppetclasses",,
|
151
|
+
Mega Corporation Admin,1,Realm,"","view_realms,create_realms,edit_realms,destroy_realms",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,Default Location,EU (Ireland) Region,South America (Sao Paulo) Region,US East (Northern Virginia) Region,US West (Northern California) Region,US West (Oregon) Region"
|
152
|
+
Mega Corporation Admin,1,Report,"","view_reports,destroy_reports,upload_reports",,
|
153
|
+
Mega Corporation Admin,1,Role,"","view_roles,create_roles,edit_roles,destroy_roles",,
|
154
|
+
Mega Corporation Admin,1,SmartProxy,"","destroy_smart_proxies_puppetca,edit_smart_proxies_puppetca,view_smart_proxies_puppetca,destroy_smart_proxies_autosign,create_smart_proxies_autosign,view_smart_proxies_autosign,destroy_smart_proxies,edit_smart_proxies,create_smart_proxies,view_smart_proxies",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,Default Location,EU (Ireland) Region,South America (Sao Paulo) Region,US East (Northern Virginia) Region,US West (Northern California) Region,US West (Oregon) Region"
|
155
|
+
Mega Corporation Admin,1,Subnet,"","view_subnets,create_subnets,edit_subnets,destroy_subnets,import_subnets",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,Default Location,EU (Ireland) Region,South America (Sao Paulo) Region,US East (Northern Virginia) Region,US West (Northern California) Region,US West (Oregon) Region"
|
156
|
+
Mega Corporation Admin,1,SyncPlan,"","view_sync_plans,create_sync_plans,edit_sync_plans,destroy_sync_plans",Mega Corporation,
|
157
|
+
Mega Corporation Admin,1,Trend,"","view_trends,create_trends,edit_trends,destroy_trends,edit_trends",,
|
158
|
+
Mega Corporation Admin,1,User,"","view_users,create_users,edit_users,destroy_users",Mega Corporation,"Asia Pacific,Asia Pacific (Singapore) Region,Asia Pacific (Sydney) Region,Asia Pacific (Tokyo) Region,Default Location,EU (Ireland) Region,South America (Sao Paulo) Region,US East (Northern Virginia) Region,US West (Northern California) Region,US West (Oregon) Region"
|
159
|
+
Mega Corporation Admin,1,Usergroup,"","view_usergroups,create_usergroups,edit_usergroups,destroy_usergroups",,
|
160
|
+
Mega Corporation Admin,1,,"","view_tasks,view_statistics,view_plugins,access_settings,access_dashboard",,
|
data/test/data/subscriptions.csv
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
Name,Count,Organization,Manifest File,Content Set,Arch,Release
|
2
|
-
MegaCorp,1,Mega Corporation
|
2
|
+
MegaCorp,1,Mega Corporation,test/data/megacorp.zip,
|
3
3
|
Red Hat Enterprise Linux Server,1,Mega Corporation,,Red Hat Enterprise Linux 6 Server (RPMs),x86_64,6Server
|
4
4
|
Red Hat Enterprise Linux Server,1,Mega Corporation,,Red Hat Enterprise Linux 6 Server (RPMs),x86_64,6.1
|
5
5
|
Red Hat Enterprise Linux Server,1,Mega Corporation,,Red Hat Enterprise Linux 6 Server (RPMs),x86_64,6.2
|
data/test/roles_test.rb
CHANGED
@@ -3,35 +3,51 @@ require File.join(File.dirname(__FILE__), 'csv_test_helper')
|
|
3
3
|
require 'stringio'
|
4
4
|
require 'tempfile'
|
5
5
|
|
6
|
-
describe '
|
6
|
+
describe 'roles tests' do
|
7
7
|
|
8
8
|
extend CommandTestHelper
|
9
9
|
|
10
10
|
|
11
|
-
before :each do
|
12
|
-
|
13
|
-
end
|
11
|
+
#before :each do
|
12
|
+
# HammerCLI::Settings.load_from_file 'test/config'
|
13
|
+
#end
|
14
|
+
|
15
|
+
context 'roles' do
|
16
|
+
|
17
|
+
it 'basic import' do
|
18
|
+
set_user 'admin'
|
19
|
+
|
20
|
+
rolename = "role#{rand(10000)}"
|
21
|
+
|
22
|
+
file = Tempfile.new('roles_test')
|
23
|
+
file.write("Name,Count,Resource,Search,Permissions,Organizations,Locations\n")
|
24
|
+
file.write("#{rolename},1,ActivationKey,name = key_name,view_activation_keys,Mega Corporation,\n")
|
25
|
+
file.rewind
|
14
26
|
|
15
|
-
context 'activation keys' do
|
16
27
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
28
|
+
stdout,stderr = capture {
|
29
|
+
hammer.run(%W{csv roles --verbose --csv-file #{file.path}})
|
30
|
+
}
|
31
|
+
stderr.must_equal ''
|
32
|
+
stdout[0..-2].must_equal "Creating role '#{rolename}'... creating filter ActivationKey...done"
|
33
|
+
file.unlink
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'test role functionality' do
|
37
|
+
set_user('damon.dials@megacorp.com', 'redhat')
|
22
38
|
|
23
39
|
stdout,stderr = capture {
|
24
|
-
hammer.run(%W{activation-key list --organization-
|
40
|
+
hammer.run(%W{activation-key list --organization-label megacorp}).must_equal HammerCLI::EX_OK
|
25
41
|
}
|
26
42
|
lines = stdout.split("\n")
|
27
|
-
lines.length.must_equal
|
28
|
-
lines[
|
43
|
+
lines.length.must_equal 5
|
44
|
+
lines[3].must_match /.*damon.dials@megacorp\.com.*/
|
29
45
|
|
30
|
-
id = lines[
|
46
|
+
id = lines[3].split(' ')[0]
|
31
47
|
stdout,stderr = capture {
|
32
48
|
hammer.run(%W{activation-key info --id #{id}}).must_equal HammerCLI::EX_OK
|
33
49
|
}
|
34
|
-
stdout.split("\n")[
|
50
|
+
stdout.split("\n")[0].must_match /.*damon.dials@megacorp.com/
|
35
51
|
end
|
36
52
|
|
37
53
|
end
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hammer_cli_csv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom McKay
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hammer_cli_katello
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ! '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0
|
19
|
+
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ! '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rubocop
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.24.1
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: 0.24.1
|
41
41
|
description: Hammer-CLI-CSV is a plugin for Hammer to provide bulk actions against
|
42
42
|
a Katello server.
|
43
43
|
email:
|
@@ -58,6 +58,8 @@ files:
|
|
58
58
|
- lib/hammer_cli_csv/csv.rb
|
59
59
|
- lib/hammer_cli_csv/domains.rb
|
60
60
|
- lib/hammer_cli_csv/exception_handler.rb
|
61
|
+
- lib/hammer_cli_csv/export.rb
|
62
|
+
- lib/hammer_cli_csv/headpin_api.rb
|
61
63
|
- lib/hammer_cli_csv/host_collections.rb
|
62
64
|
- lib/hammer_cli_csv/hosts.rb
|
63
65
|
- lib/hammer_cli_csv/import.rb
|