hammer_cli_csv 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +8 -8
  2. data/config/cli_config.yml +2 -0
  3. data/lib/hammer_cli_csv.rb +4 -11
  4. data/lib/hammer_cli_csv/activation_keys.rb +7 -21
  5. data/lib/hammer_cli_csv/architectures.rb +6 -37
  6. data/lib/hammer_cli_csv/base.rb +177 -21
  7. data/lib/hammer_cli_csv/compute_profiles.rb +4 -21
  8. data/lib/hammer_cli_csv/compute_resources.rb +4 -16
  9. data/lib/hammer_cli_csv/containers.rb +65 -0
  10. data/lib/hammer_cli_csv/content_hosts.rb +22 -26
  11. data/lib/hammer_cli_csv/content_view_filters.rb +90 -60
  12. data/lib/hammer_cli_csv/content_views.rb +4 -17
  13. data/lib/hammer_cli_csv/csv.rb +0 -12
  14. data/lib/hammer_cli_csv/domains.rb +74 -38
  15. data/lib/hammer_cli_csv/exception_handler.rb +0 -11
  16. data/lib/hammer_cli_csv/export.rb +14 -20
  17. data/lib/hammer_cli_csv/headpin_api.rb +0 -11
  18. data/lib/hammer_cli_csv/host_collections.rb +5 -23
  19. data/lib/hammer_cli_csv/host_groups.rb +115 -0
  20. data/lib/hammer_cli_csv/hosts.rb +32 -56
  21. data/lib/hammer_cli_csv/import.rb +46 -24
  22. data/lib/hammer_cli_csv/installation_medias.rb +4 -15
  23. data/lib/hammer_cli_csv/job_templates.rb +142 -0
  24. data/lib/hammer_cli_csv/lifecycle_environments.rb +5 -38
  25. data/lib/hammer_cli_csv/locations.rb +4 -33
  26. data/lib/hammer_cli_csv/operating_systems.rb +17 -33
  27. data/lib/hammer_cli_csv/organizations.rb +13 -41
  28. data/lib/hammer_cli_csv/partition_tables.rb +66 -54
  29. data/lib/hammer_cli_csv/products.rb +12 -24
  30. data/lib/hammer_cli_csv/provisioning_templates.rb +4 -18
  31. data/lib/hammer_cli_csv/puppet_environments.rb +36 -59
  32. data/lib/hammer_cli_csv/puppet_facts.rb +36 -58
  33. data/lib/hammer_cli_csv/puppet_reports.rb +4 -38
  34. data/lib/hammer_cli_csv/reports.rb +4 -15
  35. data/lib/hammer_cli_csv/roles.rb +4 -15
  36. data/lib/hammer_cli_csv/settings.rb +49 -0
  37. data/lib/hammer_cli_csv/smart_proxies.rb +9 -24
  38. data/lib/hammer_cli_csv/splice.rb +0 -12
  39. data/lib/hammer_cli_csv/subnets.rb +10 -21
  40. data/lib/hammer_cli_csv/subscriptions.rb +21 -24
  41. data/lib/hammer_cli_csv/sync_plans.rb +4 -19
  42. data/lib/hammer_cli_csv/users.rb +4 -15
  43. data/lib/hammer_cli_csv/version.rb +1 -12
  44. data/test/content_hosts_test.rb +1 -1
  45. data/test/content_views_test.rb +52 -0
  46. data/test/data/content-hosts.csv +1 -1
  47. data/test/data/content-view-filters.csv +1 -1
  48. data/test/data/content-views.csv +5 -5
  49. data/test/data/hosts.csv +2 -2
  50. data/test/data/operating-systems.csv +16 -16
  51. data/test/data/products.csv +1 -1
  52. data/test/data/settings.csv +5 -0
  53. data/test/import_test.rb +79 -0
  54. metadata +14 -18
@@ -1,14 +1,3 @@
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
1
  require 'hammer_cli_foreman'
13
2
  require 'hammer_cli_foreman_tasks'
14
3
 
@@ -20,8 +9,6 @@ module HammerCLICsv
20
9
  command_name 'content-views'
21
10
  desc 'import or export content-views'
22
11
 
23
- option %w(--organization), 'ORGANIZATION', 'Only process organization matching this name'
24
-
25
12
  LABEL = 'Label'
26
13
  ORGANIZATION = 'Organization'
27
14
  DESCRIPTION = 'Description'
@@ -30,8 +17,8 @@ module HammerCLICsv
30
17
  ENVIRONMENTS = "Lifecycle Environments"
31
18
 
32
19
  def export
33
- CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => false}) do |csv|
34
- csv << [NAME, COUNT, LABEL, ORGANIZATION, COMPOSITE, REPOSITORIES, ENVIRONMENTS]
20
+ CSV.open(option_file || '/dev/stdout', 'wb', {:force_quotes => false}) do |csv|
21
+ csv << [NAME, LABEL, ORGANIZATION, COMPOSITE, REPOSITORIES, ENVIRONMENTS]
35
22
  @api.resource(:organizations).call(:index, {
36
23
  :per_page => 999999
37
24
  })['results'].each do |organization|
@@ -61,7 +48,7 @@ module HammerCLICsv
61
48
  composite_contentviews << [name, 1, label, orgname, composite, contentviews, environments]
62
49
  else
63
50
  repositories = export_column(contentview, 'repositories', 'name')
64
- csv << [name, 1, label, orgname, composite, repositories, environments]
51
+ csv << [name, label, orgname, composite, repositories, environments]
65
52
  end
66
53
  end
67
54
  composite_contentviews.each do |contentview|
@@ -106,7 +93,7 @@ module HammerCLICsv
106
93
  end
107
94
  end
108
95
 
109
- line[COUNT].to_i.times do |number|
96
+ count(line[COUNT]).times do |number|
110
97
  name = namify(line[NAME], number)
111
98
 
112
99
  contentview_id = @existing_contentviews[line[ORGANIZATION]][name]
@@ -1,15 +1,3 @@
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
1
  require 'hammer_cli'
14
2
  require 'hammer_cli/exit_codes'
15
3
 
@@ -1,48 +1,33 @@
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
1
  module HammerCLICsv
29
2
  class CsvCommand
30
3
  class DomainsCommand < BaseCommand
31
4
  command_name 'domains'
32
5
  desc 'import or export domains'
33
6
 
34
- FULLNAME = 'Full Name'
35
7
  ORGANIZATIONS = 'Organizations'
8
+ LOCATIONS = 'Locations'
9
+ DESCRIPTION = 'Description'
10
+ SMART_PROXY = 'DNS Smart Proxy'
11
+ PARAMETERS = 'Parameters'
12
+
13
+ SEPARATOR = ' = '
36
14
 
37
15
  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
16
+ CSV.open(option_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
17
+ csv << [NAME, ORGANIZATIONS, LOCATIONS, DESCRIPTION, SMART_PROXY, PARAMETERS]
18
+ search_options = {:per_page => 999999}
19
+ search_options['search'] = "organization=\"#{option_organization}\"" if option_organization
20
+ @api.resource(:domains).call(:index, search_options)['results'].each do |domain|
21
+ domain = @api.resource(:domains).call(:show, {'id' => domain['id']})
22
+ raise "Domain 'id=#{domain['id']}' not found" if !domain || domain.empty?
23
+
42
24
  name = domain['name']
43
- count = 1
44
- fullname = domain['fullname']
45
- csv << [name, count, fullname]
25
+ organizations = option_organization ? option_organization : export_column(domain, 'organizations', 'name')
26
+ locations = export_column(domain, 'locations', 'name')
27
+ description = domain['fullname']
28
+ capsule = foreman_smart_proxy(:id => domain['dns_id'])
29
+ parameters = export_parameters(domain['parameters'])
30
+ csv << [name, organizations, locations, description, capsule, parameters]
46
31
  end
47
32
  end
48
33
  end
@@ -59,18 +44,28 @@ module HammerCLICsv
59
44
  end
60
45
 
61
46
  def create_domains_from_csv(line)
62
- line[COUNT].to_i.times do |number|
47
+ dns_id = foreman_smart_proxy(:name => line[SMART_PROXY])
48
+ count(line[COUNT]).times do |number|
63
49
  name = namify(line[NAME], number)
50
+ description = namify(line[DESCRIPTION], number)
64
51
  if !@existing.include? name
65
52
  print "Creating domain '#{name}'..." if option_verbose?
66
53
  domain_id = @api.resource(:domains).call(:create, {
67
- 'name' => name
54
+ 'domain' => {
55
+ 'name' => name,
56
+ 'fullname' => description,
57
+ 'dns_id' => dns_id
58
+ }
68
59
  })['id']
69
60
  else
70
61
  print "Updating domain '#{name}'..." if option_verbose?
71
62
  domain_id = @api.resource(:domains).call(:update, {
72
63
  'id' => @existing[name],
73
- 'name' => name
64
+ 'domain' => {
65
+ 'name' => name,
66
+ 'fullname' => description,
67
+ 'dns_id' => dns_id
68
+ }
74
69
  })['id']
75
70
  end
76
71
 
@@ -93,11 +88,52 @@ module HammerCLICsv
93
88
  })
94
89
  end
95
90
 
91
+ import_parameters(domain_id, line[PARAMETERS])
92
+
96
93
  print "done\n" if option_verbose?
97
94
  end
98
95
  rescue RuntimeError => e
99
96
  raise "#{e}\n #{line}"
100
97
  end
98
+
99
+ private
100
+
101
+ def export_parameters(parameters)
102
+ return '' if parameters.nil? || parameters.empty?
103
+
104
+ values = CSV.generate do |column|
105
+ column << parameters.collect do |parameter|
106
+ "#{parameter['name']}#{SEPARATOR}#{parameter['value']}"
107
+ end
108
+ end
109
+ values.delete!("\n")
110
+ end
111
+
112
+ def import_parameters(domain_id, parameters)
113
+ collect_column(parameters) do |parameter|
114
+ (parameter_name, parameter_value) = parameter.split(SEPARATOR)
115
+
116
+ results = @api.resource(:parameters).call(:index, { :domain_id => domain_id, :search => "name=\"#{parameter_name}\"" })['results']
117
+ if results.empty?
118
+ @api.resource(:parameters).call(:create, {
119
+ 'domain_id' => domain_id,
120
+ 'parameter' => {
121
+ 'name' => parameter_name,
122
+ 'value' => parameter_value
123
+ }
124
+ })
125
+ else
126
+ @api.resource(:parameters).call(:create, {
127
+ 'id' => results[0]['id'],
128
+ 'domain_id' => domain_id,
129
+ 'parameter' => {
130
+ 'name' => parameter_name,
131
+ 'value' => parameter_value
132
+ }
133
+ })
134
+ end
135
+ end
136
+ end
101
137
  end
102
138
  end
103
139
  end
@@ -1,14 +1,3 @@
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
1
  require 'hammer_cli/exception_handler'
13
2
 
14
3
  module HammerCLICsv
@@ -1,24 +1,14 @@
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
1
  module HammerCLICsv
14
2
  class CsvCommand
15
3
  class ExportCommand < HammerCLI::Apipie::Command
16
4
  command_name 'export'
17
5
  desc 'export into directory'
18
6
 
19
- option %w(-v --verbose), :flag, 'be verbose'
20
- option %w(--threads), 'THREAD_COUNT', 'Number of threads to hammer with', :default => 1
21
- option '--dir', 'DIRECTORY', 'directory to import from'
7
+ option %w(-v --verbose), :flag, _('be verbose')
8
+ option %w(--threads), 'THREAD_COUNT', _('Number of threads to hammer with'),
9
+ :default => 1, :hidden => true
10
+ option '--dir', 'DIRECTORY', _('directory to import from')
11
+ option %w(--organization), 'ORGANIZATION', _('Only process organization matching this name')
22
12
 
23
13
  RESOURCES = %w(
24
14
  organizations locations puppet_environments operating_systems
@@ -32,15 +22,18 @@ module HammerCLICsv
32
22
  end
33
23
 
34
24
  def execute
35
- @server = HammerCLI::Settings.settings[:_params][:host] ||
25
+ @server = (HammerCLI::Settings.settings[:_params] &&
26
+ HammerCLI::Settings.settings[:_params][:host]) ||
36
27
  HammerCLI::Settings.get(:csv, :host) ||
37
28
  HammerCLI::Settings.get(:katello, :host) ||
38
29
  HammerCLI::Settings.get(:foreman, :host)
39
- @username = HammerCLI::Settings.settings[:_params][:username] ||
30
+ @username = (HammerCLI::Settings.settings[:_params] &&
31
+ HammerCLI::Settings.settings[:_params][:username]) ||
40
32
  HammerCLI::Settings.get(:csv, :username) ||
41
33
  HammerCLI::Settings.get(:katello, :username) ||
42
34
  HammerCLI::Settings.get(:foreman, :username)
43
- @password = HammerCLI::Settings.settings[:_params][:password] ||
35
+ @password = (HammerCLI::Settings.settings[:_params] &&
36
+ HammerCLI::Settings.settings[:_params][:password]) ||
44
37
  HammerCLI::Settings.get(:csv, :password) ||
45
38
  HammerCLI::Settings.get(:katello, :password) ||
46
39
  HammerCLI::Settings.get(:foreman, :password)
@@ -91,9 +84,10 @@ module HammerCLICsv
91
84
  options_file = self.send("option_#{resource}") || "#{option_dir}/#{resource.sub('_', '-')}.csv"
92
85
  args = []
93
86
  args += %W( --server #{@server} ) if @server
94
- args += %W( csv #{resource.sub('_', '-')} --csv-export --csv-file #{options_file} )
87
+ args += %W( csv #{resource.sub('_', '-')} --export --file #{options_file} )
95
88
  args << '-v' if option_verbose?
96
- args += %W( --threads #{option_threads} )
89
+ args += %W( --organization #{option_organization} ) if option_organization
90
+ args += %W( --threads #{option_threads} ) if option_threads
97
91
  puts "Exporting '#{args.join(' ')}'" if option_verbose?
98
92
  hammer.run(args)
99
93
  end
@@ -1,14 +1,3 @@
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
1
  require 'csv'
13
2
 
14
3
  module HammerCLICsv
@@ -1,39 +1,21 @@
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
- require 'hammer_cli'
14
- require 'json'
15
- require 'csv'
16
-
17
1
  module HammerCLICsv
18
2
  class CsvCommand
19
3
  class HostCollectionsCommand < BaseCommand
20
4
  command_name 'host-collections'
21
5
  desc 'import or export host collections'
22
6
 
23
- option %w(--organization), 'ORGANIZATION', 'Only process organization matching this name'
24
-
25
7
  ORGANIZATION = 'Organization'
26
8
  LIMIT = 'Limit'
27
9
  DESCRIPTION = 'Description'
28
10
 
29
11
  def export
30
- CSV.open(option_csv_file || '/dev/stdout', 'wb') do |csv|
31
- csv << [NAME, COUNT, ORGANIZATION, LIMIT, DESCRIPTION]
12
+ CSV.open(option_file || '/dev/stdout', 'wb') do |csv|
13
+ csv << [NAME, ORGANIZATION, LIMIT, DESCRIPTION]
32
14
  if @server_status['release'] == 'Headpin'
33
15
  @headpin.get(:organizations).each do |organization|
34
16
  next if option_organization && organization['name'] != option_organization
35
17
  @headpin.get("organizations/#{organization['label']}/system_groups").each do |systemgroup|
36
- csv << [systemgroup['name'], 1, organization['name'],
18
+ csv << [systemgroup['name'], organization['name'],
37
19
  systemgroup['max_systems'].to_i < 0 ? 'Unlimited' : systemgroup['max_systems'],
38
20
  systemgroup['description']]
39
21
  end
@@ -45,7 +27,7 @@ module HammerCLICsv
45
27
  'organization_id' => organization['id']
46
28
  })['results'].each do |hostcollection|
47
29
  limit = hostcollection['unlimited_content_hosts'] ? 'Unlimited' : hostcollection['max_content_hosts']
48
- csv << [hostcollection['name'], 1, organization['name'],
30
+ csv << [hostcollection['name'], organization['name'],
49
31
  limit,
50
32
  hostcollection['description']]
51
33
  end
@@ -75,7 +57,7 @@ module HammerCLICsv
75
57
  end
76
58
  end
77
59
 
78
- line[COUNT].to_i.times do |number|
60
+ count(line[COUNT]).times do |number|
79
61
  name = namify(line[NAME], number)
80
62
  params = {
81
63
  'organization_id' => foreman_organization(:name => line[ORGANIZATION]),
@@ -0,0 +1,115 @@
1
+ module HammerCLICsv
2
+ class CsvCommand
3
+ class HostGroupsCommand < BaseCommand
4
+ command_name 'host-groups'
5
+ desc 'import or export host-groups'
6
+
7
+ PARENT = 'Parent Host Group'
8
+ ORGANIZATIONS = 'Organizations'
9
+ LOCATIONS = 'Locations'
10
+ SUBNET = 'Subnet'
11
+ DOMAIN = 'Domain'
12
+ OPERATING_SYSTEM = 'Operating System'
13
+ ENVIRONMENT = 'Puppet Environment'
14
+ COMPUTE_PROFILE = 'Compute Profile'
15
+ PARTITION_TABLE = 'Partition Table'
16
+ MEDIUM = 'Medium'
17
+ ARCHITECTURE = 'Architecture'
18
+ REALM = 'Realm'
19
+ PUPPET_PROXY = 'Puppet Proxy'
20
+ PUPPET_CA_PROXY = 'Puppet CA Proxy'
21
+ CONTENT_SOURCE = 'Content Source'
22
+
23
+ def export
24
+ CSV.open(option_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
25
+ csv << [NAME, PARENT, ORGANIZATIONS, LOCATIONS, SUBNET, DOMAIN, OPERATING_SYSTEM,
26
+ ENVIRONMENT, COMPUTE_PROFILE, PARTITION_TABLE, MEDIUM, ARCHITECTURE, REALM,
27
+ PUPPET_PROXY, PUPPET_CA_PROXY, CONTENT_SOURCE]
28
+ search_options = {:per_page => 999999}
29
+ search_options['search'] = "organization=\"#{option_organization}\"" if option_organization
30
+ @api.resource(:hostgroups).call(:index, search_options)['results'].each do |hostgroup|
31
+ hostgroup = @api.resource(:hostgroups).call(:show, {'id' => hostgroup['id']})
32
+ raise "Host Group 'id=#{hostgroup['id']}' not found" if !hostgroup || hostgroup.empty?
33
+
34
+ name = hostgroup['name']
35
+ organizations = export_column(hostgroup, 'organizations', 'name')
36
+ locations = export_column(hostgroup, 'locations', 'name')
37
+ subnet = hostgroup['subnet_name']
38
+ operating_system = hostgroup['operatingsystem_name']
39
+ domain = hostgroup['domain_name']
40
+ puppet_environment = hostgroup['environment_name']
41
+ compute_profile = hostgroup['compute_profile_name']
42
+ partition_table = hostgroup['ptable_name']
43
+ medium = hostgroup['medium_name']
44
+ architecture = hostgroup['architecture_name']
45
+ realm = hostgroup['realm_name']
46
+ puppet_proxy = hostgroup['puppet_proxy_id'] ? foreman_host(:id => hostgroup['puppet_proxy_id']) : nil
47
+ puppet_ca_proxy = hostgroup['puppet_ca_proxy_id'] ? foreman_host(:id => hostgroup['puppet_ca_proxy_id']) : nil
48
+ # TODO: http://projects.theforeman.org/issues/7597
49
+ # content_source = hostgroup['content_source_id'] ? foreman_host(:id => hostgroup['content_source_id']) : nil
50
+ content_source = nil
51
+ parent = hostgroup['ancestry'] ? foreman_hostgroup(:id => hostgroup['ancestry']) : nil
52
+
53
+ csv << [name, parent, organizations, locations, subnet, domain, operating_system,
54
+ puppet_environment, compute_profile, partition_table, medium, architecture,
55
+ realm, puppet_proxy, puppet_ca_proxy, content_source]
56
+ end
57
+ end
58
+ end
59
+
60
+ def import
61
+ @existing = {}
62
+ @api.resource(:hostgroups).call(:index, {:per_page => 999999})['results'].each do |host|
63
+ @existing[host['name']] = host['id'] if host
64
+ end
65
+
66
+ thread_import do |line|
67
+ create_hosts_from_csv(line)
68
+ end
69
+ end
70
+
71
+ def create_hosts_from_csv(line)
72
+ return if option_organization && !CSV.parse_line(line[ORGANIZATIONS], {:skip_blanks => true}).include?(option_organization)
73
+
74
+ count(line[COUNT]).times do |number|
75
+ name = namify(line[NAME], number)
76
+ if !@existing.include? name
77
+ print "Creating host group '#{name}'..." if option_verbose?
78
+ # @api.resource(:hosts).call(:create, {
79
+ # 'host' => {
80
+ # 'name' => name,
81
+ # 'root_pass' => 'changeme',
82
+ # 'mac' => namify(line[MACADDRESS], number),
83
+ # 'organization_id' => foreman_organization(:name => line[ORGANIZATION]),
84
+ # 'location_id' => foreman_location(:name => line[LOCATION]),
85
+ # 'environment_id' => foreman_environment(:name => line[ENVIRONMENT]),
86
+ # 'operatingsystem_id' => foreman_operatingsystem(:name => line[OPERATINGSYSTEM]),
87
+ # 'architecture_id' => foreman_architecture(:name => line[ARCHITECTURE]),
88
+ # 'domain_id' => foreman_domain(:name => line[DOMAIN]),
89
+ # 'ptable_id' => foreman_partitiontable(:name => line[PARTITIONTABLE])
90
+ # }
91
+ # })
92
+ else
93
+ print "Updating host '#{name}'..." if option_verbose?
94
+ # @api.resource(:hosts).call(:update, {
95
+ # 'id' => @existing[name],
96
+ # 'host' => {
97
+ # 'name' => name,
98
+ # 'mac' => namify(line[MACADDRESS], number),
99
+ # 'organization_id' => foreman_organization(:name => line[ORGANIZATION]),
100
+ # 'environment_id' => foreman_environment(:name => line[ENVIRONMENT]),
101
+ # 'operatingsystem_id' => foreman_operatingsystem(:name => line[OPERATINGSYSTEM]),
102
+ # 'architecture_id' => foreman_architecture(:name => line[ARCHITECTURE]),
103
+ # 'domain_id' => foreman_domain(:name => line[DOMAIN]),
104
+ # 'ptable_id' => foreman_partitiontable(:name => line[PARTITIONTABLE])
105
+ # }
106
+ # })
107
+ end
108
+ print "done\n" if option_verbose?
109
+ end
110
+ rescue RuntimeError => e
111
+ raise "#{e}\n #{line}"
112
+ end
113
+ end
114
+ end
115
+ end