hammer_cli_foreman 0.16.0 → 0.17.0

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 (70) hide show
  1. checksums.yaml +5 -5
  2. data/doc/release_notes.md +13 -0
  3. data/lib/hammer_cli_foreman.rb +4 -0
  4. data/lib/hammer_cli_foreman/common_parameter.rb +4 -0
  5. data/lib/hammer_cli_foreman/compute_attribute.rb +318 -0
  6. data/lib/hammer_cli_foreman/compute_profile.rb +61 -0
  7. data/lib/hammer_cli_foreman/compute_resource.rb +29 -13
  8. data/lib/hammer_cli_foreman/compute_resource/base.rb +12 -0
  9. data/lib/hammer_cli_foreman/compute_resource/ec2.rb +24 -0
  10. data/lib/hammer_cli_foreman/compute_resource/gce.rb +23 -0
  11. data/lib/hammer_cli_foreman/compute_resource/help_utils.rb +34 -0
  12. data/lib/hammer_cli_foreman/compute_resource/libvirt.rb +49 -0
  13. data/lib/hammer_cli_foreman/compute_resource/openstack.rb +25 -0
  14. data/lib/hammer_cli_foreman/compute_resource/ovirt.rb +47 -0
  15. data/lib/hammer_cli_foreman/compute_resource/rackspace.rb +22 -0
  16. data/lib/hammer_cli_foreman/compute_resource/register_compute_resources.rb +20 -0
  17. data/lib/hammer_cli_foreman/compute_resource/vmware.rb +68 -0
  18. data/lib/hammer_cli_foreman/host.rb +4 -11
  19. data/lib/hammer_cli_foreman/hostgroup.rb +9 -0
  20. data/lib/hammer_cli_foreman/hosts/common_update_help.rb +1 -7
  21. data/lib/hammer_cli_foreman/hosts/common_update_options.rb +1 -1
  22. data/lib/hammer_cli_foreman/id_resolver.rb +3 -1
  23. data/lib/hammer_cli_foreman/parameter.rb +7 -0
  24. data/lib/hammer_cli_foreman/references.rb +8 -0
  25. data/lib/hammer_cli_foreman/report_template.rb +79 -0
  26. data/lib/hammer_cli_foreman/smart_variable.rb +1 -2
  27. data/lib/hammer_cli_foreman/version.rb +1 -1
  28. data/locale/ca/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  29. data/locale/de/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  30. data/locale/en/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  31. data/locale/en_GB/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  32. data/locale/es/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  33. data/locale/fr/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  34. data/locale/it/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  35. data/locale/ja/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  36. data/locale/ko/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  37. data/locale/pt_BR/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  38. data/locale/ru/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  39. data/locale/zh_CN/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  40. data/locale/zh_TW/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  41. data/test/data/1.21/foreman_api.json +1 -0
  42. data/test/data/1.22/foreman_api.json +1 -0
  43. data/test/functional/compute_attribute_test.rb +654 -0
  44. data/test/functional/compute_profile_test.rb +99 -0
  45. data/test/functional/compute_resource_test.rb +42 -18
  46. data/test/functional/location_test.rb +6 -5
  47. data/test/functional/organization_test.rb +6 -5
  48. data/test/functional/report_template_test.rb +107 -7
  49. data/test/test_helper.rb +1 -1
  50. data/test/unit/common_parameter_test.rb +17 -5
  51. data/test/unit/domain_test.rb +2 -0
  52. data/test/unit/host_test.rb +1 -0
  53. data/test/unit/hostgroup_test.rb +14 -1
  54. data/test/unit/operating_system_test.rb +1 -0
  55. metadata +25 -20
  56. data/lib/hammer_cli_foreman/compute_resources/all.rb +0 -7
  57. data/lib/hammer_cli_foreman/compute_resources/ec2.rb +0 -9
  58. data/lib/hammer_cli_foreman/compute_resources/ec2/host_help_extenstion.rb +0 -23
  59. data/lib/hammer_cli_foreman/compute_resources/gce.rb +0 -9
  60. data/lib/hammer_cli_foreman/compute_resources/gce/host_help_extenstion.rb +0 -22
  61. data/lib/hammer_cli_foreman/compute_resources/libvirt.rb +0 -9
  62. data/lib/hammer_cli_foreman/compute_resources/libvirt/host_help_extenstion.rb +0 -35
  63. data/lib/hammer_cli_foreman/compute_resources/openstack.rb +0 -9
  64. data/lib/hammer_cli_foreman/compute_resources/openstack/host_help_extenstion.rb +0 -23
  65. data/lib/hammer_cli_foreman/compute_resources/ovirt.rb +0 -9
  66. data/lib/hammer_cli_foreman/compute_resources/ovirt/host_help_extenstion.rb +0 -36
  67. data/lib/hammer_cli_foreman/compute_resources/rackspace.rb +0 -9
  68. data/lib/hammer_cli_foreman/compute_resources/rackspace/host_help_extenstion.rb +0 -20
  69. data/lib/hammer_cli_foreman/compute_resources/vmware.rb +0 -9
  70. data/lib/hammer_cli_foreman/compute_resources/vmware/host_help_extenstion.rb +0 -66
@@ -0,0 +1,12 @@
1
+ module HammerCLIForeman
2
+ module ComputeResources
3
+ class Base
4
+ attr_reader :name
5
+ def compute_attributes; []; end
6
+ def interface_attributes; []; end
7
+ def volume_attributes; []; end
8
+ def interfaces_attrs_name; "interfaces_attributes" ; end
9
+ def mandatory_resource_options; [:name, :provider]; end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,24 @@
1
+ module HammerCLIForeman
2
+ module ComputeResources
3
+ class EC2 < Base
4
+ def name
5
+ _('EC2')
6
+ end
7
+
8
+ def compute_attributes
9
+ [
10
+ 'flavor_id',
11
+ 'image_id',
12
+ 'availability_zone',
13
+ 'security_group_ids',
14
+ 'managed_ip'
15
+ ]
16
+ end
17
+
18
+ def mandatory_resource_options
19
+ super + [:region, :user, :password]
20
+ end
21
+ end
22
+ HammerCLIForeman.register_compute_resource('ec2', EC2.new )
23
+ end
24
+ end
@@ -0,0 +1,23 @@
1
+ module HammerCLIForeman
2
+ module ComputeResources
3
+ class GCE < Base
4
+ def name
5
+ _('GCE')
6
+ end
7
+
8
+ def compute_attributes
9
+ [
10
+ 'machine_type',
11
+ 'image_id',
12
+ 'network',
13
+ 'external_ip'
14
+ ]
15
+ end
16
+
17
+ def interfaces_attrs_name
18
+ "network_interfaces_nics_attributes"
19
+ end
20
+ end
21
+ HammerCLIForeman.register_compute_resource('gce', GCE.new)
22
+ end
23
+ end
@@ -0,0 +1,34 @@
1
+ module HammerCLIForeman
2
+ module ComputeResources
3
+ def self.extend_help(h, attributes, add_host_specific_attrs: false )
4
+ h.section _('Provider specific options') do |h|
5
+ ::HammerCLIForeman.compute_resources.each do |name, provider|
6
+ h.section name do |h|
7
+ if add_host_specific_attrs and defined?(provider.host_attributes) and defined?(provider.interface_attributes)
8
+ host_interfaces = provider.interface_attributes + provider.host_attributes
9
+ end
10
+ if attributes == :all || attributes == :volume
11
+ h.section '--volume' do |h|
12
+ h.list(provider.volume_attributes) if defined?(provider.volume_attributes)
13
+ end
14
+ end
15
+ if attributes == :all || attributes == :interface
16
+ h.section '--interface' do |h|
17
+ if host_interfaces
18
+ h.list(host_interfaces)
19
+ else
20
+ h.list(provider.interface_attributes) if defined?(provider.interface_attributes)
21
+ end
22
+ end
23
+ end
24
+ if attributes == :all || attributes == :compute
25
+ h.section '--compute-attributes' do |h|
26
+ h.list(provider.compute_attributes) if defined?(provider.compute_attributes)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,49 @@
1
+ module HammerCLIForeman
2
+ module ComputeResources
3
+ class Libvirt < Base
4
+ def name
5
+ _('Libvirt')
6
+ end
7
+
8
+ def compute_attributes
9
+ [
10
+ ['cpus', _('Number of CPUs')],
11
+ ['memory', _('String, amount of memory, value in bytes')],
12
+ ['start', _('Boolean (expressed as 0 or 1), whether to start the machine or not')]
13
+ ]
14
+ end
15
+
16
+ def host_attributes
17
+ [
18
+ ['start', _('Boolean (expressed as 0 or 1), whether to start the machine or not')]
19
+ ]
20
+ end
21
+
22
+ def interface_attributes
23
+ [
24
+ ['type', _('Possible values: %s') % 'bridge, network'],
25
+ ['bridge', _('Name of interface according to type')],
26
+ ['model', _('Possible values: %s') % 'virtio, rtl8139, ne2k_pci, pcnet, e1000']
27
+ ]
28
+ end
29
+
30
+ def volume_attributes
31
+ [
32
+ ['pool_name', _('One of available storage pools')],
33
+ ['capacity', _('String value, eg. 10G')],
34
+ ['format_type', _('Possible values: %s') % 'raw, qcow2']
35
+ ]
36
+ end
37
+
38
+ def interfaces_attrs_name
39
+ "nics_attributes"
40
+ end
41
+
42
+ def mandatory_resource_options
43
+ super + [:url]
44
+ end
45
+
46
+ end
47
+ HammerCLIForeman.register_compute_resource('libvirt', Libvirt.new)
48
+ end
49
+ end
@@ -0,0 +1,25 @@
1
+ module HammerCLIForeman
2
+ module ComputeResources
3
+ class OpenStack < Base
4
+ def name
5
+ _('OpenStack')
6
+ end
7
+
8
+ def compute_attributes
9
+ [
10
+ 'flavor_ref',
11
+ 'image_ref',
12
+ 'tenant_id',
13
+ 'security_groups',
14
+ 'network'
15
+ ]
16
+ end
17
+
18
+ def mandatory_resource_options
19
+ super + [:url, :user, :password]
20
+ end
21
+
22
+ end
23
+ HammerCLIForeman.register_compute_resource('openstack', OpenStack.new)
24
+ end
25
+ end
@@ -0,0 +1,47 @@
1
+ module HammerCLIForeman
2
+ module ComputeResources
3
+ class Ovirt < Base
4
+ def name
5
+ _('oVirt')
6
+ end
7
+
8
+ def compute_attributes
9
+ [
10
+ ['cluster', _('ID of cluster to use')],
11
+ ['template', _('Hardware profile to use')],
12
+ ['cores', _('Integer value, number of cores')],
13
+ ['memory', _('Amount of memory, integer value in bytes')],
14
+ ]
15
+ end
16
+
17
+ def host_attributes
18
+ [
19
+ ['start', _('Boolean (expressed as 0 or 1), whether to start the machine or not')]
20
+
21
+ ]
22
+ end
23
+
24
+ def interface_attributes
25
+ [
26
+ ['name', _('compute name, Eg. eth0')],
27
+ ['network', _('Select one of available networks for a cluster, must be an ID')],
28
+ ['interface', ('interface type')]
29
+ ]
30
+ end
31
+
32
+ def volume_attributes;
33
+ [
34
+ ['size_gb', _('Volume size in GB, integer value')],
35
+ ['storage_domain', _('ID of storage domain')],
36
+ ['bootable', _('Boolean, only one volume can be bootable')]
37
+ ]
38
+ end
39
+
40
+ def mandatory_resource_options
41
+ super + [:url, :user, :password, :datacenter]
42
+ end
43
+
44
+ end
45
+ HammerCLIForeman.register_compute_resource('ovirt', Ovirt.new)
46
+ end
47
+ end
@@ -0,0 +1,22 @@
1
+ module HammerCLIForeman
2
+ module ComputeResources
3
+ class Rackspace < Base
4
+ def name
5
+ _('Rackspace')
6
+ end
7
+
8
+ def compute_attributes
9
+ [
10
+ 'flavor_id',
11
+ 'image_id'
12
+ ]
13
+ end
14
+
15
+ def mandatory_resource_options
16
+ super + [:url]
17
+ end
18
+
19
+ end
20
+ HammerCLIForeman.register_compute_resource('rackspace', Rackspace.new)
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ module HammerCLIForeman
2
+ @compute_resources = {}
3
+ def self.compute_resources
4
+ @compute_resources
5
+ end
6
+
7
+ def self.register_compute_resource(name, compute_resource)
8
+ @compute_resources[name] = compute_resource
9
+ end
10
+
11
+
12
+ require 'hammer_cli_foreman/compute_resource/base'
13
+ require 'hammer_cli_foreman/compute_resource/ec2.rb'
14
+ require 'hammer_cli_foreman/compute_resource/gce.rb'
15
+ require 'hammer_cli_foreman/compute_resource/libvirt.rb'
16
+ require 'hammer_cli_foreman/compute_resource/openstack.rb'
17
+ require 'hammer_cli_foreman/compute_resource/ovirt.rb'
18
+ require 'hammer_cli_foreman/compute_resource/rackspace.rb'
19
+ require 'hammer_cli_foreman/compute_resource/vmware.rb'
20
+ end
@@ -0,0 +1,68 @@
1
+ module HammerCLIForeman
2
+ module ComputeResources
3
+ class VMware < Base
4
+ INTERFACE_TYPES = %w(
5
+ VirtualVmxnet3,
6
+ VirtualE1000
7
+ )
8
+
9
+ def name
10
+ _('VMware')
11
+ end
12
+
13
+ def compute_attributes
14
+ [
15
+ ['cpus', _('CPU count')],
16
+ ['corespersocket', _('Number of cores per socket (applicable to hardware versions < 10 only)')],
17
+ ['memory_mb', _('Integer number, amount of memory in MB')],
18
+ ['firmware', 'automatic/bios/efi'],
19
+ ['cluster', _('Cluster ID from VMware')],
20
+ ['resource_pool', _('Resource Pool ID from VMware')],
21
+ ['path', _('Path to folder')],
22
+ ['guest_id', _('Guest OS ID form VMware')],
23
+ ['scsi_controller_type', _('ID of the controller from VMware')],
24
+ ['hardware_version', _('Hardware version ID from VMware')],
25
+ ['add_cdrom', _('Must be a 1 or 0, Add a CD-ROM drive to the virtual machine')],
26
+ ['cpuHotAddEnabled', _('Must be a 1 or 0, lets you add memory resources while the machine is on')],
27
+ ['memoryHotAddEnabled', _('Must be a 1 or 0, lets you add CPU resources while the machine is on')],
28
+ ['annotation', _("Annotation Notes")]
29
+ ]
30
+ end
31
+
32
+ def host_attributes
33
+ [
34
+ ['start', _("Must be a 1 or 0, whether to start the machine or not")],
35
+ ]
36
+ end
37
+
38
+ def interface_attributes
39
+ [
40
+ ['compute_type', [
41
+ _('Type of the network adapter, for example one of:'),
42
+ INTERFACE_TYPES.map { |it| ' ' + it },
43
+ _('See documentation center for your version of vSphere to find more details about available adapter types:'),
44
+ ' https://www.vmware.com/support/pubs/'].flatten(1).join("\n") ] ,
45
+ ['compute_network', _('Network ID from VMware')]
46
+ ]
47
+ end
48
+
49
+ def volume_attributes;
50
+ [
51
+ ['name'],
52
+ ['storage_pod', _('Storage Pod ID from VMware')],
53
+ ['datastore', _('Datastore ID from VMware')],
54
+ ['size_gb', _('Integer number, volume size in GB')],
55
+ ['thin', 'true/false'],
56
+ ['eager_zero', 'true/false'],
57
+ ['mode', 'persistent/independent_persistent/independent_nonpersistent']
58
+ ]
59
+ end
60
+
61
+ def mandatory_resource_options
62
+ super + [:user, :password, :datacenter, :server]
63
+
64
+ end
65
+ end
66
+ HammerCLIForeman.register_compute_resource('vmware', VMware.new)
67
+ end
68
+ end
@@ -6,6 +6,8 @@ require 'hammer_cli_foreman/smart_variable'
6
6
  require 'hammer_cli_foreman/interface'
7
7
  require 'hammer_cli_foreman/hosts/common_update_options'
8
8
  require 'hammer_cli_foreman/hosts/common_update_help'
9
+ require 'hammer_cli_foreman/compute_resource/register_compute_resources'
10
+ require 'hammer_cli_foreman/compute_resource/help_utils'
9
11
 
10
12
  require 'highline/import'
11
13
 
@@ -16,14 +18,6 @@ module HammerCLIForeman
16
18
 
17
19
  resource :hosts
18
20
 
19
- def self.extend_cr_help(cr)
20
- cr_help_extensions[cr.name] = cr.method(:host_create_help)
21
- end
22
-
23
- def self.cr_help_extensions
24
- @cr_help_extensions ||= {}
25
- end
26
-
27
21
  class ListCommand < HammerCLIForeman::ListCommand
28
22
  # FIXME: list compute resource (model)
29
23
  output do
@@ -70,6 +64,7 @@ module HammerCLIForeman
70
64
 
71
65
  field :installed_at, _("Installed at"), Fields::Date
72
66
  field :last_report, _("Last report"), Fields::Date
67
+ field :uptime_seconds, _("Uptime (seconds)"), Fields::Field, :hide_blank => true
73
68
 
74
69
  label _("Status") do
75
70
  field :global_status_label, _("Global Status")
@@ -325,7 +320,7 @@ module HammerCLIForeman
325
320
 
326
321
 
327
322
  class SetParameterCommand < HammerCLIForeman::Parameter::SetCommand
328
- desc _("Create or update parameter for a host")
323
+ desc _("Create or append a parameter for a host")
329
324
 
330
325
  success_message_for :update, _("Host parameter updated")
331
326
  success_message_for :create, _("New host parameter created")
@@ -521,5 +516,3 @@ module HammerCLIForeman
521
516
  subcommand 'interface', HammerCLIForeman::Interface.desc, HammerCLIForeman::Interface
522
517
  end
523
518
  end
524
-
525
- require 'hammer_cli_foreman/compute_resources/all'
@@ -190,6 +190,15 @@ module HammerCLIForeman
190
190
  end
191
191
  end
192
192
 
193
+ class RebuildConfigCommand < HammerCLIForeman::SingleResourceCommand
194
+ action :rebuild_config
195
+ command_name "rebuild-config"
196
+ success_message _('Configuration successfully rebuilt.')
197
+ failure_message _('Could not rebuild configuration')
198
+
199
+ build_options
200
+ end
201
+
193
202
  autoload_subcommands
194
203
  end
195
204
 
@@ -39,13 +39,7 @@ module HammerCLIForeman
39
39
  end
40
40
  end
41
41
 
42
- h.section _('Provider specific options') do |h|
43
- HammerCLIForeman::Host.cr_help_extensions.each do |name, help|
44
- h.section name do |h|
45
- help.call(h)
46
- end
47
- end
48
- end
42
+ ::HammerCLIForeman::ComputeResources.extend_help(h, :all, add_host_specific_attrs: true )
49
43
  end
50
44
  end
51
45
  end
@@ -28,7 +28,7 @@ module HammerCLIForeman
28
28
  bme_options[:format] = HammerCLI::Options::Normalizers::Bool.new
29
29
  base.option "--overwrite", "OVERWRITE", " ", bme_options
30
30
 
31
- base.option "--parameters", "PARAMS", _("Host parameters"),
31
+ base.option "--parameters", "PARAMS", _("Replaces with new host parameters"),
32
32
  :format => HammerCLI::Options::Normalizers::KeyValueList.new
33
33
  base.option "--compute-attributes", "COMPUTE_ATTRS", _("Compute resource attributes"),
34
34
  :format => HammerCLI::Options::Normalizers::KeyValueList.new
@@ -36,6 +36,7 @@ module HammerCLIForeman
36
36
  :architecture => [ s_name(_("Architecture name")) ],
37
37
  :audit => [],
38
38
  :compute_resource => [ s_name(_("Compute resource name")) ],
39
+ :compute_profile => [ s_name(_("Compute profile name")) ],
39
40
  :domain => [ s_name(_("Domain name")) ],
40
41
  :environment => [ s_name(_("Environment name")) ],
41
42
  :fact_value => [],
@@ -62,7 +63,8 @@ module HammerCLIForeman
62
63
  :common_parameter => [ s_name(_("Common parameter name")) ],
63
64
  :smart_class_parameter => [ s_name(_("Smart class parameter name"), :editable => false) ],
64
65
  :smart_variable => [ s("variable", _("Smart variable name")) ],
65
- :template_combination => []
66
+ :template_combination => [],
67
+ :compute_attribute => []
66
68
  }
67
69
  DEFAULT_SEARCHABLES = [ s_name(_("Name to search by")) ]
68
70
 
@@ -4,6 +4,8 @@ module HammerCLIForeman
4
4
 
5
5
  module Parameter
6
6
 
7
+ KEY_TYPES = ['string', 'boolean', 'integer', 'real', 'array', 'hash', 'yaml', 'json']
8
+
7
9
  class AbstractParameterCommand < HammerCLIForeman::Command
8
10
 
9
11
  def self.parameter_resource
@@ -48,6 +50,9 @@ module HammerCLIForeman
48
50
  class SetCommand < AbstractParameterCommand
49
51
  option "--name", "NAME", _("Parameter name"), :required => true
50
52
  option "--value", "VALUE", _("Parameter value"), :required => true
53
+ option "--parameter-type", "PARAMETER_TYPE", _("Type of the parameter"),
54
+ :default => 'string',
55
+ :format => HammerCLI::Options::Normalizers::Enum.new(Parameter::KEY_TYPES)
51
56
  option "--hidden-value", "HIDDEN_VALUE", _("Should the value be hidden"), :format => HammerCLI::Options::Normalizers::Bool.new
52
57
 
53
58
  def self.command_name(name=nil)
@@ -74,6 +79,7 @@ module HammerCLIForeman
74
79
  "id" => get_parameter_identifier,
75
80
  "parameter" => {
76
81
  "value" => option_value,
82
+ "parameter_type" => option_parameter_type,
77
83
  "hidden_value" => option_hidden_value
78
84
  }
79
85
  }.merge(base_action_params)
@@ -85,6 +91,7 @@ module HammerCLIForeman
85
91
  "parameter" => {
86
92
  "name" => option_name,
87
93
  "value" => option_value,
94
+ "parameter_type" => option_parameter_type,
88
95
  "hidden_value" => option_hidden_value
89
96
  }
90
97
  }.merge(base_action_params)