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.
Files changed (69) hide show
  1. checksums.yaml +15 -0
  2. data/lib/hammer_cli_csv.rb +48 -0
  3. data/lib/hammer_cli_csv/activation_keys.rb +170 -0
  4. data/lib/hammer_cli_csv/architectures.rb +95 -0
  5. data/lib/hammer_cli_csv/base.rb +706 -0
  6. data/lib/hammer_cli_csv/compute_profiles.rb +94 -0
  7. data/lib/hammer_cli_csv/compute_resources.rb +92 -0
  8. data/lib/hammer_cli_csv/content_hosts.rb +357 -0
  9. data/lib/hammer_cli_csv/content_view_filters.rb +158 -0
  10. data/lib/hammer_cli_csv/content_views.rb +86 -0
  11. data/lib/hammer_cli_csv/csv.rb +23 -0
  12. data/lib/hammer_cli_csv/domains.rb +103 -0
  13. data/lib/hammer_cli_csv/exception_handler.rb +53 -0
  14. data/lib/hammer_cli_csv/host_collections.rb +108 -0
  15. data/lib/hammer_cli_csv/hosts.rb +118 -0
  16. data/lib/hammer_cli_csv/import.rb +82 -0
  17. data/lib/hammer_cli_csv/installation_medias.rb +88 -0
  18. data/lib/hammer_cli_csv/lifecycle_environments.rb +116 -0
  19. data/lib/hammer_cli_csv/locations.rb +84 -0
  20. data/lib/hammer_cli_csv/operating_systems.rb +95 -0
  21. data/lib/hammer_cli_csv/organizations.rb +107 -0
  22. data/lib/hammer_cli_csv/partition_tables.rb +98 -0
  23. data/lib/hammer_cli_csv/products.rb +179 -0
  24. data/lib/hammer_cli_csv/provisioning_templates.rb +96 -0
  25. data/lib/hammer_cli_csv/puppet_environments.rb +105 -0
  26. data/lib/hammer_cli_csv/puppet_facts.rb +99 -0
  27. data/lib/hammer_cli_csv/puppet_reports.rb +244 -0
  28. data/lib/hammer_cli_csv/reports.rb +91 -0
  29. data/lib/hammer_cli_csv/roles.rb +115 -0
  30. data/lib/hammer_cli_csv/smart_proxies.rb +88 -0
  31. data/lib/hammer_cli_csv/subnets.rb +121 -0
  32. data/lib/hammer_cli_csv/subscriptions.rb +135 -0
  33. data/lib/hammer_cli_csv/users.rb +133 -0
  34. data/lib/hammer_cli_csv/version.rb +16 -0
  35. data/test/activation_keys_test.rb +17 -0
  36. data/test/apipie_resource_mock.rb +77 -0
  37. data/test/config.template.yml +17 -0
  38. data/test/csv_test_helper.rb +65 -0
  39. data/test/data/activation-keys.csv +119 -0
  40. data/test/data/architectures.csv +5 -0
  41. data/test/data/content-hosts.csv +4 -0
  42. data/test/data/content-view-filters.csv +2 -0
  43. data/test/data/content-views.csv +6 -0
  44. data/test/data/domains.csv +8 -0
  45. data/test/data/host-collections.csv +16 -0
  46. data/test/data/hosts.csv +12 -0
  47. data/test/data/installation-medias.csv +7 -0
  48. data/test/data/lifecycle-environments.csv +6 -0
  49. data/test/data/locations.csv +10 -0
  50. data/test/data/operating-systems.csv +16 -0
  51. data/test/data/organizations.csv +5 -0
  52. data/test/data/partition-tables.csv +187 -0
  53. data/test/data/products.csv +19 -0
  54. data/test/data/puppet-environments.csv +6 -0
  55. data/test/data/puppet-facts.csv +9 -0
  56. data/test/data/reports.csv +4 -0
  57. data/test/data/roles.csv +159 -0
  58. data/test/data/smart-proxies.csv +2 -0
  59. data/test/data/subscriptions.csv +19 -0
  60. data/test/data/users.csv +119 -0
  61. data/test/helpers/command.rb +67 -0
  62. data/test/helpers/resource_disabled.rb +69 -0
  63. data/test/hosts_test.rb +47 -0
  64. data/test/organizations_test.rb +74 -0
  65. data/test/roles_test.rb +39 -0
  66. data/test/setup_test.rb +164 -0
  67. data/test/systems_test.rb +71 -0
  68. data/test/users_test.rb +35 -0
  69. metadata +174 -0
@@ -0,0 +1,158 @@
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
+ # NOTE:
13
+ # rpm -qa --queryformat "%{NAME}|=|%{VERSION}-%{RELEASE},"
14
+
15
+ module HammerCLICsv
16
+ class CsvCommand
17
+ class ContentViewFiltersCommand < BaseCommand
18
+ command_name 'content-view-filters'
19
+ desc 'import or export content-view-filters'
20
+
21
+ CONTENTVIEW = 'Content View'
22
+ ORGANIZATION = 'Organization'
23
+ TYPE = 'Type'
24
+ DESCRIPTION = 'Description'
25
+ REPOSITORIES = 'Repositories'
26
+ RULES = 'Rules'
27
+
28
+ def export
29
+ # TODO
30
+ end
31
+
32
+ def import
33
+ @existing_filters = {}
34
+
35
+ thread_import do |line|
36
+ create_filters_from_csv(line)
37
+ end
38
+ end
39
+
40
+ def create_filters_from_csv(line)
41
+ @existing_filters[line[ORGANIZATION]] ||= {}
42
+ if !@existing_filters[line[ORGANIZATION]][line[CONTENTVIEW]]
43
+ @existing_filters[line[ORGANIZATION]][line[CONTENTVIEW]] ||= {}
44
+ @api.resource(:content_view_filters)
45
+ .call(:index, {
46
+ 'per_page' => 999999,
47
+ 'content_view_id' => katello_contentview(line[ORGANIZATION], :name => line[CONTENTVIEW])
48
+ })['results'].each do |filter|
49
+ @existing_filters[line[ORGANIZATION]][line[CONTENTVIEW]][filter['name']] = filter['id'] if filter
50
+ end
51
+ end
52
+
53
+ repository_ids = collect_column(line[REPOSITORIES]) do |repository|
54
+ katello_repository(line[ORGANIZATION], :name => repository)
55
+ end
56
+
57
+ line[COUNT].to_i.times do |number|
58
+ name = namify(line[NAME], number)
59
+
60
+ filter_id = @existing_filters[line[ORGANIZATION]][line[CONTENTVIEW]][name]
61
+ if !filter_id
62
+ print "Creating filter '#{name}' for content view filter '#{line[CONTENTVIEW]}'..." if option_verbose?
63
+ filter_id = @api.resource(:content_view_filters)
64
+ .call(:create, {
65
+ 'content_view_id' => katello_contentview(line[ORGANIZATION], :name => line[CONTENTVIEW]),
66
+ 'name' => name,
67
+ 'description' => line[DESCRIPTION],
68
+ 'type' => filter_type(line[TYPE]),
69
+ 'inclusion' => filter_inclusion?(line[TYPE]),
70
+ 'repository_ids' => repository_ids
71
+ })['id']
72
+ @existing_filters[line[ORGANIZATION]][name] = filter_id
73
+ else
74
+ print "Updating filter '#{name}' for content view filter '#{line[CONTENTVIEW]}'..." if option_verbose?
75
+ @api.resource(:content_view_filters)
76
+ .call(:update, {
77
+ 'id' => filter_id,
78
+ 'description' => line[DESCRIPTION],
79
+ 'type' => filter_type(line[TYPE]),
80
+ 'inclusion' => filter_inclusion?(line[TYPE]),
81
+ 'repository_ids' => repository_ids
82
+ })
83
+ end
84
+
85
+ @existing_rules ||= {}
86
+ @existing_rules[line[ORGANIZATION]] ||= {}
87
+ @existing_rules[line[ORGANIZATION]][line[CONTENTVIEW]] ||= {}
88
+ @api.resource(:content_view_filter_rules)
89
+ .call(:index, {
90
+ 'per_page' => 999999,
91
+ 'content_view_filter_id' => filter_id
92
+ })['results'].each do |rule|
93
+ @existing_rules[line[ORGANIZATION]][line[CONTENTVIEW]][rule['name']] = rule
94
+ end
95
+
96
+ collect_column(line[RULES]) do |rule|
97
+ name, type, version = rule.split('|')
98
+ params = {
99
+ 'content_view_filter_id' => filter_id,
100
+ 'name' => name
101
+ }
102
+ if type == '='
103
+ params['type'] = 'equal',
104
+ params['version'] = version
105
+ elsif type == '<'
106
+ params['type'] = 'less',
107
+ params['max_version'] = version
108
+ elsif type == '>'
109
+ params['type'] = 'greater',
110
+ params['min_version'] = version
111
+ elsif type == '-'
112
+ params['type'] = 'range',
113
+ min_version, max_version = version.split(',')
114
+ params['min_version'] = min_version
115
+ params['max_version'] = max_version
116
+ else
117
+ raise "Unknown type '#{type}' from '#{line[RULES]}'"
118
+ end
119
+
120
+ rule = @existing_rules[line[ORGANIZATION]][line[CONTENTVIEW]][name]
121
+ if !rule
122
+ print "creating rule '#{rule}'..." if option_verbose?
123
+ rule = @api.resource(:content_view_filter_rules).call(:create, params)
124
+ @existing_rules[line[ORGANIZATION]][line[CONTENTVIEW]][rule['name']] = rule
125
+ else
126
+ print "updating rule '#{rule}'..." if option_verbose?
127
+ params['id'] = rule['id']
128
+ @api.resource(:content_view_filter_rules).call(:update, params)
129
+ end
130
+ end
131
+
132
+ puts 'done' if option_verbose?
133
+ end
134
+
135
+ rescue RuntimeError => e
136
+ raise "#{e}\n #{line}"
137
+ end
138
+
139
+ private
140
+
141
+ def filter_type(type)
142
+ if type.split[1] == 'RPM'
143
+ 'rpm'
144
+ else
145
+ 'unknown'
146
+ end
147
+ end
148
+
149
+ def filter_inclusion?(type)
150
+ if type.split[0] == 'Include'
151
+ true
152
+ else
153
+ false
154
+ end
155
+ end
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,86 @@
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 ContentViewsCommand < BaseCommand
15
+ command_name 'content-views'
16
+ desc 'import or export content-views'
17
+
18
+ ORGANIZATION = 'Organization'
19
+ DESCRIPTION = 'Description'
20
+ COMPOSITE = 'Composite'
21
+ REPOSITORIES = 'Repositories'
22
+
23
+ def export
24
+ # TODO
25
+ end
26
+
27
+ def import
28
+ @existing_contentviews = {}
29
+
30
+ thread_import do |line|
31
+ create_contentviews_from_csv(line)
32
+ end
33
+ end
34
+
35
+ def create_contentviews_from_csv(line)
36
+ if !@existing_contentviews[line[ORGANIZATION]]
37
+ @existing_contentviews[line[ORGANIZATION]] ||= {}
38
+ @api.resource(:content_views)
39
+ .call(:index, {
40
+ 'per_page' => 999999,
41
+ 'organization_id' => foreman_organization(:name => line[ORGANIZATION]),
42
+ 'nondefault' => true
43
+ })['results'].each do |contentview|
44
+ @existing_contentviews[line[ORGANIZATION]][contentview['name']] = contentview['id'] if contentview
45
+ end
46
+ end
47
+
48
+ repository_ids = collect_column(line[REPOSITORIES]) do |repository|
49
+ katello_repository(line[ORGANIZATION], :name => repository)
50
+ end
51
+
52
+ line[COUNT].to_i.times do |number|
53
+ name = namify(line[NAME], number)
54
+ composite = line[COMPOSITE] == 'Yes' ? true : false
55
+
56
+ contentview_id = @existing_contentviews[line[ORGANIZATION]][name]
57
+ if !contentview_id
58
+ print "Creating content view '#{name}'..." if option_verbose?
59
+ contentview_id = @api.resource(:content_views)
60
+ .call(:create, {
61
+ 'organization_id' => foreman_organization(:name => line[ORGANIZATION]),
62
+ 'name' => name,
63
+ 'label' => labelize(name),
64
+ 'description' => line[DESCRIPTION],
65
+ 'composite' => composite,
66
+ 'repository_ids' => repository_ids
67
+ })['id']
68
+ @existing_contentviews[line[ORGANIZATION]][name] = contentview_id
69
+ else
70
+ print "Updating content view '#{name}'..." if option_verbose?
71
+ @api.resource(:content_views)
72
+ .call(:update, {
73
+ 'id' => contentview_id,
74
+ 'description' => line[DESCRIPTION],
75
+ 'repository_ids' => repository_ids
76
+ })
77
+ end
78
+ puts 'done' if option_verbose?
79
+ end
80
+
81
+ rescue RuntimeError => e
82
+ raise "#{e}\n #{line}"
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,23 @@
1
+
2
+ # Copyright 2013-2014 Red Hat, Inc.
3
+ #
4
+ # This software is licensed to you under the GNU General Public
5
+ # License as published by the Free Software Foundation; either version
6
+ # 2 of the License (GPLv2) or (at your option) any later version.
7
+ # There is NO WARRANTY for this software, express or implied,
8
+ # including the implied warranties of MERCHANTABILITY,
9
+ # NON-INFRINGEMENT, or FITNESS FOR A PARTICULAR PURPOSE. You should
10
+ # have received a copy of GPLv2 along with this software; if not, see
11
+ # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
12
+
13
+ require 'hammer_cli'
14
+ require 'hammer_cli/exit_codes'
15
+
16
+ module HammerCLICsv
17
+ class CsvCommand < HammerCLI::AbstractCommand
18
+ end
19
+
20
+ HammerCLI::MainCommand.subcommand('csv',
21
+ _('import to, or export from a running foretello server'),
22
+ HammerCLICsv::CsvCommand)
23
+ end
@@ -0,0 +1,103 @@
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
+ # -= Domains CSV =-
14
+ #
15
+ # Columns
16
+ # Name
17
+ # - Domain 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 DomainsCommand < BaseCommand
31
+ command_name 'domains'
32
+ desc 'import or export domains'
33
+
34
+ FULLNAME = 'Full Name'
35
+ ORGANIZATIONS = 'Organizations'
36
+
37
+ def export
38
+ CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
39
+ csv << [NAME, COUNT, FULLNAME]
40
+ @api.resource(:domains).call(:index, {:per_page => 999999})['results'].each do |domain|
41
+ puts domain
42
+ name = domain['name']
43
+ count = 1
44
+ fullname = domain['fullname']
45
+ csv << [name, count, fullname]
46
+ end
47
+ end
48
+ end
49
+
50
+ def import
51
+ @existing = {}
52
+ @api.resource(:domains).call(:index, {:per_page => 999999})['results'].each do |domain|
53
+ @existing[domain['name']] = domain['id'] if domain
54
+ end
55
+
56
+ thread_import do |line|
57
+ create_domains_from_csv(line)
58
+ end
59
+ end
60
+
61
+ def create_domains_from_csv(line)
62
+ line[COUNT].to_i.times do |number|
63
+ name = namify(line[NAME], number)
64
+ if !@existing.include? name
65
+ print "Creating domain '#{name}'..." if option_verbose?
66
+ domain_id = @api.resource(:domains).call(:create, {
67
+ 'name' => name
68
+ })['id']
69
+ else
70
+ print "Updating domain '#{name}'..." if option_verbose?
71
+ domain_id = @api.resource(:domains).call(:update, {
72
+ 'id' => @existing[name],
73
+ 'name' => name
74
+ })['id']
75
+ end
76
+
77
+ # Update associated resources
78
+ domains ||= {}
79
+ CSV.parse_line(line[ORGANIZATIONS]).each do |organization|
80
+ organization_id = foreman_organization(:name => organization)
81
+ if domains[organization].nil?
82
+ domains[organization] = @api.resource(:organizations).call(:show, {'id' => organization_id})['domains'].collect do |domain|
83
+ domain['id']
84
+ end
85
+ end
86
+ domains[organization] += [domain_id] if !domains[organization].include? domain_id
87
+
88
+ @api.resource(:organizations).call(:update, {
89
+ 'id' => organization_id,
90
+ 'organization' => {
91
+ 'domain_ids' => domains[organization]
92
+ }
93
+ })
94
+ end
95
+
96
+ print "done\n" if option_verbose?
97
+ end
98
+ rescue RuntimeError => e
99
+ raise "#{e}\n #{line}"
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,53 @@
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
+ require 'hammer_cli/exception_handler'
13
+
14
+ module HammerCLICsv
15
+ class ExceptionHandler < HammerCLI::ExceptionHandler
16
+ def mappings
17
+ super + [
18
+ [Exception, :handle_csv_exception],
19
+ [RestClient::Forbidden, :handle_forbidden],
20
+ [RestClient::UnprocessableEntity, :handle_unprocessable_entity],
21
+ [ArgumentError, :handle_argument_error]
22
+ ]
23
+ end
24
+
25
+ protected
26
+
27
+ def handle_csv_exception(e)
28
+ $stderr.puts e.message
29
+ log_full_error e
30
+ HammerCLI::EX_DATAERR
31
+ end
32
+
33
+ def handle_unprocessable_entity(e)
34
+ response = JSON.parse(e.response)
35
+ response = response[response.keys[0]]
36
+
37
+ print_error response['full_messages']
38
+ HammerCLI::EX_DATAERR
39
+ end
40
+
41
+ def handle_argument_error(e)
42
+ print_error e.message
43
+ log_full_error e
44
+ HammerCLI::EX_USAGE
45
+ end
46
+
47
+ def handle_forbidden(e)
48
+ print_error 'Forbidden - server refused to process the request'
49
+ log_full_error e
50
+ HammerCLI::EX_NOPERM
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,108 @@
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
+ # -= System Groups CSV =-
14
+ #
15
+ # Columns
16
+ # Name
17
+ # - System group name
18
+ # - May contain '%d' which will be replaced with current iteration number of Count
19
+ # - eg. "group%d" -> "group1"
20
+ # Count
21
+ # - Number of times to iterate on this line of the CSV file
22
+ # Org Label
23
+ # Limit
24
+ # Description
25
+ #
26
+
27
+ require 'hammer_cli'
28
+ require 'json'
29
+ require 'csv'
30
+
31
+ module HammerCLICsv
32
+ class CsvCommand
33
+ class HostCollectionsCommand < BaseCommand
34
+ command_name 'host-collections'
35
+ desc 'import or export host collections'
36
+
37
+ ORGANIZATION = 'Organization'
38
+ LIMIT = 'Limit'
39
+ DESCRIPTION = 'Description'
40
+
41
+ def export
42
+ CSV.open(option_csv_file, 'wb') do |csv|
43
+ csv << [NAME, COUNT, ORGANIZATION, LIMIT, DESCRIPTION]
44
+ @api.resource(:organizations)
45
+ .call(:index, {
46
+ 'per_page' => 999999
47
+ })['results'].each do |organization|
48
+ @api.resource(:host_collections)
49
+ .call(:index, {
50
+ 'organization_id' => organization['id']
51
+ }).each do |hostcollection|
52
+ puts hostcollection
53
+ csv << [hostcollection['name'], 1, organization['id'],
54
+ hostcollection['max_systems'].to_i < 0 ? 'Unlimited' : sytemgroup['max_systems'],
55
+ hostcollection['description']]
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ def import
62
+ @existing = {}
63
+
64
+ thread_import do |line|
65
+ create_hostcollections_from_csv(line)
66
+ end
67
+ end
68
+
69
+ def create_hostcollections_from_csv(line)
70
+ if !@existing[line[ORGANIZATION]]
71
+ @existing[line[ORGANIZATION]] = {}
72
+ @api.resource(:host_collections)
73
+ .call(:index, {
74
+ 'per_page' => 999999,
75
+ 'organization_id' => foreman_organization(:name => line[ORGANIZATION])
76
+ })['results'].each do |hostcollection|
77
+ @existing[line[ORGANIZATION]][hostcollection['name']] = hostcollection['id']
78
+ end
79
+ end
80
+
81
+ line[COUNT].to_i.times do |number|
82
+ name = namify(line[NAME], number)
83
+ if !@existing[line[ORGANIZATION]].include? name
84
+ print "Creating system group '#{name}'..." if option_verbose?
85
+ @api.resource(:host_collections)
86
+ .call(:create, {
87
+ 'organization_id' => foreman_organization(:name => line[ORGANIZATION]),
88
+ 'name' => name,
89
+ 'max_systems' => (line[LIMIT] == 'Unlimited') ? -1 : line[LIMIT],
90
+ 'description' => line[DESCRIPTION]
91
+ })
92
+ else
93
+ print "Updating system group '#{name}'..." if option_verbose?
94
+ @api.resource(:host_collections)
95
+ .call(:update, {
96
+ 'organization_id' => line[ORGANIZATION],
97
+ 'id' => @existing[line[ORGANIZATION]][name],
98
+ 'name' => name,
99
+ 'max_systems' => (line[LIMIT] == 'Unlimited') ? -1 : line[LIMIT],
100
+ 'description' => line[DESCRIPTION]
101
+ })
102
+ end
103
+ print "done\n" if option_verbose?
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end