class Chef::Provider::Machine

Attributes

machine_spec[R]

Public Class Methods

additional_machine_option_keys() click to toggle source
# File lib/chef/provider/machine.rb, line 179
def self.additional_machine_option_keys
  @@additional_machine_option_keys ||= []
end
upload_files(action_handler, machine, files) click to toggle source
# File lib/chef/provider/machine.rb, line 201
def self.upload_files(action_handler, machine, files)
  if files
    files.each_pair do |remote_file, local|
      if local.is_a?(Hash)
        if local[:local_path]
          machine.upload_file(action_handler, local[:local_path], remote_file)
        else
          machine.write_file(action_handler, remote_file, local[:content])
        end
      else
        machine.upload_file(action_handler, local, remote_file)
      end
    end
  end
end

Public Instance Methods

action_handler() click to toggle source
# File lib/chef/provider/machine.rb, line 11
def action_handler
  @action_handler ||= Chef::Provisioning::ChefProviderActionHandler.new(self)
end
action_handler=(value) click to toggle source
# File lib/chef/provider/machine.rb, line 14
def action_handler=(value)
  @action_handler = value
end
chef_managed_entry_store() click to toggle source
# File lib/chef/provider/machine.rb, line 197
def chef_managed_entry_store
  @chef_managed_entry_store ||= Provisioning.chef_managed_entry_store(new_resource.chef_server)
end
current_driver() click to toggle source
# File lib/chef/provider/machine.rb, line 117
def current_driver
  if machine_spec.driver_url
    run_context.chef_provisioning.driver_for(machine_spec.driver_url)
  end
end
current_machine_options() click to toggle source
# File lib/chef/provider/machine.rb, line 137
def current_machine_options
  machine_options(current_driver)
end
from_image_spec() click to toggle source
# File lib/chef/provider/machine.rb, line 123
def from_image_spec
  @from_image_spec ||= begin
    if new_resource.from_image
      chef_managed_entry_store.get!(:machine_image, new_resource.from_image)
    else
      nil
    end
  end
end
load_current_resource() click to toggle source
# File lib/chef/provider/machine.rb, line 183
def load_current_resource
  if defined?(Chef::Provider::ChefNode)
    # Cheffish 1.x
    node_provider = Chef::Provider::ChefNode.new(new_resource, run_context)
  else
    # Cheffish 2.x
    node_provider = Chef::Resource::ChefNode.action_class.new(new_resource, run_context)
  end
  node_provider.load_current_resource
  json = node_provider.new_json
  json['normal']['chef_provisioning'] = node_provider.current_json['normal']['chef_provisioning']
  @machine_spec = chef_managed_entry_store.new_entry(:machine, new_resource.name, json)
end
machine_options(driver) click to toggle source
# File lib/chef/provider/machine.rb, line 141
def machine_options(driver)
  configs = []

  configs << {
    :convergence_options =>
      [ :chef_server,
        :allow_overwrite_keys,
        :source_key, :source_key_path, :source_key_pass_phrase,
        :private_key_options,
        :ohai_hints,
        :public_key_path, :public_key_format,
        :admin, :validator,
        :chef_config
      ].inject({}) do |result, key|
        result[key] = new_resource.send(key)
        result
      end
  }

  # The current use case for this is adding a new attribute `aws_tags` to
  # the machine resource from the chef-provisioning-aws driver.  Because we
  # want that attribute to work for the recipe DSL, it needs to be added at the
  # Chef::Resource::Machine class level and not at an instance level.  Thus we
  # also need to pull the additional_machine_option_keys (:aws_tags) from the
  # Chef::Resource::Machine class level.  If you use two drivers (like AWS and
  # Azure) then all machine instances will still have the `aws_tags` attribute
  # DSL and will pass `:aws_tags` in on the machine_options.  They can simply
  # be ignored by the Azure driver.
  (self.class.additional_machine_option_keys || []).each do |k|
    configs << { k => new_resource.send(k)} if new_resource.send(k)
  end

  configs << { from_image: new_resource.from_image } if new_resource.from_image
  configs << new_resource.machine_options if new_resource.machine_options
  configs << driver.config[:machine_options] if driver.config[:machine_options]
  Cheffish::MergedConfig.new(*configs)
end
new_driver() click to toggle source
# File lib/chef/provider/machine.rb, line 113
def new_driver
  run_context.chef_provisioning.driver_for(new_resource.driver)
end
new_machine_options() click to toggle source
# File lib/chef/provider/machine.rb, line 133
def new_machine_options
  machine_options(new_driver)
end
whyrun_supported?() click to toggle source
# File lib/chef/provider/machine.rb, line 20
def whyrun_supported?
  true
end

Private Instance Methods

upload_files(machine) click to toggle source
# File lib/chef/provider/machine.rb, line 219
def upload_files(machine)
  Machine.upload_files(action_handler, machine, new_resource.files)
end