hammer_cli_foreman 0.16.0 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
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)