hammer_cli_csv 1.0.1 → 1.0.2

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 (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
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MGJkZWM3ZjQ5NzFhZmJiMGU1NDI5MDcyZGY5MjgyYWMzYzdmYjlkZQ==
4
+ NTEwYmI3Y2E5OTYxMGNhYzYwYzg2YjI2YzYyOGQ4MGJkYjkxNWNjNA==
5
5
  data.tar.gz: !binary |-
6
- NDcxOGFmM2Y0YmRkOTAzMzg2Nzg4M2MxNWEzZTEwYzIzNGVkNjNhZg==
6
+ NzM5ODc4MzE5YmE1NThkMjgyYWY2N2YwMDhjY2ZhN2YyMjE5MWRhZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZDhjYTkwMDEyYWY1MWMwNDkxNDQwNmMxZmNiODBiNWNjNmMxOTY0ZGE3Mjhi
10
- OTc2ODVmZjU3ZmE2Yjk2ZWRkM2U3NjczYjhhNmE3YjcxY2YwZmU5MzUxYmFl
11
- OGI0MjNmMTBjMWFkNDYxYzEyNzZjZmU0YjQzNmY5MGYxMWFiMjQ=
9
+ ZDQyZTliM2I3N2JkYmJmYjc4ZjExYjE4MTQ2M2JkODU1NGVkZGMzODQwMTBk
10
+ Y2Y3MmJlYzRmYzY2NGVmNWZjMGNiYmJhNTViZmFhY2M0ODA2ZTRlN2FmMmMy
11
+ NjdlZjIzYjJhMmVhNGIyMTNiNTA3ODVkYmYzZTBiMjI0MjhhZDY=
12
12
  data.tar.gz: !binary |-
13
- YmIxNmEzNWQ3MzQ5MDc0Y2U1YmQwYTkzYzdmYWViNzhkNjdjZjJhOTc4MTIw
14
- MzM2OTgxOGEzN2IxZDAzOWI1MzdiZDQ4ZTM5MmU1MjJjNDQ2ZTQwNjRkMzI0
15
- NWMwZDdiNTRmNjFiYmM4MmNlYjA1ZjdiZGZkZjQ0OWViN2FkN2U=
13
+ MmE3N2Y1MDNmZmM4ZGE0Y2FkYTgwMDhiZWY0ZjNiYWNlZDUwZmMyZDBkNjc1
14
+ YTMyZTUzMzIxZjRlMzkzYmFlZjAzYWM0MDViYzhmNDI0MzNiYzRhMWU2MGY4
15
+ MGE2NGU5YmMyOGU3NGY3MDZlNzM1ZmM4NDViMDYxOGZjM2Y3MTg=
@@ -10,6 +10,8 @@
10
10
  :log_api_calls: false
11
11
  :log_size: 5 # MB
12
12
 
13
+ :request_timeout: 120
14
+
13
15
  :foreman:
14
16
  :enable_module: true
15
17
  :host: 'http://katello:3000'
@@ -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'
13
2
  require 'hammer_cli/exit_codes'
14
3
 
@@ -24,6 +13,7 @@ module HammerCLICsv
24
13
  require 'hammer_cli_csv/architectures'
25
14
  require 'hammer_cli_csv/compute_profiles'
26
15
  require 'hammer_cli_csv/compute_resources'
16
+ require 'hammer_cli_csv/containers'
27
17
  require 'hammer_cli_csv/content_hosts'
28
18
  require 'hammer_cli_csv/content_views'
29
19
  require 'hammer_cli_csv/content_view_filters'
@@ -31,8 +21,10 @@ module HammerCLICsv
31
21
  require 'hammer_cli_csv/export'
32
22
  require 'hammer_cli_csv/host_collections'
33
23
  require 'hammer_cli_csv/hosts'
24
+ require 'hammer_cli_csv/host_groups'
34
25
  require 'hammer_cli_csv/import'
35
26
  require 'hammer_cli_csv/installation_medias'
27
+ require 'hammer_cli_csv/job_templates'
36
28
  require 'hammer_cli_csv/lifecycle_environments'
37
29
  require 'hammer_cli_csv/locations'
38
30
  require 'hammer_cli_csv/operating_systems'
@@ -45,6 +37,7 @@ module HammerCLICsv
45
37
  require 'hammer_cli_csv/puppet_reports'
46
38
  require 'hammer_cli_csv/reports'
47
39
  require 'hammer_cli_csv/roles'
40
+ require 'hammer_cli_csv/settings'
48
41
  require 'hammer_cli_csv/smart_proxies'
49
42
  require 'hammer_cli_csv/splice'
50
43
  require 'hammer_cli_csv/subnets'
@@ -1,22 +1,9 @@
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
  module HammerCLICsv
13
2
  class CsvCommand
14
3
  class ActivationKeysCommand < BaseCommand
15
4
  command_name 'activation-keys'
16
5
  desc _('import or export activation keys')
17
6
 
18
- option %w(--organization), 'ORGANIZATION', _('Only process organization matching this name')
19
-
20
7
  ORGANIZATION = 'Organization'
21
8
  DESCRIPTION = 'Description'
22
9
  LIMIT = 'Limit'
@@ -26,8 +13,8 @@ module HammerCLICsv
26
13
  SUBSCRIPTIONS = 'Subscriptions'
27
14
 
28
15
  def export
29
- CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => false}) do |csv|
30
- csv << [NAME, COUNT, ORGANIZATION, DESCRIPTION, LIMIT, ENVIRONMENT, CONTENTVIEW,
16
+ CSV.open(option_file || '/dev/stdout', 'wb', {:force_quotes => false}) do |csv|
17
+ csv << [NAME, ORGANIZATION, DESCRIPTION, LIMIT, ENVIRONMENT, CONTENTVIEW,
31
18
  HOSTCOLLECTIONS, SUBSCRIPTIONS]
32
19
  if @server_status['release'] == 'Headpin'
33
20
  @headpin.get(:organizations).each do |organization|
@@ -35,7 +22,6 @@ module HammerCLICsv
35
22
 
36
23
  @headpin.get("organizations/#{organization['label']}/activation_keys").each do |activationkey|
37
24
  name = namify(activationkey['name'])
38
- count = 1
39
25
  description = activationkey['description']
40
26
  limit = activationkey['usage_limit'].to_i < 0 ? 'Unlimited' : activationkey['usage_limit']
41
27
  environment = @headpin.environment(activationkey['environment_id'])['name']
@@ -50,7 +36,7 @@ module HammerCLICsv
50
36
  end
51
37
  end
52
38
  subscriptions.delete!("\n")
53
- csv << [name, count, organization['label'], description, limit, environment, contentview,
39
+ csv << [name, organization['label'], description, limit, environment, contentview,
54
40
  hostcollections, subscriptions]
55
41
  end
56
42
  end
@@ -111,7 +97,7 @@ module HammerCLICsv
111
97
  end
112
98
  end
113
99
 
114
- line[COUNT].to_i.times do |number|
100
+ count(line[COUNT]).times do |number|
115
101
  name = namify(line[NAME], number)
116
102
 
117
103
  params = {
@@ -146,9 +132,9 @@ module HammerCLICsv
146
132
  if line[HOSTCOLLECTIONS] && line[HOSTCOLLECTIONS] != ''
147
133
  # TODO: note that existing system groups are not removed
148
134
  CSV.parse_line(line[HOSTCOLLECTIONS], {:skip_blanks => true}).each do |name|
149
- @api.resource(:host_collections).call(:add_activation_keys, {
150
- 'id' => katello_hostcollection(line[ORGANIZATION], :name => name),
151
- 'activation_key_ids' => [activationkey['id']]
135
+ @api.resource(:activation_keys).call(:add_host_collections, {
136
+ 'id' => activationkey['id'],
137
+ 'host_collection_ids' => [katello_hostcollection(line[ORGANIZATION], :name => name)]
152
138
  })
153
139
  end
154
140
  end
@@ -1,30 +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
- #
13
- # -= Architectures CSV =-
14
- #
15
- # Columns
16
- # Name
17
- # - Architecture 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 ArchitecturesCommand < BaseCommand
@@ -34,17 +7,13 @@ module HammerCLICsv
34
7
  OPERATINGSYSTEMS = 'Operating Systems'
35
8
 
36
9
  def export
37
- CSV.open(option_csv_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
38
- csv << [NAME, COUNT, ORGANIZATIONS, OPERATINGSYSTEMS]
10
+ CSV.open(option_file || '/dev/stdout', 'wb', {:force_quotes => true}) do |csv|
11
+ csv << [NAME, OPERATINGSYSTEMS]
39
12
  @api.resource(:architectures).call(:index, {:per_page => 999999})['results'].each do |architecture|
13
+ architecture = @api.resource(:architectures).call(:show, {:id => architecture['id']})
40
14
  name = architecture['name']
41
- count = 1
42
- # TODO: http://projects.theforeman.org/issues/4198
43
- #operatingsystems = architecture['operatingsystem_ids'].collect do |operatingsystem_id|
44
- # foreman_operatingsystem(:id => operatingsystem_id)
45
- #end.join(',')
46
- operatingsystems = ''
47
- csv << [name, count, operatingsystems]
15
+ operatingsystems = export_column(architecture, 'operatingsystems', 'title')
16
+ csv << [name, operatingsystems]
48
17
  end
49
18
  end
50
19
  end
@@ -61,7 +30,7 @@ module HammerCLICsv
61
30
  end
62
31
 
63
32
  def create_architectures_from_csv(line)
64
- line[COUNT].to_i.times do |number|
33
+ count(line[COUNT]).times do |number|
65
34
  name = namify(line[NAME], number)
66
35
  architecture_id = @existing[name]
67
36
  operatingsystem_ids = CSV.parse_line(line[OPERATINGSYSTEMS]).collect do |operatingsystem_name|
@@ -1,17 +1,7 @@
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 'apipie-bindings'
13
2
  require 'hammer_cli'
14
3
  require 'json'
4
+ require 'open-uri'
15
5
  require 'csv'
16
6
  require 'hammer_cli_csv/csv'
17
7
 
@@ -19,24 +9,37 @@ require 'hammer_cli_csv/csv'
19
9
  module HammerCLICsv
20
10
  class BaseCommand < HammerCLI::Apipie::Command
21
11
  option %w(-v --verbose), :flag, 'be verbose'
22
- option %w(--threads), 'THREAD_COUNT', 'Number of threads to hammer with', :default => 1
23
- option %w(--csv-export), :flag, 'Export current data instead of importing'
24
- option %w(--csv-file), 'FILE_NAME', 'CSV file (default to /dev/stdout with --csv-export, otherwise required)'
12
+ option %w(--threads), 'THREAD_COUNT', 'Number of threads to hammer with',
13
+ :default => 1, :hidden => true
14
+ option %w(--export), :flag, 'Export current data instead of importing'
15
+ option %w(--file), 'FILE_NAME', 'CSV file (default to /dev/stdout with --csv-export, otherwise required)'
25
16
  option %w(--prefix), 'PREFIX', 'Prefix for all name columns'
17
+ option %w(--organization), 'ORGANIZATION', _('Only process organization matching this name')
18
+
19
+ option %w(--csv-file), 'FILE_NAME', 'Option --csv-file is deprecated. Use --file',
20
+ :deprecated => "Use --file", :hidden => true,
21
+ :attribute_name => :option_file
22
+ option %w(--csv-export), :flag, 'Option --csv-export is deprecated. Use --export',
23
+ :deprecated => "Use --export", :hidden => true,
24
+ :attribute_name => :option_export
25
+
26
26
 
27
27
  NAME = 'Name'
28
28
  COUNT = 'Count'
29
29
 
30
30
  def execute
31
- @server = HammerCLI::Settings.settings[:_params][:host] ||
31
+ @server = (HammerCLI::Settings.settings[:_params] &&
32
+ HammerCLI::Settings.settings[:_params][:host]) ||
32
33
  HammerCLI::Settings.get(:csv, :host) ||
33
34
  HammerCLI::Settings.get(:katello, :host) ||
34
35
  HammerCLI::Settings.get(:foreman, :host)
35
- @username = HammerCLI::Settings.settings[:_params][:username] ||
36
+ @username = (HammerCLI::Settings.settings[:_params] &&
37
+ HammerCLI::Settings.settings[:_params][:username]) ||
36
38
  HammerCLI::Settings.get(:csv, :username) ||
37
39
  HammerCLI::Settings.get(:katello, :username) ||
38
40
  HammerCLI::Settings.get(:foreman, :username)
39
- @password = HammerCLI::Settings.settings[:_params][:password] ||
41
+ @password = (HammerCLI::Settings.settings[:_params] &&
42
+ HammerCLI::Settings.settings[:_params][:password]) ||
40
43
  HammerCLI::Settings.get(:csv, :password) ||
41
44
  HammerCLI::Settings.get(:katello, :password) ||
42
45
  HammerCLI::Settings.get(:foreman, :password)
@@ -58,7 +61,7 @@ module HammerCLICsv
58
61
  })
59
62
  end
60
63
 
61
- option_csv_export? ? export : import
64
+ option_export? ? export : import
62
65
  HammerCLI::EX_OK
63
66
  end
64
67
 
@@ -91,6 +94,7 @@ module HammerCLICsv
91
94
  end
92
95
 
93
96
  def namify(name_format, number = 0)
97
+ return '' unless name_format
94
98
  if name_format.index('%')
95
99
  name = name_format % number
96
100
  else
@@ -105,13 +109,13 @@ module HammerCLICsv
105
109
  end
106
110
 
107
111
  def thread_import(return_headers = false, filename=nil, name_column=nil)
108
- filename ||= option_csv_file || '/dev/stdin'
112
+ filename ||= option_file || '/dev/stdin'
109
113
  csv = []
110
- CSV.foreach(filename, {
114
+ CSV.new(open(filename), {
111
115
  :skip_blanks => true,
112
116
  :headers => :first_row,
113
117
  :return_headers => return_headers
114
- }) do |line|
118
+ }).each do |line|
115
119
  csv << line
116
120
  end
117
121
  lines_per_thread = csv.length / option_threads.to_i + 1
@@ -480,6 +484,99 @@ module HammerCLICsv
480
484
  result
481
485
  end
482
486
 
487
+ def foreman_host(options = {})
488
+ @query_hosts ||= {}
489
+
490
+ if options[:name]
491
+ return nil if options[:name].nil? || options[:name].empty?
492
+ options[:id] = @query_hosts[options[:name]]
493
+ if !options[:id]
494
+ host = @api.resource(:hosts).call(:index, {
495
+ :per_page => 999999,
496
+ 'search' => "name=\"#{options[:name]}\""
497
+ })['results']
498
+ raise "Host '#{options[:name]}' not found" if !host || host.empty?
499
+ options[:id] = host[0]['id']
500
+ @query_hosts[options[:name]] = options[:id]
501
+ end
502
+ result = options[:id]
503
+ else
504
+ return nil if options[:id].nil?
505
+ options[:name] = @query_hosts.key(options[:id])
506
+ if !options[:name]
507
+ host = @api.resource(:hosts).call(:show, {'id' => options[:id]})
508
+ raise "Host 'id=#{options[:id]}' not found" if !host || host.empty?
509
+ options[:name] = host['name']
510
+ @query_hosts[options[:name]] = options[:id]
511
+ end
512
+ result = options[:name]
513
+ end
514
+
515
+ result
516
+ end
517
+
518
+ def foreman_hostgroup(options = {})
519
+ @query_hostgroups ||= {}
520
+
521
+ if options[:name]
522
+ return nil if options[:name].nil? || options[:name].empty?
523
+ options[:id] = @query_hostgroups[options[:name]]
524
+ if !options[:id]
525
+ hostgroup = @api.resource(:hostgroups).call(:index, {
526
+ :per_page => 999999,
527
+ 'search' => "name=\"#{options[:name]}\""
528
+ })['results']
529
+ raise "Host Group '#{options[:name]}' not found" if !hostgroup || hostgroup.empty?
530
+ options[:id] = hostgroup[0]['id']
531
+ @query_hostgroups[options[:name]] = options[:id]
532
+ end
533
+ result = options[:id]
534
+ else
535
+ return nil if options[:id].nil?
536
+ options[:name] = @query_hostgroups.key(options[:id])
537
+ if !options[:name]
538
+ hostgroup = @api.resource(:hostgroups).call(:show, {'id' => options[:id]})
539
+ raise "Host Group 'id=#{options[:id]}' not found" if !hostgroup || hostgroup.empty?
540
+ options[:name] = hostgroup['name']
541
+ @query_hostgroups[options[:name]] = options[:id]
542
+ end
543
+ result = options[:name]
544
+ end
545
+
546
+ result
547
+ end
548
+
549
+ def foreman_smart_proxy(options = {})
550
+ @query_smart_proxies ||= {}
551
+
552
+ if options[:name]
553
+ return nil if options[:name].nil? || options[:name].empty?
554
+ options[:id] = @query_smart_proxies[options[:name]]
555
+ if !options[:id]
556
+ smart_proxy = @api.resource(:smart_proxies).call(:index, {
557
+ :per_page => 999999,
558
+ 'search' => "name=\"#{options[:name]}\""
559
+ })['results']
560
+ raise "Smart Proxy '#{options[:name]}' not found" if !smart_proxy || smart_proxy.empty?
561
+ options[:id] = smart_proxy[0]['id']
562
+ @query_smart_proxies[options[:name]] = options[:id]
563
+ end
564
+ result = options[:id]
565
+ else
566
+ return nil if options[:id].nil?
567
+ options[:name] = @query_smart_proxies.key(options[:id])
568
+ if !options[:name]
569
+ smart_proxy = @api.resource(:smart_proxies).call(:show, {'id' => options[:id]})
570
+ raise "Smart Proxy 'id=#{options[:id]}' not found" if !smart_proxy || smart_proxy.empty?
571
+ options[:name] = smart_proxy['name']
572
+ @query_smart_proxies[options[:name]] = options[:id]
573
+ end
574
+ result = options[:name]
575
+ end
576
+
577
+ result
578
+ end
579
+
483
580
  def lifecycle_environment(organization, options = {})
484
581
  @lifecycle_environments ||= {}
485
582
  @lifecycle_environments[organization] ||= {
@@ -715,6 +812,38 @@ module HammerCLICsv
715
812
  result
716
813
  end
717
814
 
815
+ def foreman_container(options = {})
816
+ @containers ||= {}
817
+
818
+ if options[:name]
819
+ return nil if options[:name].nil? || options[:name].empty?
820
+ options[:id] = @containers[options[:name]]
821
+ if !options[:id]
822
+ container = @api.resource(:containers).call(:index, {
823
+ :per_page => 999999,
824
+ 'search' => "name=\"#{options[:name]}\""
825
+ })['results']
826
+ raise "Container '#{options[:name]}' not found" if !container || container.empty?
827
+ options[:id] = container[0]['id']
828
+ @containers[options[:name]] = options[:id]
829
+ end
830
+ result = options[:id]
831
+ else
832
+ return nil if options[:id].nil?
833
+ options[:name] = @containers.key(options[:id])
834
+ if !options[:name]
835
+ container = @api.resource(:containers).call(:show, {'id' => options[:id]})
836
+ raise "Container 'id=#{options[:id]}' not found" if !container || container.empty?
837
+ options[:name] = container['name']
838
+ @containers[options[:name]] = options[:id]
839
+ end
840
+ result = options[:name]
841
+ end
842
+
843
+ result
844
+ end
845
+
846
+
718
847
  def build_os_name(name, major, minor)
719
848
  name += " #{major}" if major && major != ''
720
849
  name += ".#{minor}" if minor && minor != ''
@@ -804,6 +933,33 @@ module HammerCLICsv
804
933
  end if locations && !locations.empty?
805
934
  end
806
935
 
936
+ def apipie_check_param(resource, action, name)
937
+ method = @api.resource(pluralize(resource).to_sym).apidoc[:methods].detect do |api_method|
938
+ api_method[:name] == action.to_s
939
+ end
940
+ return false unless method
941
+
942
+ found = method[:params].detect do |param|
943
+ param[:full_name] == name
944
+ end
945
+ if !found
946
+ nested = method[:params].detect do |param|
947
+ param[:name] == resource.to_s
948
+ end
949
+ if nested
950
+ found = nested[:params].detect do |param|
951
+ param[:full_name] == name
952
+ end
953
+ end
954
+ end
955
+ found
956
+ end
957
+
958
+ def count(value)
959
+ return 1 if value.nil? || value.empty?
960
+ value.to_i
961
+ end
962
+
807
963
  private
808
964
 
809
965
  def search_string(resource, name)