lib/chef/provisioning/fog_driver/providers/digitalocean.rb in chef-provisioning-fog-0.26.1 vs lib/chef/provisioning/fog_driver/providers/digitalocean.rb in chef-provisioning-fog-0.26.3
- old
+ new
@@ -1,119 +1,117 @@
# fog:DigitalOcean:<client id>
class Chef
-module Provisioning
-module FogDriver
- module Providers
- class DigitalOcean < FogDriver::Driver
- Driver.register_provider_class('DigitalOcean', FogDriver::Providers::DigitalOcean)
+ module Provisioning
+ module FogDriver
+ module Providers
+ class DigitalOcean < FogDriver::Driver
+ Driver.register_provider_class("DigitalOcean", FogDriver::Providers::DigitalOcean)
- def creator
- ''
- end
+ def creator
+ ""
+ end
- def convergence_strategy_for(machine_spec, machine_options)
- machine_options = Cheffish::MergedConfig.new(machine_options, {
- :convergence_options => {:ohai_hints => {'digital_ocean' => {}}}
- })
- super(machine_spec, machine_options)
- end
+ def convergence_strategy_for(machine_spec, machine_options)
+ machine_options = Cheffish::MergedConfig.new(machine_options,
+ convergence_options: { ohai_hints: { "digital_ocean" => {} } })
+ super(machine_spec, machine_options)
+ end
- def converge_floating_ips(action_handler, machine_spec, machine_options, server)
- # DigitalOcean does not have floating IPs
- end
+ def converge_floating_ips(action_handler, machine_spec, machine_options, server)
+ # DigitalOcean does not have floating IPs
+ end
- def bootstrap_options_for(action_handler, machine_spec, machine_options)
- bootstrap_options = symbolize_keys(machine_options[:bootstrap_options] || {})
- if bootstrap_options[:key_path] || bootstrap_options[:key_name]
- bootstrap_options[:key_name] ||= File.basename(bootstrap_options[:key_path])
- # Verify that the provided key name and path are in line (or create the key pair if not!)
- driver = self
- Provisioning.inline_resource(action_handler) do
- fog_key_pair bootstrap_options[:key_name] do
- private_key_path bootstrap_options[:key_path]
- driver driver
+ def bootstrap_options_for(action_handler, machine_spec, machine_options)
+ bootstrap_options = symbolize_keys(machine_options[:bootstrap_options] || {})
+ if bootstrap_options[:key_path] || bootstrap_options[:key_name]
+ bootstrap_options[:key_name] ||= File.basename(bootstrap_options[:key_path])
+ # Verify that the provided key name and path are in line (or create the key pair if not!)
+ driver = self
+ Provisioning.inline_resource(action_handler) do
+ fog_key_pair bootstrap_options[:key_name] do
+ private_key_path bootstrap_options[:key_path]
+ driver driver
+ end
+ end
+ else
+ bootstrap_options[:key_name] ||= overwrite_default_key_willy_nilly(action_handler, machine_spec)
end
- end
- else
- bootstrap_options[:key_name] ||= overwrite_default_key_willy_nilly(action_handler, machine_spec)
- end
- bootstrap_options[:tags] = default_tags(machine_spec, bootstrap_options[:tags] || {})
+ bootstrap_options[:tags] = default_tags(machine_spec, bootstrap_options[:tags] || {})
- if !bootstrap_options[:image_id] && !bootstrap_options[:image]
- if !bootstrap_options[:image_distribution] && !bootstrap_options[:image_name]
- bootstrap_options[:image_distribution] = 'CentOS'
- bootstrap_options[:image_name] = '6.5 x64'
+ if !bootstrap_options[:image_id] && !bootstrap_options[:image]
+ if !bootstrap_options[:image_distribution] && !bootstrap_options[:image_name]
+ bootstrap_options[:image_distribution] = "CentOS"
+ bootstrap_options[:image_name] = "6.5 x64"
+ end
+ distributions = compute.images.select { |image| image.distribution == bootstrap_options[:image_distribution] }
+ if distributions.empty?
+ raise "No images on DigitalOcean with distribution #{bootstrap_options[:image_distribution].inspect}"
+ end
+ images = distributions.select { |image| image.name == bootstrap_options[:image_name] } if bootstrap_options[:image_name]
+ if images.empty?
+ raise "No images on DigitalOcean with distribution #{bootstrap_options[:image_distribution].inspect} and name #{bootstrap_options[:image_name].inspect}"
+ end
+ bootstrap_options[:image] = images.first.id
+ end
+ if !bootstrap_options[:flavor_id] && !bootstrap_options[:size]
+ bootstrap_options[:flavor_name] ||= "512MB"
+ flavors = compute.flavors.select do |f|
+ f.slug.casecmp(bootstrap_options[:flavor_name]).zero?
+ end
+ if flavors.empty?
+ raise "Could not find flavor named '#{bootstrap_options[:flavor_name]}' on #{driver_url}"
+ end
+ bootstrap_options[:size] = flavors.first.slug
+ end
+ unless bootstrap_options[:region]
+ bootstrap_options[:region_name] ||= "San Francisco 1"
+ regions = compute.regions.select { |region| region.name == bootstrap_options[:region_name] }
+ if regions.empty?
+ raise "Could not find region named '#{bootstrap_options[:region_name]}' on #{driver_url}"
+ end
+ bootstrap_options[:region] = regions.first.slug
+ end
+ keys = compute.ssh_keys.select { |k| k.name == bootstrap_options[:key_name] }
+ if keys.empty?
+ raise "Could not find key named '#{bootstrap_options[:key_name]}' on #{driver_url}"
+ end
+ found_key = keys.first
+ bootstrap_options[:ssh_keys] ||= [found_key.id]
+
+ # You don't get to specify name yourself
+ bootstrap_options[:name] = machine_spec.name
+ bootstrap_options[:version] ||= :v2
+ bootstrap_options
end
- distributions = compute.images.select { |image| image.distribution == bootstrap_options[:image_distribution] }
- if distributions.empty?
- raise "No images on DigitalOcean with distribution #{bootstrap_options[:image_distribution].inspect}"
+
+ def destroy_machine(action_handler, machine_spec, machine_options)
+ server = server_for(machine_spec)
+ if server && server.status != "archive"
+ action_handler.perform_action "destroy machine #{machine_spec.name} (#{machine_spec.location['server_id']} at #{driver_url})" do
+ server.delete
+ end
+ end
+ machine_spec.location = nil
+ strategy = convergence_strategy_for(machine_spec, machine_options)
+ strategy.cleanup_convergence(action_handler, machine_spec)
end
- images = distributions.select { |image| image.name == bootstrap_options[:image_name] } if bootstrap_options[:image_name]
- if images.empty?
- raise "No images on DigitalOcean with distribution #{bootstrap_options[:image_distribution].inspect} and name #{bootstrap_options[:image_name].inspect}"
- end
- bootstrap_options[:image] = images.first.id
- end
- if !bootstrap_options[:flavor_id] && !bootstrap_options[:size]
- bootstrap_options[:flavor_name] ||= '512MB'
- flavors = compute.flavors.select do |f|
- f.slug.downcase == bootstrap_options[:flavor_name].downcase
- end
- if flavors.empty?
- raise "Could not find flavor named '#{bootstrap_options[:flavor_name]}' on #{driver_url}"
- end
- bootstrap_options[:size] = flavors.first.slug
- end
- if !bootstrap_options[:region]
- bootstrap_options[:region_name] ||= 'San Francisco 1'
- regions = compute.regions.select { |region| region.name == bootstrap_options[:region_name] }
- if regions.empty?
- raise "Could not find region named '#{bootstrap_options[:region_name]}' on #{driver_url}"
- end
- bootstrap_options[:region] = regions.first.slug
- end
- keys = compute.ssh_keys.select { |k| k.name == bootstrap_options[:key_name] }
- if keys.empty?
- raise "Could not find key named '#{bootstrap_options[:key_name]}' on #{driver_url}"
- end
- found_key = keys.first
- bootstrap_options[:ssh_keys] ||= [ found_key.id ]
- # You don't get to specify name yourself
- bootstrap_options[:name] = machine_spec.name
- bootstrap_options[:version] ||= :v2
- bootstrap_options
- end
+ def self.compute_options_for(provider, id, config)
+ new_compute_options = {}
+ new_compute_options[:provider] = provider
+ new_config = { driver_options: { compute_options: new_compute_options } }
+ new_defaults = {
+ driver_options: { compute_options: { version: :v2 } },
+ machine_options: { bootstrap_options: {}, ssh_options: {} }
+ }
+ result = Cheffish::MergedConfig.new(new_config, config, new_defaults)
- def destroy_machine(action_handler, machine_spec, machine_options)
- server = server_for(machine_spec)
- if server && server.status != 'archive'
- action_handler.perform_action "destroy machine #{machine_spec.name} (#{machine_spec.location['server_id']} at #{driver_url})" do
- server.delete
+ new_compute_options[:digitalocean_token] = id if id && id != ""
+
+ [result, new_compute_options[:digitalocean_token]]
end
end
- machine_spec.location = nil
- strategy = convergence_strategy_for(machine_spec, machine_options)
- strategy.cleanup_convergence(action_handler, machine_spec)
end
-
- def self.compute_options_for(provider, id, config)
- new_compute_options = {}
- new_compute_options[:provider] = provider
- new_config = { :driver_options => { :compute_options => new_compute_options }}
- new_defaults = {
- :driver_options => { :compute_options => { version: :v2 } },
- :machine_options => { :bootstrap_options => {}, :ssh_options => {} }
- }
- result = Cheffish::MergedConfig.new(new_config, config, new_defaults)
-
- new_compute_options[:digitalocean_token] = id if (id && id != '')
-
- [result, new_compute_options[:digitalocean_token]]
- end
-
end
end
-end
-end
end