knife-openstack 1.3.2.pre → 1.3.2.pre.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile +1 -1
- data/Rakefile +7 -28
- data/knife-openstack.gemspec +16 -16
- data/lib/chef/knife/cloud/openstack_server_create_options.rb +44 -44
- data/lib/chef/knife/cloud/openstack_service.rb +27 -31
- data/lib/chef/knife/cloud/openstack_service_options.rb +25 -26
- data/lib/chef/knife/openstack_flavor_list.rb +9 -10
- data/lib/chef/knife/openstack_floating_ip_allocate.rb +4 -4
- data/lib/chef/knife/openstack_floating_ip_associate.rb +5 -5
- data/lib/chef/knife/openstack_floating_ip_disassociate.rb +4 -4
- data/lib/chef/knife/openstack_group_list.rb +9 -11
- data/lib/chef/knife/openstack_helpers.rb +14 -2
- data/lib/chef/knife/openstack_image_list.rb +14 -15
- data/lib/chef/knife/openstack_network_list.rb +8 -9
- data/lib/chef/knife/openstack_server_create.rb +81 -84
- data/lib/chef/knife/openstack_server_delete.rb +25 -26
- data/lib/chef/knife/openstack_server_list.rb +13 -19
- data/lib/chef/knife/openstack_server_show.rb +11 -12
- data/lib/chef/knife/openstack_volume_list.rb +10 -12
- data/lib/knife-openstack/version.rb +1 -1
- data/spec/functional/flavor_list_func_spec.rb +11 -11
- data/spec/functional/floating_ip_list_func_spec.rb +11 -11
- data/spec/functional/group_list_func_spec.rb +27 -31
- data/spec/functional/image_list_func_spec.rb +14 -14
- data/spec/functional/network_list_func_spec.rb +10 -10
- data/spec/functional/server_create_func_spec.rb +23 -24
- data/spec/functional/server_delete_func_spec.rb +16 -17
- data/spec/functional/server_list_func_spec.rb +39 -39
- data/spec/functional/server_show_func_spec.rb +4 -5
- data/spec/functional/volume_list_func_spec.rb +9 -9
- data/spec/integration/cleanup.rb +8 -11
- data/spec/integration/openstack_spec.rb +377 -347
- data/spec/spec_context.rb +10 -10
- data/spec/spec_helper.rb +23 -27
- data/spec/unit/openstack_flavor_list_spec.rb +1 -1
- data/spec/unit/openstack_floating_ip_allocate_spec.rb +2 -3
- data/spec/unit/openstack_floating_ip_associate_spec.rb +2 -2
- data/spec/unit/openstack_floating_ip_disassociate_spec.rb +3 -3
- data/spec/unit/openstack_floating_ip_release_spec.rb +1 -1
- data/spec/unit/openstack_group_list_spec.rb +7 -7
- data/spec/unit/openstack_image_list_spec.rb +2 -2
- data/spec/unit/openstack_network_list_spec.rb +4 -4
- data/spec/unit/openstack_server_create_spec.rb +117 -118
- data/spec/unit/openstack_server_delete_spec.rb +4 -4
- data/spec/unit/openstack_server_list_spec.rb +2 -2
- data/spec/unit/openstack_server_show_spec.rb +6 -6
- data/spec/unit/openstack_service_spec.rb +20 -20
- data/spec/unit/openstack_volume_list_spec.rb +1 -1
- metadata +30 -2
@@ -16,10 +16,10 @@ class Chef
|
|
16
16
|
banner 'knife openstack floating_ip disassociate IP (options)'
|
17
17
|
|
18
18
|
option :instance_id,
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
long: '--instance-id ID',
|
20
|
+
description: 'Instance id to disassociate with.',
|
21
|
+
proc: proc { |key| Chef::Config[:knife][:instance_id] = key },
|
22
|
+
required: true
|
23
23
|
|
24
24
|
def execute_command
|
25
25
|
if @name_args[0]
|
@@ -9,27 +9,25 @@ class Chef
|
|
9
9
|
include OpenstackHelpers
|
10
10
|
include OpenstackServiceOptions
|
11
11
|
|
12
|
-
banner
|
12
|
+
banner 'knife openstack group list (options)'
|
13
13
|
|
14
14
|
def query_resource
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
raise e
|
21
|
-
end
|
15
|
+
@service.connection.security_groups
|
16
|
+
rescue Excon::Errors::BadRequest => e
|
17
|
+
response = Chef::JSONCompat.from_json(e.response.body)
|
18
|
+
ui.fatal("Unknown server error (#{response['badRequest']['code']}): #{response['badRequest']['message']}")
|
19
|
+
raise e
|
22
20
|
end
|
23
21
|
|
24
22
|
def list(security_groups)
|
25
|
-
if(config[:format] ==
|
23
|
+
if (config[:format] == 'summary')
|
26
24
|
group_list = [
|
27
25
|
ui.color('Name', :bold),
|
28
26
|
ui.color('Protocol', :bold),
|
29
27
|
ui.color('From', :bold),
|
30
28
|
ui.color('To', :bold),
|
31
29
|
ui.color('CIDR', :bold),
|
32
|
-
ui.color('Description', :bold)
|
30
|
+
ui.color('Description', :bold)
|
33
31
|
]
|
34
32
|
security_groups.sort_by(&:name).each do |group|
|
35
33
|
group.security_group_rules.each do |rule|
|
@@ -52,4 +50,4 @@ class Chef
|
|
52
50
|
end
|
53
51
|
end
|
54
52
|
end
|
55
|
-
end
|
53
|
+
end
|
@@ -4,7 +4,6 @@ class Chef
|
|
4
4
|
class Knife
|
5
5
|
class Cloud
|
6
6
|
module OpenstackHelpers
|
7
|
-
|
8
7
|
def primary_private_ip_address(addresses)
|
9
8
|
primary_network_ip_address(addresses, 'private')
|
10
9
|
end
|
@@ -14,7 +13,7 @@ class Chef
|
|
14
13
|
end
|
15
14
|
|
16
15
|
def primary_network_ip_address(addresses, network_name)
|
17
|
-
|
16
|
+
addresses[network_name].last['addr'] if addresses[network_name] && !addresses[network_name].empty?
|
18
17
|
end
|
19
18
|
|
20
19
|
def create_service_instance
|
@@ -24,6 +23,19 @@ class Chef
|
|
24
23
|
def validate!
|
25
24
|
super(:openstack_username, :openstack_password, :openstack_auth_url)
|
26
25
|
end
|
26
|
+
|
27
|
+
def instance_addresses(addresses)
|
28
|
+
info = []
|
29
|
+
if addresses[addresses.keys[0]] && addresses[addresses.keys[0]].size > 0
|
30
|
+
ips = addresses[addresses.keys[0]]
|
31
|
+
ips.each do |ip|
|
32
|
+
version = 'IPv6' if ip['version'] == 6
|
33
|
+
version = 'IPv4' if ip['version'] == 4
|
34
|
+
info << "#{addresses.keys[0]}:#{version}: #{ip['addr']}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
info.join(' ')
|
38
|
+
end
|
27
39
|
end
|
28
40
|
end
|
29
41
|
end
|
@@ -12,26 +12,26 @@ class Chef
|
|
12
12
|
include OpenstackHelpers
|
13
13
|
include OpenstackServiceOptions
|
14
14
|
|
15
|
-
banner
|
15
|
+
banner 'knife openstack image list (options)'
|
16
16
|
|
17
17
|
option :disable_filter,
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
long: '--disable-filter',
|
19
|
+
description: "Disable filtering of the image list. Currently filters names ending with 'initrd' or 'kernel'",
|
20
|
+
boolean: true,
|
21
|
+
default: false
|
22
22
|
|
23
23
|
def before_exec_command
|
24
|
-
#set resource_filters
|
25
|
-
|
26
|
-
@resource_filters = [{:
|
24
|
+
# set resource_filters
|
25
|
+
unless config[:disable_filter]
|
26
|
+
@resource_filters = [{ attribute: 'name', regex: /initrd$|kernel$|loader$|virtual$|vmlinuz$/ }]
|
27
27
|
end
|
28
|
-
#set columns_with_info map
|
28
|
+
# set columns_with_info map
|
29
29
|
@columns_with_info = [
|
30
|
-
{:
|
31
|
-
{:
|
32
|
-
{:
|
30
|
+
{ label: 'Name', key: 'name' },
|
31
|
+
{ label: 'ID', key: 'id' },
|
32
|
+
{ label: 'Snapshot', key: 'metadata', value_callback: method(:is_image_snapshot) }
|
33
33
|
]
|
34
|
-
@sort_by_field =
|
34
|
+
@sort_by_field = 'name'
|
35
35
|
end
|
36
36
|
|
37
37
|
def query_resource
|
@@ -47,8 +47,7 @@ class Chef
|
|
47
47
|
end
|
48
48
|
snapshot
|
49
49
|
end
|
50
|
-
|
51
50
|
end
|
52
51
|
end
|
53
52
|
end
|
54
|
-
end
|
53
|
+
end
|
@@ -12,24 +12,23 @@ class Chef
|
|
12
12
|
include OpenstackHelpers
|
13
13
|
include OpenstackServiceOptions
|
14
14
|
|
15
|
-
banner
|
15
|
+
banner 'knife openstack network list (options)'
|
16
16
|
|
17
17
|
def before_exec_command
|
18
|
-
#set columns_with_info map
|
18
|
+
# set columns_with_info map
|
19
19
|
@columns_with_info = [
|
20
|
-
{:
|
21
|
-
{:
|
22
|
-
{:
|
23
|
-
{:
|
20
|
+
{ label: 'Name', key: 'name' },
|
21
|
+
{ label: 'ID', key: 'id' },
|
22
|
+
{ label: 'Tenant', key: 'tenant_id' },
|
23
|
+
{ label: 'Shared', key: 'shared' }
|
24
24
|
]
|
25
|
-
@sort_by_field =
|
25
|
+
@sort_by_field = 'name'
|
26
26
|
end
|
27
27
|
|
28
28
|
def query_resource
|
29
29
|
@service.list_networks
|
30
30
|
end
|
31
|
-
|
32
31
|
end
|
33
32
|
end
|
34
33
|
end
|
35
|
-
end
|
34
|
+
end
|
@@ -33,55 +33,54 @@ class Chef
|
|
33
33
|
include OpenstackServerCreateOptions
|
34
34
|
include OpenstackServiceOptions
|
35
35
|
|
36
|
-
|
37
|
-
banner "knife openstack server create (options)"
|
36
|
+
banner 'knife openstack server create (options)'
|
38
37
|
|
39
38
|
def before_exec_command
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
end
|
39
|
+
super
|
40
|
+
# setup the create options
|
41
|
+
@create_options = {
|
42
|
+
server_def: {
|
43
|
+
# servers require a name, knife-cloud generates the chef_node_name
|
44
|
+
:name => config[:chef_node_name],
|
45
|
+
:image_ref => service.get_image(locate_config_value(:image)).id,
|
46
|
+
:flavor_ref => service.get_flavor(locate_config_value(:flavor)).id,
|
47
|
+
:security_groups => locate_config_value(:openstack_security_groups),
|
48
|
+
:availability_zone => locate_config_value(:availability_zone),
|
49
|
+
'os:scheduler_hints' => locate_config_value(:openstack_scheduler_hints),
|
50
|
+
:metadata => locate_config_value(:metadata),
|
51
|
+
:key_name => locate_config_value(:openstack_ssh_key_id)
|
52
|
+
},
|
53
|
+
server_create_timeout: locate_config_value(:server_create_timeout)
|
54
|
+
}
|
55
|
+
unless locate_config_value(:openstack_volumes).nil?
|
56
|
+
counter = 99
|
57
|
+
@create_options[:server_def][:block_device_mapping] = locate_config_value(:openstack_volumes).map do |vol|
|
58
|
+
counter += 1
|
59
|
+
{
|
60
|
+
volume_id: vol,
|
61
|
+
delete_on_termination: false,
|
62
|
+
device_name: '/dev/vd' + counter.chr,
|
63
|
+
volume_size: nil
|
64
|
+
}
|
67
65
|
end
|
66
|
+
end
|
68
67
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
{:
|
76
|
-
{:
|
77
|
-
{:
|
78
|
-
{:
|
79
|
-
{:
|
80
|
-
{:
|
81
|
-
{:
|
82
|
-
{:
|
83
|
-
{:
|
84
|
-
|
68
|
+
@create_options[:server_def].merge!(user_data: locate_config_value(:user_data)) if locate_config_value(:user_data)
|
69
|
+
@create_options[:server_def].merge!(nics: locate_config_value(:network_ids).map { |nic| nic_id = { 'net_id' => nic } }) if locate_config_value(:network_ids)
|
70
|
+
|
71
|
+
Chef::Log.debug("Create server params - server_def = #{@create_options[:server_def]}")
|
72
|
+
# set columns_with_info map
|
73
|
+
@columns_with_info = [
|
74
|
+
{ label: 'Instance ID', key: 'id' },
|
75
|
+
{ label: 'Name', key: 'name' },
|
76
|
+
{ label: 'Public IP', key: 'addresses', value_callback: method(:primary_public_ip_address) },
|
77
|
+
{ label: 'Private IP', key: 'addresses', value_callback: method(:primary_private_ip_address) },
|
78
|
+
{ label: 'Flavor', key: 'flavor', value_callback: method(:get_id) },
|
79
|
+
{ label: 'Image', key: 'image', value_callback: method(:get_id) },
|
80
|
+
{ label: 'Keypair', key: 'key_name' },
|
81
|
+
{ label: 'State', key: 'state' },
|
82
|
+
{ label: 'Availability Zone', key: 'availability_zone' }
|
83
|
+
]
|
85
84
|
end
|
86
85
|
|
87
86
|
def get_id(value)
|
@@ -91,22 +90,22 @@ class Chef
|
|
91
90
|
# Setup the floating ip after server creation.
|
92
91
|
def after_exec_command
|
93
92
|
Chef::Log.debug("Addresses #{server.addresses}")
|
94
|
-
msg_pair(
|
95
|
-
msg_pair(
|
93
|
+
msg_pair('Public IP Address', primary_public_ip_address(server.addresses)) if primary_public_ip_address(server.addresses)
|
94
|
+
msg_pair('Private IP Address', primary_private_ip_address(server.addresses)) if primary_private_ip_address(server.addresses)
|
96
95
|
|
97
96
|
floating_address = locate_config_value(:openstack_floating_ip)
|
98
|
-
bind_ip = primary_network_ip_address(server.addresses,server.addresses.keys[0])
|
97
|
+
bind_ip = primary_network_ip_address(server.addresses, server.addresses.keys[0])
|
99
98
|
Chef::Log.debug("Floating IP Address requested #{floating_address}")
|
100
|
-
unless (floating_address == '-1') #no floating IP requested
|
99
|
+
unless (floating_address == '-1') # no floating IP requested
|
101
100
|
addresses = service.connection.addresses
|
102
|
-
#floating requested without value
|
101
|
+
# floating requested without value
|
103
102
|
if floating_address.nil?
|
104
|
-
free_floating = addresses.find_index {|a| a.fixed_ip.nil?}
|
103
|
+
free_floating = addresses.find_index { |a| a.fixed_ip.nil? }
|
105
104
|
begin
|
106
|
-
if free_floating.nil? #no free floating IP found
|
107
|
-
error_message =
|
105
|
+
if free_floating.nil? # no free floating IP found
|
106
|
+
error_message = 'Unable to assign a Floating IP from allocated IPs.'
|
108
107
|
ui.fatal(error_message)
|
109
|
-
|
108
|
+
fail CloudExceptions::ServerSetupError, error_message
|
110
109
|
else
|
111
110
|
floating_address = addresses[free_floating].ip
|
112
111
|
end
|
@@ -117,22 +116,22 @@ class Chef
|
|
117
116
|
end
|
118
117
|
|
119
118
|
# Pull the port_id for the associate_floating_ip
|
120
|
-
port_id = @service.network.list_ports[:body]['ports'].find {|x| x['fixed_ips'][0]['ip_address'] == bind_ip}['id']
|
121
|
-
fixed_ip_address = service.network.list_ports[:body][
|
119
|
+
port_id = @service.network.list_ports[:body]['ports'].find { |x| x['fixed_ips'][0]['ip_address'] == bind_ip }['id']
|
120
|
+
fixed_ip_address = service.network.list_ports[:body]['ports'].find { |x| x['id'] == port_id }['fixed_ips'][0]['ip_address']
|
122
121
|
|
123
122
|
floating_ip_id = get_floating_ip_id(floating_address)
|
124
123
|
# Associate the floating ip via the neutron/network api
|
125
|
-
@service.network.associate_floating_ip(floating_ip_id, port_id,
|
124
|
+
@service.network.associate_floating_ip(floating_ip_id, port_id, fixed_ip_address: fixed_ip_address)
|
126
125
|
|
127
|
-
#a bit of a hack, but server.reload takes a long time
|
128
|
-
(server.addresses['public'] ||= []) << {
|
129
|
-
msg_pair(
|
126
|
+
# a bit of a hack, but server.reload takes a long time
|
127
|
+
(server.addresses['public'] ||= []) << { 'version' => 4, 'addr' => floating_address }
|
128
|
+
msg_pair('Floating IP Address', floating_address)
|
130
129
|
end
|
131
130
|
|
132
131
|
Chef::Log.debug("Addresses #{server.addresses}")
|
133
132
|
Chef::Log.debug("Public IP Address actual: #{primary_public_ip_address(server.addresses)}") if primary_public_ip_address(server.addresses)
|
134
133
|
|
135
|
-
msg_pair(
|
134
|
+
msg_pair('Private IP Address', primary_private_ip_address(server.addresses)) if primary_private_ip_address(server.addresses)
|
136
135
|
super
|
137
136
|
end
|
138
137
|
|
@@ -145,13 +144,13 @@ class Chef
|
|
145
144
|
# The bootstrap network is always initialised to 'public' when a network name isn't specified. Therefore,
|
146
145
|
# only set the bootstrap network to 'private' if still initialised to public and nothing was specified for
|
147
146
|
# the private network name.
|
148
|
-
config[:bootstrap_network] = 'private' if
|
147
|
+
config[:bootstrap_network] = 'private' if config[:private_network] && config[:bootstrap_network] == 'public'
|
149
148
|
|
150
149
|
# Which IP address to bootstrap
|
151
150
|
unless config[:network] # --no-network
|
152
151
|
bootstrap_ip_address = primary_public_ip_address(server.addresses) ||
|
153
|
-
|
154
|
-
|
152
|
+
primary_private_ip_address(server.addresses) ||
|
153
|
+
server.addresses.first[1][0]['addr']
|
155
154
|
Chef::Log.debug("No Bootstrap Network: #{config[:bootstrap_network]}")
|
156
155
|
else
|
157
156
|
bootstrap_ip_address = primary_network_ip_address(server.addresses, config[:bootstrap_network])
|
@@ -160,14 +159,14 @@ class Chef
|
|
160
159
|
|
161
160
|
Chef::Log.debug("Bootstrap IP Address: #{bootstrap_ip_address}")
|
162
161
|
if bootstrap_ip_address.nil?
|
163
|
-
error_message =
|
162
|
+
error_message = 'No IP address available for bootstrapping.'
|
164
163
|
ui.error(error_message)
|
165
|
-
|
164
|
+
fail CloudExceptions::BootstrapError, error_message
|
166
165
|
end
|
167
166
|
config[:bootstrap_ip_address] = bootstrap_ip_address
|
168
167
|
|
169
168
|
config[:hints] ||= {}
|
170
|
-
config[:hints][
|
169
|
+
config[:hints]['openstack'] ||= {}
|
171
170
|
end
|
172
171
|
|
173
172
|
def validate_params!
|
@@ -178,15 +177,15 @@ class Chef
|
|
178
177
|
|
179
178
|
if locate_config_value(:bootstrap_protocol) == 'winrm'
|
180
179
|
if locate_config_value(:winrm_password).nil?
|
181
|
-
errors <<
|
180
|
+
errors << 'You must provide Winrm Password.'
|
182
181
|
end
|
183
182
|
elsif locate_config_value(:bootstrap_protocol) != 'ssh'
|
184
|
-
errors <<
|
183
|
+
errors << 'You must provide a valid bootstrap protocol. options [ssh/winrm]. For linux type images, options [ssh]'
|
185
184
|
end
|
186
185
|
|
187
|
-
errors <<
|
188
|
-
error_message =
|
189
|
-
|
186
|
+
errors << 'You must provide --image-os-type option [windows/linux]' unless %w(windows linux).include?(locate_config_value(:image_os_type))
|
187
|
+
error_message = ''
|
188
|
+
fail CloudExceptions::ValidationError, error_message if errors.each { |e| ui.error(e); error_message = "#{error_message} #{e}." }.any?
|
190
189
|
end
|
191
190
|
|
192
191
|
def is_image_valid?
|
@@ -200,9 +199,7 @@ class Chef
|
|
200
199
|
def is_floating_ip_valid?
|
201
200
|
address = locate_config_value(:openstack_floating_ip)
|
202
201
|
|
203
|
-
if address == '-1' # no floating IP requested
|
204
|
-
return true
|
205
|
-
end
|
202
|
+
return true if address == '-1' # no floating IP requested
|
206
203
|
|
207
204
|
addresses = service.connection.addresses
|
208
205
|
return false if addresses.empty? # no floating IPs
|
@@ -225,23 +222,23 @@ class Chef
|
|
225
222
|
|
226
223
|
def post_connection_validations
|
227
224
|
errors = []
|
228
|
-
errors <<
|
229
|
-
errors <<
|
230
|
-
errors <<
|
231
|
-
error_message =
|
232
|
-
|
225
|
+
errors << 'You have not provided a valid image ID. Please note the options for this value are -I or --image.' unless is_image_valid?
|
226
|
+
errors << 'You have not provided a valid flavor ID. Please note the options for this value are -f or --flavor.' unless is_flavor_valid?
|
227
|
+
errors << 'You have either requested an invalid floating IP address or none are available.' unless is_floating_ip_valid?
|
228
|
+
error_message = ''
|
229
|
+
fail CloudExceptions::ValidationError, error_message if errors.each { |e| ui.error(e); error_message = "#{error_message} #{e}." }.any?
|
233
230
|
end
|
234
231
|
|
235
232
|
def get_floating_ip_id(floating_address)
|
236
233
|
# required for this method to work
|
237
234
|
floating_ip_id = -1
|
238
235
|
# Figure out the id for the port that the floating ip you requested
|
239
|
-
@service.network.list_floating_ips[:body][
|
240
|
-
if x[
|
241
|
-
floating_ip_id = x[
|
236
|
+
@service.network.list_floating_ips[:body]['floatingips'].each do |x|
|
237
|
+
if x['floating_ip_address'] == floating_address
|
238
|
+
floating_ip_id = x['id']
|
242
239
|
end
|
243
240
|
end
|
244
|
-
|
241
|
+
floating_ip_id
|
245
242
|
end
|
246
243
|
end
|
247
244
|
end
|
@@ -1,26 +1,25 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Siddheshwar More (<siddheshwar.more@clogeny.com>)
|
3
|
-
# Author:: Kaustubh Deorukhkar (<kaustubh@clogeny.com>)
|
4
|
-
# Copyright:: Copyright (c) 2013 Chef Software, Inc.
|
5
|
-
#
|
6
|
-
|
7
|
-
require 'chef/knife/cloud/server/delete_options'
|
8
|
-
require 'chef/knife/cloud/server/delete_command'
|
9
|
-
require 'chef/knife/cloud/openstack_service'
|
10
|
-
require 'chef/knife/cloud/openstack_service_options'
|
11
|
-
require 'chef/knife/openstack_helpers'
|
12
|
-
|
13
|
-
class Chef
|
14
|
-
class Knife
|
15
|
-
class Cloud
|
16
|
-
class OpenstackServerDelete < ServerDeleteCommand
|
17
|
-
include ServerDeleteOptions
|
18
|
-
include OpenstackServiceOptions
|
19
|
-
include OpenstackHelpers
|
20
|
-
|
21
|
-
banner
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
1
|
+
#
|
2
|
+
# Author:: Siddheshwar More (<siddheshwar.more@clogeny.com>)
|
3
|
+
# Author:: Kaustubh Deorukhkar (<kaustubh@clogeny.com>)
|
4
|
+
# Copyright:: Copyright (c) 2013 Chef Software, Inc.
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'chef/knife/cloud/server/delete_options'
|
8
|
+
require 'chef/knife/cloud/server/delete_command'
|
9
|
+
require 'chef/knife/cloud/openstack_service'
|
10
|
+
require 'chef/knife/cloud/openstack_service_options'
|
11
|
+
require 'chef/knife/openstack_helpers'
|
12
|
+
|
13
|
+
class Chef
|
14
|
+
class Knife
|
15
|
+
class Cloud
|
16
|
+
class OpenstackServerDelete < ServerDeleteCommand
|
17
|
+
include ServerDeleteOptions
|
18
|
+
include OpenstackServiceOptions
|
19
|
+
include OpenstackHelpers
|
20
|
+
|
21
|
+
banner 'knife openstack server delete INSTANCEID [INSTANCEID] (options)'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|