chef-provisioning-fog 0.26.1 → 0.26.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +29 -8
  3. data/Rakefile +23 -12
  4. data/chef-provisioning-fog.gemspec +24 -27
  5. data/lib/chef/provider/fog_key_pair.rb +49 -53
  6. data/lib/chef/provider/scaleway_volume.rb +46 -48
  7. data/lib/chef/provisioning/driver_init/fog.rb +1 -1
  8. data/lib/chef/provisioning/fog_driver/driver.rb +646 -653
  9. data/lib/chef/provisioning/fog_driver/providers/aws.rb +411 -422
  10. data/lib/chef/provisioning/fog_driver/providers/aws/credentials.rb +88 -90
  11. data/lib/chef/provisioning/fog_driver/providers/cloudstack.rb +32 -34
  12. data/lib/chef/provisioning/fog_driver/providers/digitalocean.rb +98 -100
  13. data/lib/chef/provisioning/fog_driver/providers/google.rb +27 -34
  14. data/lib/chef/provisioning/fog_driver/providers/joyent.rb +53 -55
  15. data/lib/chef/provisioning/fog_driver/providers/openstack.rb +139 -146
  16. data/lib/chef/provisioning/fog_driver/providers/rackspace.rb +40 -44
  17. data/lib/chef/provisioning/fog_driver/providers/scaleway.rb +183 -189
  18. data/lib/chef/provisioning/fog_driver/providers/softlayer.rb +61 -64
  19. data/lib/chef/provisioning/fog_driver/providers/vcair.rb +72 -78
  20. data/lib/chef/provisioning/fog_driver/providers/xenserver.rb +56 -69
  21. data/lib/chef/provisioning/fog_driver/recipe_dsl.rb +11 -12
  22. data/lib/chef/provisioning/fog_driver/version.rb +1 -1
  23. data/lib/chef/resource/fog_key_pair.rb +8 -8
  24. data/lib/chef/resource/scaleway_volume.rb +8 -8
  25. data/spec/spec_helper.rb +7 -7
  26. data/spec/support/chef/provisioning/fog_driver/providers/testdriver.rb +3 -3
  27. data/spec/unit/chef/provisioning/fog_driver/driver_spec.rb +39 -38
  28. data/spec/unit/fog_driver_spec.rb +6 -8
  29. data/spec/unit/providers/aws/credentials_spec.rb +10 -10
  30. data/spec/unit/providers/rackspace_spec.rb +5 -6
  31. data/spec/unit/providers/scaleway_spec.rb +9 -9
  32. data/spec/unit/providers/softlayer.rb +7 -7
  33. metadata +6 -36
  34. data/README.md +0 -357
@@ -1,11 +1,10 @@
1
- #fog:XenServer:<XenServer IP>
1
+ # fog:XenServer:<XenServer IP>
2
2
  class Chef
3
3
  module Provisioning
4
4
  module FogDriver
5
5
  module Providers
6
6
  class XenServer < FogDriver::Driver
7
-
8
- Driver.register_provider_class('XenServer', FogDriver::Providers::XenServer)
7
+ Driver.register_provider_class("XenServer", FogDriver::Providers::XenServer)
9
8
 
10
9
  def creator
11
10
  compute_options[:xenserver_username]
@@ -13,15 +12,14 @@ class Chef
13
12
 
14
13
  def bootstrap_options_for(machine_spec, machine_options)
15
14
  bootstrap_options = super
16
- bootstrap_options[:tags] = bootstrap_options[:tags].map {|k,v| "#{k}: #{v}" }
15
+ bootstrap_options[:tags] = bootstrap_options[:tags].map { |k, v| "#{k}: #{v}" }
17
16
  bootstrap_options
18
17
  end
19
18
 
20
- def ssh_options_for(machine_spec, machine_options, server)
21
- { auth_methods: [ 'password' ],
19
+ def ssh_options_for(_machine_spec, machine_options, _server)
20
+ { auth_methods: ["password"],
22
21
  timeout: (machine_options[:ssh_timeout] || 600),
23
- password: machine_options[:ssh_password]
24
- }.merge(machine_options[:ssh_options] || {})
22
+ password: machine_options[:ssh_password] }.merge(machine_options[:ssh_options] || {})
25
23
  end
26
24
 
27
25
  def self.compute_options_for(provider, id, config)
@@ -29,12 +27,12 @@ class Chef
29
27
  new_compute_options[:provider] = provider
30
28
  new_config = { driver_options: { compute_options: new_compute_options } }
31
29
  new_defaults = {
32
- driver_options: { compute_options: {} },
33
- machine_options: { bootstrap_options: { affinity: id } }
30
+ driver_options: { compute_options: {} },
31
+ machine_options: { bootstrap_options: { affinity: id } }
34
32
  }
35
33
  result = Cheffish::MergedConfig.new(new_config, config, new_defaults)
36
34
 
37
- new_compute_options[:xenserver_url] = id if id && id != ''
35
+ new_compute_options[:xenserver_url] = id if id && id != ""
38
36
  credential = Fog.credentials
39
37
 
40
38
  new_compute_options[:xenserver_username] ||= credential[:xenserver_username]
@@ -50,9 +48,7 @@ class Chef
50
48
 
51
49
  def server_for(machine_spec)
52
50
  if machine_spec.reference
53
- compute.servers.get(compute.get_by_uuid(machine_spec.reference['server_id'], 'VM'))
54
- else
55
- nil
51
+ compute.servers.get(compute.get_by_uuid(machine_spec.reference["server_id"], "VM"))
56
52
  end
57
53
  end
58
54
 
@@ -60,10 +56,10 @@ class Chef
60
56
  result = {}
61
57
  specs_and_options.each do |machine_spec, _machine_options|
62
58
  if machine_spec.reference
63
- if machine_spec.reference['driver_url'] != driver_url
59
+ if machine_spec.reference["driver_url"] != driver_url
64
60
  raise "Switching a machine's driver from #{machine_spec.reference['driver_url']} to #{driver_url} for is not currently supported! Use machine :destroy and then re-create the machine on the new driver."
65
61
  end
66
- result[machine_spec] = compute.servers.get(compute.get_by_uuid(machine_spec.reference['server_id'], 'VM'))
62
+ result[machine_spec] = compute.servers.get(compute.get_by_uuid(machine_spec.reference["server_id"], "VM"))
67
63
  else
68
64
  result[machine_spec] = nil
69
65
  end
@@ -72,29 +68,28 @@ class Chef
72
68
  end
73
69
 
74
70
  def create_many_servers(num_servers, bootstrap_options, parallelizer)
75
- parallelizer.parallelize(1.upto(num_servers)) do |i|
71
+ parallelizer.parallelize(1.upto(num_servers)) do |_i|
76
72
  compute.default_template = bootstrap_options[:template] if bootstrap_options[:template]
77
- raise 'No server can be created without a template, please set a template name as bootstrap_options' unless compute.default_template
73
+ raise "No server can be created without a template, please set a template name as bootstrap_options" unless compute.default_template
78
74
  server = compute.default_template.clone bootstrap_options[:name]
79
75
 
80
76
  if bootstrap_options[:affinity]
81
77
  host = compute.hosts.all.select { |h| h.address == bootstrap_options[:affinity] }.first
82
- if !host
78
+ unless host
83
79
  raise "Host with ID #{bootstrap_options[:affinity]} not found."
84
80
  end
85
81
  server.affinity = host.reference
86
82
  end
87
83
 
88
-
89
84
  unless bootstrap_options[:memory].nil?
90
85
  mem = (bootstrap_options[:memory].to_i * 1024 * 1024).to_s
91
- server.set_attribute 'memory_limits', mem, mem, mem, mem
86
+ server.set_attribute "memory_limits", mem, mem, mem, mem
92
87
  end
93
88
 
94
89
  unless bootstrap_options[:cpus].nil?
95
90
  cpus = (bootstrap_options[:cpus]).to_s
96
- server.set_attribute 'VCPUs_max', cpus
97
- server.set_attribute 'VCPUs_at_startup', cpus
91
+ server.set_attribute "VCPUs_max", cpus
92
+ server.set_attribute "VCPUs_at_startup", cpus
98
93
  end
99
94
 
100
95
  # network configuration through xenstore
@@ -103,33 +98,30 @@ class Chef
103
98
  network = bootstrap_options[:network]
104
99
  net_names = network[:vifs]
105
100
  if net_names
106
- server.vifs.each {|x| x.destroy }
101
+ server.vifs.each(&:destroy)
107
102
  compute.networks.select { |net| Array(net_names).include? net.name }.each do |net|
108
103
  compute.vifs.create vm: server, network: net, device: "0"
109
104
  end
110
105
  end
111
- attrs['vm-data/ip'] = network[:vm_ip] if network[:vm_ip]
112
- attrs['vm-data/gw'] = network[:vm_gateway] if network[:vm_gateway]
113
- attrs['vm-data/nm'] = network[:vm_netmask] if network[:vm_netmask]
114
- attrs['vm-data/ns'] = network[:vm_dns] if network[:vm_dns]
115
- attrs['vm-data/dm'] = network[:vm_domain] if network[:vm_domain]
116
- if !attrs.empty?
117
- server.set_attribute 'xenstore_data', attrs
118
- end
106
+ attrs["vm-data/ip"] = network[:vm_ip] if network[:vm_ip]
107
+ attrs["vm-data/gw"] = network[:vm_gateway] if network[:vm_gateway]
108
+ attrs["vm-data/nm"] = network[:vm_netmask] if network[:vm_netmask]
109
+ attrs["vm-data/ns"] = network[:vm_dns] if network[:vm_dns]
110
+ attrs["vm-data/dm"] = network[:vm_domain] if network[:vm_domain]
111
+ server.set_attribute "xenstore_data", attrs unless attrs.empty?
119
112
  end
120
113
 
121
114
  userdevice = 1
122
- (bootstrap_options[:additional_disks] || Hash.new).each do |name, data|
115
+ (bootstrap_options[:additional_disks] || {}).each do |name, data|
123
116
  sr_name = data[:sr]
124
117
  storage_repository = compute.storage_repositories.find { |sr| sr.name == sr_name }
125
- raise 'You must specify sr name to add additional disks' unless storage_repository
126
- raise 'You must specify size to add additional disk' unless data[:size]
118
+ raise "You must specify sr name to add additional disks" unless storage_repository
119
+ raise "You must specify size to add additional disk" unless data[:size]
127
120
 
128
121
  gb = 1_073_741_824
129
122
  size = data[:size].to_i * gb
130
123
 
131
-
132
- vdi_params = { name: name}
124
+ vdi_params = { name: name }
133
125
  vdi_params[:storage_repository] = storage_repository
134
126
  vdi_params[:description] == data[:description] if data[:description]
135
127
  vdi_params[:virtual_size] = size.to_s
@@ -137,7 +129,6 @@ class Chef
137
129
 
138
130
  compute.vbds.create vm: server, vdi: vdi, userdevice: userdevice.to_s, bootable: false
139
131
  userdevice += 1
140
-
141
132
  end
142
133
 
143
134
  server.provision
@@ -147,10 +138,10 @@ class Chef
147
138
  end
148
139
 
149
140
  def start_server(action_handler, machine_spec, server)
150
- if server.state == 'Halted'
141
+ if server.state == "Halted"
151
142
  action_handler.perform_action "start machine #{machine_spec.name} (#{server.id} on #{driver_url})" do
152
143
  server.start
153
- machine_spec.reference['started_at'] = Time.now.to_i
144
+ machine_spec.reference["started_at"] = Time.now.to_i
154
145
  end
155
146
  machine_spec.save(action_handler)
156
147
  end
@@ -165,9 +156,8 @@ class Chef
165
156
  end
166
157
  end
167
158
 
168
-
169
159
  # Add methods required by the fog driver to XenServer's Server class
170
- require 'fog/compute/models/server'
160
+ require "fog/compute/models/server"
171
161
  module Fog
172
162
  module Compute
173
163
  class XenServer
@@ -182,15 +172,15 @@ module Fog
182
172
  end
183
173
 
184
174
  def public_ip_address
185
- if xenstore_data['vm-data/ip']
186
- xenstore_data['vm-data/ip']
175
+ if xenstore_data["vm-data/ip"]
176
+ xenstore_data["vm-data/ip"]
187
177
  else
188
178
  wait_for { tools_installed? }
189
179
  if tools_installed?
190
180
  guest_metrics.networks.first[1]
191
181
  else
192
- fail 'Unable to return IP address. Virtual machine does not ' \
193
- 'have XenTools installed or a timeout occurred.'
182
+ raise "Unable to return IP address. Virtual machine does not " \
183
+ "have XenTools installed or a timeout occurred."
194
184
  end
195
185
  end
196
186
  end
@@ -213,36 +203,33 @@ end
213
203
  module Fog
214
204
  module XenServer
215
205
  class Connection
216
- require 'xmlrpc/client'
206
+ require "xmlrpc/client"
217
207
  attr_reader :credentials
218
208
 
219
209
  def request(options, *params)
220
- begin
221
- parser = options.delete(:parser)
222
- method = options.delete(:method)
223
-
224
- if params.empty?
225
- response = @factory.call_async(method, @credentials)
210
+ parser = options.delete(:parser)
211
+ method = options.delete(:method)
212
+
213
+ if params.empty?
214
+ response = @factory.call_async(method, @credentials)
215
+ else
216
+ if params.length.eql?(1) && params.first.is_a?(Hash)
217
+ response = @factory.call_async(method, @credentials, params.first)
218
+ elsif params.length.eql?(2) && params.last.is_a?(Array)
219
+ response = @factory.call_async(method, @credentials, params.first, params.last)
226
220
  else
227
- if params.length.eql?(1) and params.first.is_a?(Hash)
228
- response = @factory.call_async(method, @credentials, params.first)
229
- elsif params.length.eql?(2) and params.last.is_a?(Array)
230
- response = @factory.call_async(method, @credentials, params.first, params.last)
231
- else
232
- response = eval("@factory.call_async('#{method}', '#{@credentials}', #{params.map { |p| p.is_a?(String) ? "'#{p}'" : p }.join(',')})")
233
- end
221
+ response = eval("@factory.call_async('#{method}', '#{@credentials}', #{params.map { |p| p.is_a?(String) ? "'#{p}'" : p }.join(',')})")
234
222
  end
235
- raise RequestFailed.new("#{method}: " + response["ErrorDescription"].to_s) unless response["Status"].eql? "Success"
236
- if parser
237
- parser.parse(response["Value"])
238
- response = parser.response
239
- end
240
-
241
- response
242
223
  end
224
+ raise RequestFailed, "#{method}: " + response["ErrorDescription"].to_s unless response["Status"].eql? "Success"
225
+ if parser
226
+ parser.parse(response["Value"])
227
+ response = parser.response
228
+ end
229
+
230
+ response
243
231
  end
244
232
  end
245
-
246
233
  end
247
234
  end
248
235
 
@@ -250,7 +237,7 @@ module Fog
250
237
  class Logger
251
238
  def self.deprecation(message)
252
239
  # Silence...ahh
253
- Chef::Log.debug('Fog: ' + message)
240
+ Chef::Log.debug("Fog: " + message)
254
241
  end
255
242
  end
256
243
  end
@@ -1,38 +1,37 @@
1
- require 'chef/provisioning/fog_driver/driver'
2
- require 'chef/resource/fog_key_pair'
3
- require 'chef/provider/fog_key_pair'
4
- require 'chef/resource/scaleway_volume'
5
- require 'chef/provider/scaleway_volume'
1
+ require "chef/provisioning/fog_driver/driver"
2
+ require "chef/resource/fog_key_pair"
3
+ require "chef/provider/fog_key_pair"
4
+ require "chef/resource/scaleway_volume"
5
+ require "chef/provider/scaleway_volume"
6
6
 
7
7
  class Chef
8
8
  module DSL
9
9
  module Recipe
10
10
  def with_fog_driver(provider, driver_options = nil, &block)
11
- config = Cheffish::MergedConfig.new({ :driver_options => driver_options }, run_context.config)
11
+ config = Cheffish::MergedConfig.new({ driver_options: driver_options }, run_context.config)
12
12
  driver = Driver.from_provider(provider, config)
13
13
  run_context.chef_provisioning.with_driver(driver, &block)
14
14
  end
15
15
 
16
16
  def with_fog_ec2_driver(driver_options = nil, &block)
17
- with_fog_driver('AWS', driver_options, &block)
17
+ with_fog_driver("AWS", driver_options, &block)
18
18
  end
19
19
 
20
20
  def with_fog_openstack_driver(driver_options = nil, &block)
21
- with_fog_driver('OpenStack', driver_options, &block)
21
+ with_fog_driver("OpenStack", driver_options, &block)
22
22
  end
23
23
 
24
24
  def with_fog_rackspace_driver(driver_options = nil, &block)
25
- with_fog_driver('Rackspace', driver_options, &block)
25
+ with_fog_driver("Rackspace", driver_options, &block)
26
26
  end
27
27
 
28
28
  def with_fog_vcair_driver(driver_options = nil, &block)
29
- with_fog_driver('vcair', driver_options, &block)
29
+ with_fog_driver("vcair", driver_options, &block)
30
30
  end
31
31
 
32
32
  def with_fog_scaleway_driver(driver_options = nil, &block)
33
- with_fog_driver('Scaleway', driver_options, &block)
33
+ with_fog_driver("Scaleway", driver_options, &block)
34
34
  end
35
-
36
35
  end
37
36
  end
38
37
  end
@@ -1,7 +1,7 @@
1
1
  class Chef
2
2
  module Provisioning
3
3
  module FogDriver
4
- VERSION = '0.26.1'
4
+ VERSION = "0.26.3".freeze
5
5
  end
6
6
  end
7
7
  end
@@ -1,7 +1,7 @@
1
- require 'chef/provisioning'
1
+ require "chef/provisioning"
2
2
 
3
3
  class Chef::Resource::FogKeyPair < Chef::Resource::LWRPBase
4
- self.resource_name = 'fog_key_pair'
4
+ self.resource_name = "fog_key_pair"
5
5
 
6
6
  def initialize(*args)
7
7
  super
@@ -13,14 +13,14 @@ class Chef::Resource::FogKeyPair < Chef::Resource::LWRPBase
13
13
 
14
14
  attribute :driver
15
15
  # Private key to use as input (will be generated if it does not exist)
16
- attribute :private_key_path, :kind_of => String
16
+ attribute :private_key_path, kind_of: String
17
17
  # Public key to use as input (will be generated if it does not exist)
18
- attribute :public_key_path, :kind_of => String
18
+ attribute :public_key_path, kind_of: String
19
19
  # List of parameters to the private_key resource used for generation of the key
20
- attribute :private_key_options, :kind_of => Hash
20
+ attribute :private_key_options, kind_of: Hash
21
21
 
22
- # TODO what is the right default for this?
23
- attribute :allow_overwrite, :kind_of => [TrueClass, FalseClass], :default => false
22
+ # TODO: what is the right default for this?
23
+ attribute :allow_overwrite, kind_of: [TrueClass, FalseClass], default: false
24
24
 
25
25
  # Proc that runs after the resource completes. Called with (resource, private_key, public_key)
26
26
  def after(&block)
@@ -28,7 +28,7 @@ class Chef::Resource::FogKeyPair < Chef::Resource::LWRPBase
28
28
  end
29
29
 
30
30
  # We are not interested in Chef's cloning behavior here.
31
- def load_prior_resource(*args)
31
+ def load_prior_resource(*_args)
32
32
  Chef::Log.debug("Overloading #{resource_name}.load_prior_resource with NOOP")
33
33
  end
34
34
  end
@@ -1,7 +1,7 @@
1
- require 'chef/provisioning'
1
+ require "chef/provisioning"
2
2
 
3
3
  class Chef::Resource::ScalewayVolume < Chef::Resource::LWRPBase
4
- self.resource_name = 'scaleway_volume'
4
+ self.resource_name = "scaleway_volume"
5
5
 
6
6
  def initialize(*args)
7
7
  super
@@ -18,15 +18,15 @@ class Chef::Resource::ScalewayVolume < Chef::Resource::LWRPBase
18
18
  attribute :volume_options
19
19
 
20
20
  def add_volume_options(options)
21
- if @volume_options
22
- @volume_options = Cheffish::MergedConfig.new(options, @volume_options)
23
- else
24
- @volume_options = options
25
- end
21
+ @volume_options = if @volume_options
22
+ Cheffish::MergedConfig.new(options, @volume_options)
23
+ else
24
+ options
25
+ end
26
26
  end
27
27
 
28
28
  # We are not interested in Chef's cloning behavior here.
29
- def load_prior_resource(*args)
29
+ def load_prior_resource(*_args)
30
30
  Chef::Log.debug("Overloading #{resource_name}.load_prior_resource with NOOP")
31
31
  end
32
32
  end
@@ -1,9 +1,9 @@
1
- $:.unshift File.expand_path('../../lib', __FILE__)
2
- $:.unshift File.expand_path('../support', __FILE__)
3
- require 'fog'
4
- require 'chef/provisioning'
5
- require 'chef/provisioning/fog_driver/driver'
6
- require 'simplecov'
1
+ $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
2
+ $LOAD_PATH.unshift File.expand_path("support", __dir__)
3
+ require "fog"
4
+ require "chef/provisioning"
5
+ require "chef/provisioning/fog_driver/driver"
6
+ require "simplecov"
7
7
 
8
8
  SimpleCov.start do
9
9
  # add_filter do |source_file|
@@ -20,7 +20,7 @@ RSpec.configure do |config|
20
20
  # order dependency and want to debug it, you can fix the order by providing
21
21
  # the seed, which is printed after each run.
22
22
  # --seed 1234
23
- config.order = 'random'
23
+ config.order = "random"
24
24
  end
25
25
 
26
26
  Fog.mock!
@@ -3,15 +3,15 @@ class Chef
3
3
  module FogDriver
4
4
  module Providers
5
5
  class TestDriver < FogDriver::Driver
6
- Driver.register_provider_class('TestDriver', Chef::Provisioning::FogDriver::Providers::TestDriver)
6
+ Driver.register_provider_class("TestDriver", Chef::Provisioning::FogDriver::Providers::TestDriver)
7
7
 
8
8
  attr_reader :config
9
9
  def initialize(driver_url, config)
10
10
  super
11
11
  end
12
12
 
13
- def self.compute_options_for(provider, id, config)
14
- [config, 'test']
13
+ def self.compute_options_for(_provider, _id, config)
14
+ [config, "test"]
15
15
  end
16
16
  end
17
17
  end
@@ -1,4 +1,4 @@
1
- require 'chef/provisioning/fog_driver/driver'
1
+ require "chef/provisioning/fog_driver/driver"
2
2
 
3
3
  describe Chef::Provisioning::FogDriver::Driver do
4
4
  let(:driver) { Chef::Provisioning::FogDriver::Driver.new("fog:OpenStack", {}) }
@@ -8,102 +8,103 @@ describe Chef::Provisioning::FogDriver::Driver do
8
8
  end
9
9
 
10
10
  describe "#determine_remote_host" do
11
- let(:machine_spec) { double("machine_spec", :reference => reference, :name => 'name') }
12
- let(:server) { double("server", :private_ip_address => 'private', :public_ip_address => 'public', :ip_addresses => ['first_ip_address'])}
11
+ let(:machine_spec) { double("machine_spec", reference: reference, name: "name") }
12
+ let(:server) { double("server", private_ip_address: "private", public_ip_address: "public", ip_addresses: ["first_ip_address"]) }
13
13
 
14
14
  context "when 'use_private_ip_for_ssh' is specified in the machine_spec.reference" do
15
- let(:reference) { { 'use_private_ip_for_ssh' => true } }
15
+ let(:reference) { { "use_private_ip_for_ssh" => true } }
16
16
  it "returns the private ip" do
17
- expect(driver.determine_remote_host(machine_spec, server)).to eq('private')
18
- expect(reference).to eq( {'transport_address_location' => :private_ip} )
17
+ expect(driver.determine_remote_host(machine_spec, server)).to eq("private")
18
+ expect(reference).to eq("transport_address_location" => :private_ip)
19
19
  end
20
20
  end
21
21
 
22
22
  context "when 'transport_address_location' is set to :private_ip" do
23
- let(:reference) { { 'transport_address_location' => :private_ip } }
23
+ let(:reference) { { "transport_address_location" => :private_ip } }
24
24
  it "returns the private ip" do
25
- expect(driver.determine_remote_host(machine_spec, server)).to eq('private')
25
+ expect(driver.determine_remote_host(machine_spec, server)).to eq("private")
26
26
  end
27
27
  end
28
28
 
29
29
  context "when 'transport_address_location' is set to :ip_addresses" do
30
- let(:reference) { { 'transport_address_location' => :ip_addresses } }
30
+ let(:reference) { { "transport_address_location" => :ip_addresses } }
31
31
  it "returns the first ip_address from array" do
32
- expect(driver.determine_remote_host(machine_spec, server)).to eq('first_ip_address')
32
+ expect(driver.determine_remote_host(machine_spec, server)).to eq("first_ip_address")
33
33
  end
34
34
  end
35
35
 
36
36
  context "when 'transport_address_location' is set to :public_ip" do
37
- let(:reference) { { 'transport_address_location' => :public_ip } }
37
+ let(:reference) { { "transport_address_location" => :public_ip } }
38
38
  it "returns the public ip" do
39
- expect(driver.determine_remote_host(machine_spec, server)).to eq('public')
39
+ expect(driver.determine_remote_host(machine_spec, server)).to eq("public")
40
40
  end
41
41
  end
42
42
 
43
43
  context "when machine_spec.reference does not specify the transport type" do
44
- let(:reference) { Hash.new }
44
+ let(:reference) { {} }
45
45
 
46
46
  context "when the machine does not have a public_ip_address" do
47
- let(:server) { double("server", :private_ip_address => 'private', :public_ip_address => nil, :ip_addresses => ['first_ip_address'])}
47
+ let(:server) { double("server", private_ip_address: "private", public_ip_address: nil, ip_addresses: ["first_ip_address"]) }
48
48
 
49
49
  it "returns the private ip" do
50
- expect(driver.determine_remote_host(machine_spec, server)).to eq('private')
50
+ expect(driver.determine_remote_host(machine_spec, server)).to eq("private")
51
51
  end
52
52
  end
53
53
 
54
54
  context "when the machine has a public_ip_address" do
55
- let(:server) { double("server", :private_ip_address => 'private', :public_ip_address => 'public', :ip_addresses => ['first_ip_address'])}
55
+ let(:server) { double("server", private_ip_address: "private", public_ip_address: "public", ip_addresses: ["first_ip_address"]) }
56
56
 
57
57
  it "returns the public ip" do
58
- expect(driver.determine_remote_host(machine_spec, server)).to eq('public')
58
+ expect(driver.determine_remote_host(machine_spec, server)).to eq("public")
59
59
  end
60
60
  end
61
61
 
62
62
  context "when the machine does not have a public_ip_address or private_ip_address" do
63
- let(:server) { double("server", :private_ip_address => nil, :public_ip_address => nil, :ip_addresses => ['first_ip_address'], :id => 'id')}
63
+ let(:server) { double("server", private_ip_address: nil, public_ip_address: nil, ip_addresses: ["first_ip_address"], id: "id") }
64
64
 
65
65
  it "raises an error" do
66
- expect {driver.determine_remote_host(machine_spec, server)}.to raise_error("Server #{server.id} has no private or public IP address!")
66
+ expect { driver.determine_remote_host(machine_spec, server) }.to raise_error("Server #{server.id} has no private or public IP address!")
67
67
  end
68
68
  end
69
69
  end
70
70
  end
71
71
 
72
- describe '#private_key_for' do
73
- let(:machine_spec) { double('machine_spec', reference: {}, name: 'my_machine') }
74
- let(:machine_options) { { bootstrap_options: bootstrap_options } }
72
+ describe "#private_key_for" do
73
+ let(:machine_spec) { double("machine_spec", reference: {}, name: "my_machine") }
74
+ let(:machine_options) { { bootstrap_options: bootstrap_options } }
75
75
 
76
- context 'when the machine has a key path in bootstrap options' do
77
- let(:bootstrap_options) { { key_path: '/tmp/test_private_key_file' } }
76
+ context "when the machine has a key path in bootstrap options" do
77
+ let(:bootstrap_options) { { key_path: "/tmp/test_private_key_file" } }
78
78
 
79
- it 'reads the key file' do
80
- allow(IO).to receive(:read).and_return 'test_private_key'
81
- expect(driver.private_key_for(machine_spec, machine_options, nil)).to eq 'test_private_key'
79
+ it "reads the key file" do
80
+ allow(IO).to receive(:read).and_return "test_private_key"
81
+ expect(driver.private_key_for(machine_spec, machine_options, nil)).to eq "test_private_key"
82
82
  end
83
83
  end
84
84
 
85
- context 'when the machine has a key name in bootstrap options' do
86
- let(:bootstrap_options) { { key_name: 'test_private_key_name' } }
85
+ context "when the machine has a key name in bootstrap options" do
86
+ let(:bootstrap_options) { { key_name: "test_private_key_name" } }
87
87
 
88
- it 'calls get_private_key' do
89
- expect(driver).to receive(:get_private_key).with('test_private_key_name').and_return 'test_private_key'
90
- expect(driver.private_key_for(machine_spec, machine_options, nil)).to eq 'test_private_key'
88
+ it "calls get_private_key" do
89
+ expect(driver).to receive(:get_private_key).with("test_private_key_name").and_return "test_private_key"
90
+ expect(driver.private_key_for(machine_spec, machine_options, nil)).to eq "test_private_key"
91
91
  end
92
92
  end
93
93
 
94
- context 'when the machine has no bootstrap options' do
95
- it 'raises an error' do
94
+ context "when the machine has no bootstrap options" do
95
+ it "raises an error" do
96
96
  expect { driver.private_key_for(machine_spec, {}, nil) }
97
- .to raise_error(RuntimeError, 'No key found to connect to my_machine ({}) : machine_options -> ({})!')
97
+ .to raise_error(RuntimeError, "No key found to connect to my_machine ({}) : machine_options -> ({})!")
98
98
  end
99
99
  end
100
100
 
101
- context 'when the machine has no key path or key name bootstrap options' do
101
+ context "when the machine has no key path or key name bootstrap options" do
102
102
  let(:bootstrap_options) { {} }
103
103
 
104
- it 'raises an error' do
104
+ it "raises an error" do
105
105
  expect { driver.private_key_for(machine_spec, machine_options, nil) }.to raise_error(
106
- RuntimeError, 'No key found to connect to my_machine ({}) : machine_options -> ({:bootstrap_options=>{}})!')
106
+ RuntimeError, "No key found to connect to my_machine ({}) : machine_options -> ({:bootstrap_options=>{}})!"
107
+ )
107
108
  end
108
109
  end
109
110
  end