knife-openstack 2.0.1 → 4.0.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 (60) hide show
  1. checksums.yaml +5 -5
  2. data/lib/chef/knife/cloud/openstack_server_create_options.rb +64 -51
  3. data/lib/chef/knife/cloud/openstack_service.rb +33 -17
  4. data/lib/chef/knife/cloud/openstack_service_options.rb +34 -24
  5. data/lib/chef/knife/openstack_flavor_list.rb +18 -4
  6. data/lib/chef/knife/openstack_floating_ip_allocate.rb +22 -9
  7. data/lib/chef/knife/openstack_floating_ip_associate.rb +24 -12
  8. data/lib/chef/knife/openstack_floating_ip_disassociate.rb +25 -12
  9. data/lib/chef/knife/openstack_floating_ip_list.rb +18 -4
  10. data/lib/chef/knife/openstack_floating_ip_release.rb +16 -4
  11. data/lib/chef/knife/openstack_group_list.rb +21 -4
  12. data/lib/chef/knife/openstack_helpers.rb +20 -4
  13. data/lib/chef/knife/openstack_image_list.rb +22 -8
  14. data/lib/chef/knife/openstack_network_list.rb +18 -4
  15. data/lib/chef/knife/openstack_server_create.rb +36 -35
  16. data/lib/chef/knife/openstack_server_delete.rb +17 -5
  17. data/lib/chef/knife/openstack_server_list.rb +5 -6
  18. data/lib/chef/knife/openstack_server_show.rb +4 -5
  19. data/lib/chef/knife/openstack_volume_list.rb +10 -9
  20. data/lib/knife-openstack/version.rb +2 -2
  21. metadata +17 -91
  22. data/.github/ISSUE_TEMPLATE.md +0 -21
  23. data/.gitignore +0 -32
  24. data/.travis.yml +0 -10
  25. data/CHANGELOG.md +0 -335
  26. data/CONTRIBUTING.MD +0 -164
  27. data/Gemfile +0 -21
  28. data/README.md +0 -179
  29. data/Rakefile +0 -27
  30. data/knife-openstack.gemspec +0 -30
  31. data/spec/functional/flavor_list_func_spec.rb +0 -47
  32. data/spec/functional/floating_ip_list_func_spec.rb +0 -48
  33. data/spec/functional/group_list_func_spec.rb +0 -65
  34. data/spec/functional/image_list_func_spec.rb +0 -53
  35. data/spec/functional/network_list_func_spec.rb +0 -46
  36. data/spec/functional/server_create_func_spec.rb +0 -118
  37. data/spec/functional/server_delete_func_spec.rb +0 -84
  38. data/spec/functional/server_list_func_spec.rb +0 -98
  39. data/spec/functional/server_show_func_spec.rb +0 -46
  40. data/spec/functional/volume_list_func_spec.rb +0 -46
  41. data/spec/integration/cleanup.rb +0 -89
  42. data/spec/integration/config/environment.yml.sample +0 -13
  43. data/spec/integration/openstack_spec.rb +0 -649
  44. data/spec/spec_context.rb +0 -56
  45. data/spec/spec_helper.rb +0 -128
  46. data/spec/unit/openstack_flavor_list_spec.rb +0 -30
  47. data/spec/unit/openstack_floating_ip_allocate_spec.rb +0 -56
  48. data/spec/unit/openstack_floating_ip_associate_spec.rb +0 -40
  49. data/spec/unit/openstack_floating_ip_disassociate_spec.rb +0 -39
  50. data/spec/unit/openstack_floating_ip_list_spec.rb +0 -27
  51. data/spec/unit/openstack_floating_ip_release_spec.rb +0 -49
  52. data/spec/unit/openstack_group_list_spec.rb +0 -44
  53. data/spec/unit/openstack_image_list_spec.rb +0 -32
  54. data/spec/unit/openstack_network_list_spec.rb +0 -39
  55. data/spec/unit/openstack_server_create_spec.rb +0 -449
  56. data/spec/unit/openstack_server_delete_spec.rb +0 -43
  57. data/spec/unit/openstack_server_list_spec.rb +0 -32
  58. data/spec/unit/openstack_server_show_spec.rb +0 -42
  59. data/spec/unit/openstack_service_spec.rb +0 -128
  60. data/spec/unit/openstack_volume_list_spec.rb +0 -30
@@ -1,10 +1,24 @@
1
- # frozen_string_literal: true
1
+ #
2
2
  # Author:: Vasundhara Jagdale (<vasundhara.jagdale@clogeny.com>)
3
- # Copyright:: Copyright (c) 2015 Chef Software, Inc.
3
+ # Copyright:: Copyright (c) Chef Software Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
4
18
 
5
- require "chef/knife/openstack_helpers"
6
- require "chef/knife/cloud/openstack_service_options"
7
- require "chef/knife/cloud/openstack_service"
19
+ require_relative "openstack_helpers"
20
+ require_relative "cloud/openstack_service_options"
21
+ require_relative "cloud/openstack_service"
8
22
  require "chef/knife/cloud/command"
9
23
 
10
24
  class Chef
@@ -17,10 +31,9 @@ class Chef
17
31
  banner "knife openstack floating_ip disassociate IP (options)"
18
32
 
19
33
  option :instance_id,
20
- long: "--instance-id ID",
21
- description: "Instance id to disassociate with.",
22
- proc: proc { |key| Chef::Config[:knife][:instance_id] = key },
23
- required: true
34
+ long: "--instance-id ID",
35
+ description: "Instance id to disassociate with.",
36
+ required: true
24
37
 
25
38
  def execute_command
26
39
  if @name_args[0]
@@ -29,10 +42,10 @@ class Chef
29
42
  ui.error "Please provide Floating IP to disassociate."
30
43
  exit 1
31
44
  end
32
- instance_id = locate_config_value(:instance_id)
33
- response = @service.disassociate_address(instance_id, floating_ip)
45
+
46
+ response = @service.disassociate_address(config[:instance_id], floating_ip)
34
47
  if response && response.status == 202
35
- ui.info "Floating IP #{floating_ip} disassociated with Instance #{instance_id}"
48
+ ui.info "Floating IP #{floating_ip} disassociated with Instance #{config[:instance_id]}"
36
49
  end
37
50
  end
38
51
  end
@@ -1,10 +1,24 @@
1
- # frozen_string_literal: true
1
+ #
2
2
  # Author:: Vasundhara Jagdale (<vasundhara.jagdale@clogeny.com>)
3
- # Copyright:: Copyright (c) 2015 Chef Software, Inc.
3
+ # Copyright:: Copyright 2015-2020 Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
4
18
 
5
19
  require "chef/knife/cloud/list_resource_command"
6
- require "chef/knife/openstack_helpers"
7
- require "chef/knife/cloud/openstack_service_options"
20
+ require_relative "openstack_helpers"
21
+ require_relative "cloud/openstack_service_options"
8
22
 
9
23
  class Chef
10
24
  class Knife
@@ -1,11 +1,23 @@
1
- # frozen_string_literal: true
2
1
  #
3
2
  # Author:: Vasundhara Jagdale (<vasundhara.jagdale@clogeny.com>)
4
- # Copyright:: Copyright (c) 2015 Chef Software, Inc.
3
+ # Copyright:: Copyright 2015-2020 Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
5
17
  #
6
18
 
7
- require "chef/knife/openstack_helpers"
8
- require "chef/knife/cloud/openstack_service_options"
19
+ require_relative "openstack_helpers"
20
+ require_relative "cloud/openstack_service_options"
9
21
  require "chef/knife/cloud/command"
10
22
 
11
23
  class Chef
@@ -1,7 +1,24 @@
1
- # frozen_string_literal: true
1
+ #
2
+ # Copyright:: Copyright 2018 Chef Software, Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
2
18
  require "chef/knife/cloud/list_resource_command"
3
- require "chef/knife/openstack_helpers"
4
- require "chef/knife/cloud/openstack_service_options"
19
+ require_relative "openstack_helpers"
20
+ require_relative "cloud/openstack_service_options"
21
+ require "chef/json_compat"
5
22
 
6
23
  class Chef
7
24
  class Knife
@@ -16,7 +33,7 @@ class Chef
16
33
  @service.connection.security_groups
17
34
  rescue Excon::Errors::BadRequest => e
18
35
  response = Chef::JSONCompat.from_json(e.response.body)
19
- ui.fatal("Unknown server error (#{response['badRequest']['code']}): #{response['badRequest']['message']}")
36
+ ui.fatal("Unknown server error (#{response["badRequest"]["code"]}): #{response["badRequest"]["message"]}")
20
37
  raise e
21
38
  end
22
39
 
@@ -1,5 +1,21 @@
1
- # frozen_string_literal: true
2
- require "chef/knife/cloud/openstack_service_options"
1
+ #
2
+ # Copyright:: Copyright (c) Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require_relative "cloud/openstack_service_options"
3
19
 
4
20
  class Chef
5
21
  class Knife
@@ -18,7 +34,7 @@ class Chef
18
34
  end
19
35
 
20
36
  def create_service_instance
21
- OpenstackService.new
37
+ OpenstackService.new(config: config)
22
38
  end
23
39
 
24
40
  def validate!
@@ -32,7 +48,7 @@ class Chef
32
48
  ips.each do |ip|
33
49
  version = "IPv6" if ip["version"] == 6
34
50
  version = "IPv4" if ip["version"] == 4
35
- info << "#{addresses.keys[0]}:#{version}: #{ip['addr']}"
51
+ info << "#{addresses.keys[0]}:#{version}: #{ip["addr"]}"
36
52
  end
37
53
  end
38
54
  info.join(" ")
@@ -1,10 +1,24 @@
1
- # frozen_string_literal: true
1
+ #
2
2
  # Author:: Prabhu Das (<prabhu.das@clogeny.com>)
3
- # Copyright:: Copyright (c) 2014 Chef Software, Inc.
3
+ # Copyright:: Copyright 2014-2020 Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
4
18
 
5
19
  require "chef/knife/cloud/list_resource_command"
6
- require "chef/knife/openstack_helpers"
7
- require "chef/knife/cloud/openstack_service_options"
20
+ require_relative "openstack_helpers"
21
+ require_relative "cloud/openstack_service_options"
8
22
 
9
23
  class Chef
10
24
  class Knife
@@ -16,10 +30,10 @@ class Chef
16
30
  banner "knife openstack image list (options)"
17
31
 
18
32
  option :disable_filter,
19
- long: "--disable-filter",
20
- description: "Disable filtering of the image list. Currently filters names ending with 'initrd' or 'kernel'",
21
- boolean: true,
22
- default: false
33
+ long: "--disable-filter",
34
+ description: "Disable filtering of the image list. Currently filters names ending with 'initrd' or 'kernel'",
35
+ boolean: true,
36
+ default: false
23
37
 
24
38
  def before_exec_command
25
39
  # set resource_filters
@@ -1,10 +1,24 @@
1
- # frozen_string_literal: true
1
+ #
2
2
  # Author:: Prabhu Das (<prabhu.das@clogeny.com>)
3
- # Copyright:: Copyright (c) 2014 Chef Software, Inc.
3
+ # Copyright:: Copyright 2014-2020 Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
4
18
 
5
19
  require "chef/knife/cloud/list_resource_command"
6
- require "chef/knife/openstack_helpers"
7
- require "chef/knife/cloud/openstack_service_options"
20
+ require_relative "openstack_helpers"
21
+ require_relative "cloud/openstack_service_options"
8
22
 
9
23
  class Chef
10
24
  class Knife
@@ -1,9 +1,9 @@
1
- # frozen_string_literal: true
2
1
  #
3
- # Author:: Seth Chisamore (<schisamo@getchef.com>)
4
- # Author:: Matt Ray (<matt@getchef.com>)
2
+ # Author:: Seth Chisamore (<schisamo@chef.io>)
3
+ # Author:: Matt Ray (<matt@chef.io>)
5
4
  # Author:: Chirag Jog (<chirag@clogeny.com>)
6
- # Copyright:: Copyright (c) 2011-2014 Chef Software, Inc.
5
+ # Author:: Lance Albertson (<lance@osuosl.org>)
6
+ # Copyright:: Copyright (c) Chef Software Inc.
7
7
  # License:: Apache License, Version 2.0
8
8
  #
9
9
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,10 +20,10 @@
20
20
  #
21
21
 
22
22
  require "chef/knife/cloud/server/create_command"
23
- require "chef/knife/openstack_helpers"
24
- require "chef/knife/cloud/openstack_server_create_options"
25
- require "chef/knife/cloud/openstack_service"
26
- require "chef/knife/cloud/openstack_service_options"
23
+ require_relative "openstack_helpers"
24
+ require_relative "cloud/openstack_server_create_options"
25
+ require_relative "cloud/openstack_service"
26
+ require_relative "cloud/openstack_service_options"
27
27
  require "chef/knife/cloud/exceptions"
28
28
 
29
29
  class Chef
@@ -43,19 +43,19 @@ class Chef
43
43
  server_def: {
44
44
  # servers require a name, knife-cloud generates the chef_node_name
45
45
  :name => config[:chef_node_name],
46
- :image_ref => service.get_image(locate_config_value(:image)).id,
47
- :flavor_ref => service.get_flavor(locate_config_value(:flavor)).id,
48
- :security_groups => locate_config_value(:openstack_security_groups),
49
- :availability_zone => locate_config_value(:availability_zone),
50
- "os:scheduler_hints" => locate_config_value(:openstack_scheduler_hints),
51
- :metadata => locate_config_value(:metadata),
52
- :key_name => locate_config_value(:openstack_ssh_key_id),
46
+ :image_ref => service.get_image(config[:image]).id,
47
+ :flavor_ref => service.get_flavor(config[:flavor]).id,
48
+ :security_groups => config[:openstack_security_groups],
49
+ :availability_zone => config[:availability_zone],
50
+ "os:scheduler_hints" => config[:openstack_scheduler_hints],
51
+ :metadata => config[:metadata],
52
+ :key_name => config[:openstack_ssh_key_id],
53
53
  },
54
- server_create_timeout: locate_config_value(:server_create_timeout),
54
+ server_create_timeout: config[:server_create_timeout],
55
55
  }
56
- unless locate_config_value(:openstack_volumes).nil?
56
+ unless config[:openstack_volumes].nil?
57
57
  counter = 99
58
- @create_options[:server_def][:block_device_mapping] = locate_config_value(:openstack_volumes).map do |vol|
58
+ @create_options[:server_def][:block_device_mapping] = config[:openstack_volumes].map do |vol|
59
59
  counter += 1
60
60
  {
61
61
  volume_id: vol,
@@ -66,8 +66,8 @@ class Chef
66
66
  end
67
67
  end
68
68
 
69
- @create_options[:server_def][:user_data] = locate_config_value(:user_data) if locate_config_value(:user_data)
70
- @create_options[:server_def][:nics] = locate_config_value(:network_ids).map { |nic| nic_id = { "net_id" => nic } } if locate_config_value(:network_ids)
69
+ @create_options[:server_def][:user_data] = config[:user_data] if config[:user_data]
70
+ @create_options[:server_def][:nics] = config[:network_ids].map { |nic| nic_id = { "net_id" => nic } } if config[:network_ids]
71
71
 
72
72
  Chef::Log.debug("Create server params - server_def = #{@create_options[:server_def]}")
73
73
  # set columns_with_info map
@@ -94,7 +94,7 @@ class Chef
94
94
  msg_pair("Public IP Address", primary_public_ip_address(server.addresses)) if primary_public_ip_address(server.addresses)
95
95
  msg_pair("Private IP Address", primary_private_ip_address(server.addresses)) if primary_private_ip_address(server.addresses)
96
96
 
97
- floating_address = locate_config_value(:openstack_floating_ip)
97
+ floating_address = config[:openstack_floating_ip]
98
98
  bind_ip = primary_network_ip_address(server.addresses, server.addresses.keys[0])
99
99
  Chef::Log.debug("Floating IP Address requested #{floating_address}")
100
100
  unless floating_address == "-1" # no floating IP requested
@@ -140,7 +140,7 @@ class Chef
140
140
  super
141
141
 
142
142
  # Use SSH password either specified from command line or from openstack server instance
143
- config[:ssh_password] = locate_config_value(:ssh_password) || server.password unless config[:openstack_ssh_key_id]
143
+ config[:ssh_password] = config[:ssh_password] || server.password unless config[:openstack_ssh_key_id]
144
144
 
145
145
  # The bootstrap network is always initialised to 'public' when a network name isn't specified. Therefore,
146
146
  # only set the bootstrap network to 'private' if still initialised to public and nothing was specified for
@@ -172,51 +172,52 @@ class Chef
172
172
 
173
173
  def validate_params!
174
174
  # set param vm_name to a random value if the name is not set by the user (plugin)
175
- config[:chef_node_name] = get_node_name(locate_config_value(:chef_node_name), locate_config_value(:chef_node_name_prefix))
175
+ config[:chef_node_name] = get_node_name(config[:chef_node_name], config[:chef_node_name_prefix])
176
176
 
177
177
  errors = []
178
178
 
179
- if locate_config_value(:bootstrap_protocol) == "winrm"
180
- if locate_config_value(:winrm_password).nil?
181
- errors << "You must provide Winrm Password."
179
+ if config[:connection_protocol] == "winrm"
180
+ if config[:connection_password].nil?
181
+ errors << "You must provide Connection Password."
182
182
  end
183
- elsif locate_config_value(:bootstrap_protocol) != "ssh"
183
+ elsif config[:connection_protocol] != "ssh"
184
184
  errors << "You must provide a valid bootstrap protocol. options [ssh/winrm]. For linux type images, options [ssh]"
185
185
  end
186
186
 
187
- errors << "You must provide --image-os-type option [windows/linux]" unless %w{windows linux}.include?(locate_config_value(:image_os_type))
187
+ errors << "You must provide --image-os-type option [windows/linux]" unless %w{windows linux}.include?(config[:image_os_type])
188
188
  error_message = ""
189
189
  raise CloudExceptions::ValidationError, error_message if errors.each { |e| ui.error(e); error_message = "#{error_message} #{e}." }.any?
190
190
  end
191
191
 
192
192
  def is_image_valid?
193
- service.get_image(locate_config_value(:image)).nil? ? false : true
193
+ service.get_image(config[:image]).nil? ? false : true
194
194
  end
195
195
 
196
196
  def is_flavor_valid?
197
- service.get_flavor(locate_config_value(:flavor)).nil? ? false : true
197
+ service.get_flavor(config[:flavor]).nil? ? false : true
198
198
  end
199
199
 
200
200
  def is_floating_ip_valid?
201
- address = locate_config_value(:openstack_floating_ip)
201
+ address = config[:openstack_floating_ip]
202
202
 
203
203
  return true if address == "-1" # no floating IP requested
204
204
 
205
205
  addresses = service.connection.addresses
206
206
  return false if addresses.empty? # no floating IPs
207
+
207
208
  # floating requested without value
208
209
  if address.nil?
209
210
  if addresses.find_index { |a| a.fixed_ip.nil? }
210
- return true
211
+ true
211
212
  else
212
- return false # no floating IPs available
213
+ false # no floating IPs available
213
214
  end
214
215
  else
215
216
  # floating requested with value
216
217
  if addresses.find_index { |a| a.ip == address }
217
- return true
218
+ true
218
219
  else
219
- return false # requested floating IP does not exist
220
+ false # requested floating IP does not exist
220
221
  end
221
222
  end
222
223
  end
@@ -1,15 +1,27 @@
1
- # frozen_string_literal: true
2
1
  #
3
2
  # Author:: Siddheshwar More (<siddheshwar.more@clogeny.com>)
4
3
  # Author:: Kaustubh Deorukhkar (<kaustubh@clogeny.com>)
5
- # Copyright:: Copyright (c) 2013 Chef Software, Inc.
4
+ # Copyright:: Copyright 2013-2020 Chef Software, Inc.
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
6
18
  #
7
19
 
8
20
  require "chef/knife/cloud/server/delete_options"
9
21
  require "chef/knife/cloud/server/delete_command"
10
- require "chef/knife/cloud/openstack_service"
11
- require "chef/knife/cloud/openstack_service_options"
12
- require "chef/knife/openstack_helpers"
22
+ require_relative "cloud/openstack_service"
23
+ require_relative "cloud/openstack_service_options"
24
+ require_relative "openstack_helpers"
13
25
 
14
26
  class Chef
15
27
  class Knife