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.
- checksums.yaml +5 -5
- data/doc/release_notes.md +13 -0
- data/lib/hammer_cli_foreman.rb +4 -0
- data/lib/hammer_cli_foreman/common_parameter.rb +4 -0
- data/lib/hammer_cli_foreman/compute_attribute.rb +318 -0
- data/lib/hammer_cli_foreman/compute_profile.rb +61 -0
- data/lib/hammer_cli_foreman/compute_resource.rb +29 -13
- data/lib/hammer_cli_foreman/compute_resource/base.rb +12 -0
- data/lib/hammer_cli_foreman/compute_resource/ec2.rb +24 -0
- data/lib/hammer_cli_foreman/compute_resource/gce.rb +23 -0
- data/lib/hammer_cli_foreman/compute_resource/help_utils.rb +34 -0
- data/lib/hammer_cli_foreman/compute_resource/libvirt.rb +49 -0
- data/lib/hammer_cli_foreman/compute_resource/openstack.rb +25 -0
- data/lib/hammer_cli_foreman/compute_resource/ovirt.rb +47 -0
- data/lib/hammer_cli_foreman/compute_resource/rackspace.rb +22 -0
- data/lib/hammer_cli_foreman/compute_resource/register_compute_resources.rb +20 -0
- data/lib/hammer_cli_foreman/compute_resource/vmware.rb +68 -0
- data/lib/hammer_cli_foreman/host.rb +4 -11
- data/lib/hammer_cli_foreman/hostgroup.rb +9 -0
- data/lib/hammer_cli_foreman/hosts/common_update_help.rb +1 -7
- data/lib/hammer_cli_foreman/hosts/common_update_options.rb +1 -1
- data/lib/hammer_cli_foreman/id_resolver.rb +3 -1
- data/lib/hammer_cli_foreman/parameter.rb +7 -0
- data/lib/hammer_cli_foreman/references.rb +8 -0
- data/lib/hammer_cli_foreman/report_template.rb +79 -0
- data/lib/hammer_cli_foreman/smart_variable.rb +1 -2
- data/lib/hammer_cli_foreman/version.rb +1 -1
- data/locale/ca/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/de/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/en/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/en_GB/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/es/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/fr/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/it/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/ja/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/ko/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/pt_BR/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/ru/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/zh_CN/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/zh_TW/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/test/data/1.21/foreman_api.json +1 -0
- data/test/data/1.22/foreman_api.json +1 -0
- data/test/functional/compute_attribute_test.rb +654 -0
- data/test/functional/compute_profile_test.rb +99 -0
- data/test/functional/compute_resource_test.rb +42 -18
- data/test/functional/location_test.rb +6 -5
- data/test/functional/organization_test.rb +6 -5
- data/test/functional/report_template_test.rb +107 -7
- data/test/test_helper.rb +1 -1
- data/test/unit/common_parameter_test.rb +17 -5
- data/test/unit/domain_test.rb +2 -0
- data/test/unit/host_test.rb +1 -0
- data/test/unit/hostgroup_test.rb +14 -1
- data/test/unit/operating_system_test.rb +1 -0
- metadata +25 -20
- data/lib/hammer_cli_foreman/compute_resources/all.rb +0 -7
- data/lib/hammer_cli_foreman/compute_resources/ec2.rb +0 -9
- data/lib/hammer_cli_foreman/compute_resources/ec2/host_help_extenstion.rb +0 -23
- data/lib/hammer_cli_foreman/compute_resources/gce.rb +0 -9
- data/lib/hammer_cli_foreman/compute_resources/gce/host_help_extenstion.rb +0 -22
- data/lib/hammer_cli_foreman/compute_resources/libvirt.rb +0 -9
- data/lib/hammer_cli_foreman/compute_resources/libvirt/host_help_extenstion.rb +0 -35
- data/lib/hammer_cli_foreman/compute_resources/openstack.rb +0 -9
- data/lib/hammer_cli_foreman/compute_resources/openstack/host_help_extenstion.rb +0 -23
- data/lib/hammer_cli_foreman/compute_resources/ovirt.rb +0 -9
- data/lib/hammer_cli_foreman/compute_resources/ovirt/host_help_extenstion.rb +0 -36
- data/lib/hammer_cli_foreman/compute_resources/rackspace.rb +0 -9
- data/lib/hammer_cli_foreman/compute_resources/rackspace/host_help_extenstion.rb +0 -20
- data/lib/hammer_cli_foreman/compute_resources/vmware.rb +0 -9
- data/lib/hammer_cli_foreman/compute_resources/vmware/host_help_extenstion.rb +0 -66
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 879dc32762958668d6e95ffb5ff7ba04222b42be763aad77bd00045763074d45
|
4
|
+
data.tar.gz: 75334fc224d49d58d2b0f3ff9b420db02fa25d84df2f8595736e4fe92872fdcf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e0f879c792cadf51b3a53fcac50297f5620a203b1a7e2d0c85df655926f29da00f5452734a79e79f000fb3ab030ff3058cf569e3339c5991d942a2fb2145d20
|
7
|
+
data.tar.gz: 46800432d77b3cea0c324995b5cd4ba3a49d69bde6f6d4ba2fc6bd0e1b7c2a69f7ed6148f3489ba3a7912f2742396844a31666a29ea71076598f956349ccafa6
|
data/doc/release_notes.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
Release notes
|
2
2
|
=============
|
3
|
+
### 0.17.0 (2019-04-24)
|
4
|
+
* Add public key option in create compute resource CLI ([#25491](http://projects.theforeman.org/issues/25491))
|
5
|
+
* Background template rendering ([PR #414](https://github.com/theforeman/hammer-cli-foreman/pull/414)) ([#26355](http://projects.theforeman.org/issues/26355))
|
6
|
+
* Parameter type to parameter commands ([#26008](http://projects.theforeman.org/issues/26008))
|
7
|
+
* New API data that needed for parameter_type fix ([#26008](http://projects.theforeman.org/issues/26008))
|
8
|
+
* parameter_type option to parameter commands ([#26008](http://projects.theforeman.org/issues/26008))
|
9
|
+
* Move compute resource validation to their class ([#26234](http://projects.theforeman.org/issues/26234))
|
10
|
+
* Improve documentation of id fields in ovirt ([#26334](http://projects.theforeman.org/issues/26334))
|
11
|
+
* Add rebuild-config subcommand for hostgroups ([#26129](http://projects.theforeman.org/issues/26129))
|
12
|
+
* Add compute profile commands ([PR #398](https://github.com/theforeman/hammer-cli-foreman/pull/398)) ([#20538](http://projects.theforeman.org/issues/20538))
|
13
|
+
* Display uptime ([#26019](http://projects.theforeman.org/issues/26019))
|
14
|
+
* Hammer host update and set-parameters need clarification ([#25964](http://projects.theforeman.org/issues/25964))
|
15
|
+
|
3
16
|
### 0.16.0 (2019-01-16)
|
4
17
|
* Use make targets for translations from core ([#25724](http://projects.theforeman.org/issues/25724))
|
5
18
|
* Allow mixing option sources and validations ([PR #402](https://github.com/theforeman/hammer-cli-foreman/pull/402)) ([#22253](http://projects.theforeman.org/issues/22253))
|
data/lib/hammer_cli_foreman.rb
CHANGED
@@ -45,6 +45,10 @@ module HammerCLIForeman
|
|
45
45
|
'HammerCLIForeman::Audit', 'hammer_cli_foreman/audit'
|
46
46
|
)
|
47
47
|
|
48
|
+
HammerCLI::MainCommand.lazy_subcommand('compute-profile', _("Manipulate compute profiles"),
|
49
|
+
'HammerCLIForeman::ComputeProfile', 'hammer_cli_foreman/compute_profile'
|
50
|
+
)
|
51
|
+
|
48
52
|
HammerCLI::MainCommand.lazy_subcommand('compute-resource', _("Manipulate compute resources"),
|
49
53
|
'HammerCLIForeman::ComputeResource', 'hammer_cli_foreman/compute_resource'
|
50
54
|
)
|
@@ -11,6 +11,7 @@ module HammerCLIForeman
|
|
11
11
|
output do
|
12
12
|
field :name, _("Name")
|
13
13
|
field :value, _("Value")
|
14
|
+
field :parameter_type, _("Type")
|
14
15
|
end
|
15
16
|
|
16
17
|
build_options
|
@@ -27,6 +28,9 @@ module HammerCLIForeman
|
|
27
28
|
option "--name", "NAME", _("Parameter name"), :required => true
|
28
29
|
option "--value", "VALUE", _("Parameter value"), :required => true
|
29
30
|
option "--hidden-value", "HIDDEN_VALUE", _("Should the value be hidden"), :format => HammerCLI::Options::Normalizers::Bool.new
|
31
|
+
option "--parameter-type", "PARAMETER_TYPE", _("Type of the parameter"),
|
32
|
+
:default => 'string',
|
33
|
+
:format => HammerCLI::Options::Normalizers::Enum.new(Parameter::KEY_TYPES)
|
30
34
|
|
31
35
|
def action
|
32
36
|
@action ||= parameter_exist? ? :update : :create
|
@@ -0,0 +1,318 @@
|
|
1
|
+
require 'hammer_cli_foreman/image'
|
2
|
+
require 'hammer_cli_foreman/compute_resource/register_compute_resources'
|
3
|
+
require 'hammer_cli_foreman/compute_resource/help_utils'
|
4
|
+
|
5
|
+
module HammerCLIForeman
|
6
|
+
class ComputeAttribute < HammerCLIForeman::Command
|
7
|
+
resource :compute_attributes
|
8
|
+
|
9
|
+
def self.get_params(options)
|
10
|
+
params = {}
|
11
|
+
params['compute_attribute'] = {}
|
12
|
+
profile = HammerCLIForeman.record_to_common_format(
|
13
|
+
HammerCLIForeman.foreman_resource(:compute_profiles).call(:show, 'id' => options['option_compute_profile_id'] )
|
14
|
+
)
|
15
|
+
params['compute_attribute'] = profile['compute_attributes'].select { |hash| hash['compute_resource_id'] == options['option_compute_resource_id']}[0] || {}
|
16
|
+
params['compute_attribute'].delete('attributes') if params['compute_attribute']['attributes']
|
17
|
+
params
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.attribute_hash(attribute_list)
|
21
|
+
attribute_list.size.times.map { |idx| idx.to_s }.zip(attribute_list).to_h
|
22
|
+
end
|
23
|
+
|
24
|
+
class Create < HammerCLIForeman::CreateCommand
|
25
|
+
desc _('Create compute profile set of values')
|
26
|
+
|
27
|
+
option '--compute-attributes', 'COMPUTE_ATTRS', _('Compute resource attributes'),
|
28
|
+
:format => HammerCLI::Options::Normalizers::KeyValueList.new
|
29
|
+
option '--interface', 'INTERFACE', _('Interface parameters, should be comma separated list of values'),
|
30
|
+
:format => HammerCLI::Options::Normalizers::KeyValueList.new, :multivalued => true
|
31
|
+
option '--volume', 'VOLUME', _('Volume parameters, should be comma separated list of values'),
|
32
|
+
:format => HammerCLI::Options::Normalizers::KeyValueList.new, :multivalued => true
|
33
|
+
|
34
|
+
extend_help do |h|
|
35
|
+
::HammerCLIForeman::ComputeResources.extend_help(h, :all)
|
36
|
+
end
|
37
|
+
|
38
|
+
validate_options do
|
39
|
+
any(:option_compute_profile_id, :option_compute_profile_name ).required
|
40
|
+
any(:option_compute_resource_id, :option_compute_resource_name).required
|
41
|
+
end
|
42
|
+
|
43
|
+
def request_params
|
44
|
+
params = super
|
45
|
+
compute_resource_name = HammerCLIForeman.record_to_common_format(HammerCLIForeman.foreman_resource(:compute_resources).call(:show, 'id' => options["option_compute_resource_id"] ))["provider_friendly_name"].downcase
|
46
|
+
interfaces_attr_name = ::HammerCLIForeman.compute_resources[compute_resource_name].interfaces_attrs_name
|
47
|
+
params['compute_attribute']['vm_attrs'] = option_compute_attributes || {}
|
48
|
+
params['compute_attribute']['vm_attrs'][interfaces_attr_name]= HammerCLIForeman::ComputeAttribute.attribute_hash(option_interface_list) unless option_interface_list.empty?
|
49
|
+
params['compute_attribute']['vm_attrs']['volumes_attributes'] = HammerCLIForeman::ComputeAttribute.attribute_hash(option_volume_list) unless option_volume_list.empty?
|
50
|
+
params
|
51
|
+
end
|
52
|
+
|
53
|
+
success_message _('Compute profile attributes are set.')
|
54
|
+
failure_message _('Could not set the compute profile attributes')
|
55
|
+
build_options
|
56
|
+
end
|
57
|
+
|
58
|
+
class Update < HammerCLIForeman::UpdateCommand
|
59
|
+
desc _('Update compute profile values')
|
60
|
+
|
61
|
+
option '--compute-attributes', 'COMPUTE_ATTRS', _('Compute resource attributes, should be comma separated list of values'),
|
62
|
+
:format => HammerCLI::Options::Normalizers::KeyValueList.new
|
63
|
+
option '--interface', 'INTERFACE', _('Interface parameters, should be comma separated list of values'),
|
64
|
+
:format => HammerCLI::Options::Normalizers::KeyValueList.new, :multivalued => true
|
65
|
+
option '--volume', 'VOLUME', _('Volume parameters, should be comma separated list of values'),
|
66
|
+
:format => HammerCLI::Options::Normalizers::KeyValueList.new, :multivalued => true
|
67
|
+
|
68
|
+
extend_help do |h|
|
69
|
+
::HammerCLIForeman::ComputeResources.extend_help(h, :all)
|
70
|
+
end
|
71
|
+
|
72
|
+
validate_options do
|
73
|
+
any(:option_compute_profile_id, :option_compute_profile_name ).required
|
74
|
+
any(:option_compute_resource_id, :option_compute_resource_name).required
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
def request_params
|
79
|
+
|
80
|
+
params = HammerCLIForeman::ComputeAttribute.get_params(options)
|
81
|
+
compute_resource_name = HammerCLIForeman.record_to_common_format(HammerCLIForeman.foreman_resource(:compute_resources).call(:show, 'id' => options["option_compute_resource_id"] ))["provider_friendly_name"].downcase
|
82
|
+
interfaces_attr_name = ::HammerCLIForeman.compute_resources[compute_resource_name].interfaces_attrs_name
|
83
|
+
|
84
|
+
raise ArgumentError, "Compute profile value to update does not exist yet; it needs to be created first" if !params['compute_attribute'].key?('id')
|
85
|
+
params['id'] = params['compute_attribute']['id']
|
86
|
+
vm_attrs = params['compute_attribute']['vm_attrs']
|
87
|
+
original_volumes = vm_attrs['volumes_attributes'] || {}
|
88
|
+
original_interfaces = vm_attrs[interfaces_attr_name] || {}
|
89
|
+
|
90
|
+
if options['option_compute_attributes']
|
91
|
+
vm_attrs = options['option_compute_attributes']
|
92
|
+
vm_attrs['volumes_attributes'] ||= original_volumes
|
93
|
+
vm_attrs[interfaces_attr_name] ||= original_interfaces
|
94
|
+
end
|
95
|
+
vm_attrs[interfaces_attr_name] = HammerCLIForeman::ComputeAttribute.attribute_hash(options['option_interface_list']) unless options['option_interface_list'].empty?
|
96
|
+
vm_attrs['volumes_attributes'] = HammerCLIForeman::ComputeAttribute.attribute_hash(options['option_volume_list']) unless options['option_volume_list'].empty?
|
97
|
+
params['compute_attribute']['vm_attrs'] = vm_attrs
|
98
|
+
params
|
99
|
+
|
100
|
+
end
|
101
|
+
success_message _('Compute profile attributes updated.')
|
102
|
+
failure_message _('Could not update the compute profile attributes')
|
103
|
+
|
104
|
+
build_options :without => :id
|
105
|
+
end
|
106
|
+
|
107
|
+
# Using the Update command because adding a new interface is done by modifying existing compute_attribute
|
108
|
+
class AddInterface < HammerCLIForeman::UpdateCommand
|
109
|
+
command_name 'add-interface'
|
110
|
+
desc _('Add interface for Compute Profile')
|
111
|
+
option '--interface', 'SET_VALUES', _('Interface parameters, should be comma separated list of values'),
|
112
|
+
:format => HammerCLI::Options::Normalizers::KeyValueList.new, :required => true
|
113
|
+
|
114
|
+
extend_help do |h|
|
115
|
+
::HammerCLIForeman::ComputeResources.extend_help(h, :interface)
|
116
|
+
end
|
117
|
+
|
118
|
+
def validate_options
|
119
|
+
super
|
120
|
+
validator.any(:option_compute_profile_id,:option_compute_profile_name).required
|
121
|
+
validator.any(:option_compute_resource_id,:option_compute_resource_name).required
|
122
|
+
end
|
123
|
+
|
124
|
+
def request_params
|
125
|
+
params = HammerCLIForeman::ComputeAttribute.get_params(options)
|
126
|
+
|
127
|
+
raise ArgumentError, "Compute profile value to update does not exist yet; it needs to be created first" if !params['compute_attribute'].key?('id')
|
128
|
+
compute_resource_name = HammerCLIForeman.record_to_common_format(HammerCLIForeman.foreman_resource(:compute_resources).call(:show, 'id' => options["option_compute_resource_id"] ))["provider_friendly_name"].downcase
|
129
|
+
|
130
|
+
|
131
|
+
interfaces_attr_name = ::HammerCLIForeman.compute_resources[compute_resource_name].interfaces_attrs_name
|
132
|
+
interface_attr = params['compute_attribute']['vm_attrs'][interfaces_attr_name] || {}
|
133
|
+
new_interface_id = (interface_attr.keys.max.to_i + 1 ).to_s if interface_attr.any?
|
134
|
+
new_interface_id ||= "0"
|
135
|
+
params['id'] = params['compute_attribute']['id']
|
136
|
+
|
137
|
+
params['compute_attribute']['vm_attrs'][interfaces_attr_name] ||= {}
|
138
|
+
params['compute_attribute']['vm_attrs'][interfaces_attr_name][new_interface_id] = option_interface
|
139
|
+
params
|
140
|
+
end
|
141
|
+
|
142
|
+
success_message _('Interface was created.')
|
143
|
+
failure_message _('Could not create interface')
|
144
|
+
|
145
|
+
build_options :without => :id
|
146
|
+
end
|
147
|
+
|
148
|
+
class UpdateInterface < HammerCLIForeman::UpdateCommand
|
149
|
+
command_name 'update-interface'
|
150
|
+
|
151
|
+
desc _('Update compute profile interface')
|
152
|
+
|
153
|
+
option '--interface', 'SET_VALUES', _('Interface parameters, should be comma separated list of values'),
|
154
|
+
:required => true,
|
155
|
+
:format => HammerCLI::Options::Normalizers::KeyValueList.new
|
156
|
+
option '--interface-id', 'INTERFACE_ID', _('Interface id'),
|
157
|
+
:required => true,
|
158
|
+
:format => HammerCLI::Options::Normalizers::Number.new
|
159
|
+
|
160
|
+
extend_help do |h|
|
161
|
+
::HammerCLIForeman::ComputeResources.extend_help(h, :interface)
|
162
|
+
end
|
163
|
+
|
164
|
+
def validate_options
|
165
|
+
super
|
166
|
+
validator.any(:option_compute_profile_id, :option_compute_profile_name).required
|
167
|
+
validator.any(:option_compute_resource_id, :option_compute_resource_name).required
|
168
|
+
end
|
169
|
+
|
170
|
+
def request_params
|
171
|
+
params = HammerCLIForeman::ComputeAttribute.get_params(options)
|
172
|
+
raise ArgumentError, "Compute profile value to update does not exist yet; it needs to be created first" if !params['compute_attribute'].key?('id')
|
173
|
+
compute_resource_name = HammerCLIForeman.record_to_common_format(HammerCLIForeman.foreman_resource(:compute_resources).call(:show, 'id' => options["option_compute_resource_id"] ))["provider_friendly_name"].downcase
|
174
|
+
interfaces_attr_name = ::HammerCLIForeman.compute_resources[compute_resource_name].interfaces_attrs_name
|
175
|
+
params['id'] = params['compute_attribute']['id']
|
176
|
+
params['compute_attribute']['vm_attrs'][interfaces_attr_name] ||= {}
|
177
|
+
params['compute_attribute']['vm_attrs'][interfaces_attr_name][option_interface_id] = option_interface
|
178
|
+
params
|
179
|
+
end
|
180
|
+
success_message _('Interface was updated.')
|
181
|
+
failure_message _('Could not update interface')
|
182
|
+
build_options :without => :id
|
183
|
+
end
|
184
|
+
|
185
|
+
# Using the Update command because removing an interface is done by modifying existing compute_attribute
|
186
|
+
class RemoveInterface < HammerCLIForeman::UpdateCommand
|
187
|
+
command_name 'remove-interface'
|
188
|
+
desc _('Remove compute profile interface')
|
189
|
+
option '--interface-id', 'INTERFACE ID', _('Interface id'),
|
190
|
+
:format => HammerCLI::Options::Normalizers::Number.new , :required => true
|
191
|
+
|
192
|
+
def validate_options
|
193
|
+
super
|
194
|
+
validator.any(:option_compute_profile_id, :option_compute_profile_name).required
|
195
|
+
validator.any(:option_compute_resource_id, :option_compute_resource_name).required
|
196
|
+
end
|
197
|
+
|
198
|
+
def request_params
|
199
|
+
params = HammerCLIForeman::ComputeAttribute.get_params(options)
|
200
|
+
raise ArgumentError, "Compute profile value to update does not exist yet; it needs to be created first" if !params['compute_attribute'].key?('id')
|
201
|
+
compute_resource_name = HammerCLIForeman.record_to_common_format(HammerCLIForeman.foreman_resource(:compute_resources).call(:show, 'id' => options["option_compute_resource_id"] ))["provider_friendly_name"].downcase
|
202
|
+
interfaces_attr_name = ::HammerCLIForeman.compute_resources[compute_resource_name].interfaces_attrs_name
|
203
|
+
params['id'] = params['compute_attribute']['id']
|
204
|
+
if params['compute_attribute']['vm_attrs'][interfaces_attr_name].has_key?(option_interface_id.to_s)
|
205
|
+
params['compute_attribute']['vm_attrs'][interfaces_attr_name].delete(option_interface_id.to_s)
|
206
|
+
else
|
207
|
+
signal_usage_error _('unknown interface id')
|
208
|
+
end
|
209
|
+
params
|
210
|
+
end
|
211
|
+
success_message _('Interface was removed.')
|
212
|
+
failure_message _('Could not remove interface')
|
213
|
+
build_options :without => :id
|
214
|
+
end
|
215
|
+
|
216
|
+
# Using the Update command because adding a new volume is done by modifying existing compute_attribute
|
217
|
+
class AddVolume < HammerCLIForeman::UpdateCommand
|
218
|
+
command_name 'add-volume'
|
219
|
+
desc _('Add volume for Compute Profile')
|
220
|
+
|
221
|
+
option '--volume', 'VOLUME', _('Volume parameters, should be comma separated list of values'),
|
222
|
+
:format => HammerCLI::Options::Normalizers::KeyValueList.new, :required => true
|
223
|
+
|
224
|
+
extend_help do |h|
|
225
|
+
::HammerCLIForeman::ComputeResources.extend_help(h, :volume)
|
226
|
+
end
|
227
|
+
|
228
|
+
def validate_options
|
229
|
+
super
|
230
|
+
validator.any(:option_compute_profile_id, :option_compute_profile_name).required
|
231
|
+
validator.any(:option_compute_resource_id, :option_compute_resource_name).required
|
232
|
+
end
|
233
|
+
|
234
|
+
def request_params
|
235
|
+
params = HammerCLIForeman::ComputeAttribute.get_params(options)
|
236
|
+
raise ArgumentError, "Compute profile value to update does not exist yet; it needs to be created first" if !params['compute_attribute'].key?('id')
|
237
|
+
volume_attr = params['compute_attribute']['vm_attrs']['volumes_attributes'] || {}
|
238
|
+
new_volume_id = (volume_attr.keys.max.to_i + 1 ).to_s if volume_attr.any?
|
239
|
+
new_volume_id ||= "0"
|
240
|
+
params['id'] = params['compute_attribute']['id']
|
241
|
+
params['compute_attribute']['vm_attrs']['volumes_attributes'] ||= {}
|
242
|
+
params['compute_attribute']['vm_attrs']['volumes_attributes'][new_volume_id] = option_volume
|
243
|
+
params
|
244
|
+
end
|
245
|
+
|
246
|
+
success_message _('Volume was created.')
|
247
|
+
failure_message _('Could not create volume')
|
248
|
+
build_options :without => :id
|
249
|
+
end
|
250
|
+
|
251
|
+
class UpdateVolume < HammerCLIForeman::UpdateCommand
|
252
|
+
command_name 'update-volume'
|
253
|
+
desc _('Update compute profile volume')
|
254
|
+
|
255
|
+
option '--volume', 'VOLUME', _('Volume parameters, should be comma separated list of values'),
|
256
|
+
:required => true,
|
257
|
+
:format => HammerCLI::Options::Normalizers::KeyValueList.new
|
258
|
+
option '--volume-id', 'VOLUME_ID', _('Volume id'),
|
259
|
+
:required => true,
|
260
|
+
:format => HammerCLI::Options::Normalizers::Number.new
|
261
|
+
|
262
|
+
extend_help do |h|
|
263
|
+
::HammerCLIForeman::ComputeResources.extend_help(h, :volume)
|
264
|
+
end
|
265
|
+
|
266
|
+
|
267
|
+
def validate_options
|
268
|
+
super
|
269
|
+
validator.any(:option_compute_profile_id, :option_compute_profile_name).required
|
270
|
+
validator.any(:option_compute_resource_id, :option_compute_resource_name).required
|
271
|
+
end
|
272
|
+
|
273
|
+
def request_params
|
274
|
+
params = HammerCLIForeman::ComputeAttribute.get_params(options)
|
275
|
+
raise ArgumentError, "Compute profile value to update does not exist yet; it needs to be created first" if !params['compute_attribute'].key?('id')
|
276
|
+
params['id'] = params['compute_attribute']['id']
|
277
|
+
params['compute_attribute']['vm_attrs']['volumes_attributes'] ||= {}
|
278
|
+
params['compute_attribute']['vm_attrs']['volumes_attributes'][option_volume_id] = option_volume
|
279
|
+
params
|
280
|
+
end
|
281
|
+
success_message _('Volume was updated.')
|
282
|
+
failure_message _('Could not update volume')
|
283
|
+
build_options :without => :id
|
284
|
+
end
|
285
|
+
|
286
|
+
# Using the Update command because removing a volume is done by modifying existing compute_attribute
|
287
|
+
class RemoveVolume < HammerCLIForeman::UpdateCommand
|
288
|
+
command_name 'remove-volume'
|
289
|
+
resource :compute_attributes
|
290
|
+
desc _('Remove compute profile volume')
|
291
|
+
option '--volume-id', 'VOLUME_ID', _('Volume id'),
|
292
|
+
:format => HammerCLI::Options::Normalizers::Number.new, :required=> true
|
293
|
+
|
294
|
+
def validate_options
|
295
|
+
super
|
296
|
+
validator.any(:option_compute_profile_id, :option_compute_profile_name).required
|
297
|
+
validator.any(:option_compute_resource_id, :option_compute_resource_name).required
|
298
|
+
end
|
299
|
+
|
300
|
+
def request_params
|
301
|
+
params = HammerCLIForeman::ComputeAttribute.get_params(options)
|
302
|
+
raise ArgumentError, "Compute profile value to update does not exist yet; it needs to be created first" if !params['compute_attribute'].key?('id')
|
303
|
+
params['id'] = params['compute_attribute']['id']
|
304
|
+
if params['compute_attribute']['vm_attrs']['volumes_attributes'].has_key?(option_volume_id.to_s)
|
305
|
+
params['compute_attribute']['vm_attrs']['volumes_attributes'].delete(option_volume_id.to_s)
|
306
|
+
else
|
307
|
+
signal_usage_error _('unknown volume id')
|
308
|
+
end
|
309
|
+
params
|
310
|
+
end
|
311
|
+
success_message _('Volume was removed.')
|
312
|
+
failure_message _('Could not remove volume')
|
313
|
+
build_options :without => :id
|
314
|
+
end
|
315
|
+
|
316
|
+
autoload_subcommands
|
317
|
+
end
|
318
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'hammer_cli_foreman/image'
|
2
|
+
|
3
|
+
module HammerCLIForeman
|
4
|
+
class ComputeProfile < HammerCLIForeman::Command
|
5
|
+
resource :compute_profiles
|
6
|
+
|
7
|
+
class ListCommand < HammerCLIForeman::ListCommand
|
8
|
+
output do
|
9
|
+
field :id, _('Id')
|
10
|
+
field :name, _('Name')
|
11
|
+
end
|
12
|
+
build_options
|
13
|
+
end
|
14
|
+
|
15
|
+
class InfoCommand < HammerCLIForeman::InfoCommand
|
16
|
+
output ListCommand.output_definition do
|
17
|
+
|
18
|
+
HammerCLIForeman::References.taxonomies(self)
|
19
|
+
HammerCLIForeman::References.timestamps(self)
|
20
|
+
|
21
|
+
collection :compute_attributes, _('Compute attributes') do
|
22
|
+
field :id, _('Id')
|
23
|
+
field :name, _('Name')
|
24
|
+
field nil, _('Compute Resource'), Fields::SingleReference, :key => :compute_resource
|
25
|
+
field :vm_attrs, _('VM attributes')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
build_options
|
29
|
+
end
|
30
|
+
|
31
|
+
class CreateCommand < HammerCLIForeman::CreateCommand
|
32
|
+
success_message _('Compute profile created.')
|
33
|
+
failure_message _('Could not create a compute profile')
|
34
|
+
build_options
|
35
|
+
end
|
36
|
+
|
37
|
+
class UpdateCommand < HammerCLIForeman::UpdateCommand
|
38
|
+
success_message _('Compute profile updated.')
|
39
|
+
failure_message _('Could not update the compute profile')
|
40
|
+
validate_options do
|
41
|
+
any(:option_name,:option_id).required
|
42
|
+
end
|
43
|
+
build_options
|
44
|
+
end
|
45
|
+
|
46
|
+
class DeleteCommand < HammerCLIForeman::DeleteCommand
|
47
|
+
success_message _('Compute profile deleted.')
|
48
|
+
failure_message _('Could not delete the Compute profile')
|
49
|
+
validate_options do
|
50
|
+
any(:option_name,:option_id).required
|
51
|
+
end
|
52
|
+
build_options
|
53
|
+
end
|
54
|
+
|
55
|
+
lazy_subcommand('values', _("Create update and delete Compute profile values"),
|
56
|
+
'HammerCLIForeman::ComputeAttribute', 'hammer_cli_foreman/compute_attribute'
|
57
|
+
)
|
58
|
+
|
59
|
+
autoload_subcommands
|
60
|
+
end
|
61
|
+
end
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'hammer_cli_foreman/image'
|
2
|
+
require 'hammer_cli_foreman/compute_resource/register_compute_resources'
|
3
|
+
|
2
4
|
|
3
5
|
module HammerCLIForeman
|
4
6
|
|
@@ -69,34 +71,48 @@ module HammerCLIForeman
|
|
69
71
|
|
70
72
|
|
71
73
|
class CreateCommand < HammerCLIForeman::CreateCommand
|
74
|
+
option "--public-key-path", "PUBLIC_KEY_PATH", _("Path to a file that contains oVirt public key (For oVirt only)"),
|
75
|
+
:format => HammerCLI::Options::Normalizers::File.new
|
72
76
|
|
73
|
-
VALIDATION_PER_PROVIDER = {
|
74
|
-
'libvirt' => [:option_url],
|
75
|
-
'ovirt' => [:option_url, :option_user, :option_password, :option_datacenter],
|
76
|
-
'openstack' => [:option_url, :option_user, :option_password],
|
77
|
-
'racksapce' => [:option_url],
|
78
|
-
'ec2' => [:option_region, :option_user, :option_password],
|
79
|
-
'vmware' => [:option_user, :option_password, :option_datacenter, :option_server]
|
80
|
-
}
|
81
77
|
|
82
78
|
success_message _("Compute resource created.")
|
83
79
|
failure_message _("Could not create the compute resource")
|
84
80
|
|
85
81
|
build_options
|
86
82
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
83
|
+
def request_params
|
84
|
+
params = super
|
85
|
+
params['compute_resource']['public_key'] = option_public_key_path if option_public_key_path
|
86
|
+
params
|
87
|
+
end
|
91
88
|
|
92
|
-
|
89
|
+
validate_options do
|
90
|
+
if option(:option_provider).value.nil? || option(:option_name).value.nil?
|
91
|
+
all(:option_name, :option_provider).required
|
92
|
+
else
|
93
|
+
provider = ::HammerCLIForeman.compute_resources[option(:option_provider).value.to_s.downcase]
|
94
|
+
if provider
|
95
|
+
required_options = provider.mandatory_resource_options.map { |attr| "option_#{attr}".to_sym }
|
96
|
+
all(*required_options).required
|
97
|
+
else
|
98
|
+
raise ArgumentError, "incorrect/invalid --provider option"
|
99
|
+
end
|
100
|
+
end
|
93
101
|
end
|
94
102
|
end
|
95
103
|
|
96
104
|
class UpdateCommand < HammerCLIForeman::UpdateCommand
|
105
|
+
option "--public-key-path", "PUBLIC_KEY_PATH", _("Path to a file that contains oVirt public key (For oVirt only)"),
|
106
|
+
:format => HammerCLI::Options::Normalizers::File.new
|
107
|
+
|
97
108
|
success_message _("Compute resource updated.")
|
98
109
|
failure_message _("Could not update the compute resource")
|
99
110
|
|
111
|
+
def request_params
|
112
|
+
params = super
|
113
|
+
params['compute_resource']['public_key'] = option_public_key_path if option_public_key_path
|
114
|
+
params
|
115
|
+
end
|
100
116
|
build_options :without => :name
|
101
117
|
end
|
102
118
|
|