class Chef::Provider::MachineImage

Public Class Methods

additional_image_option_keys() click to toggle source
# File lib/chef/provider/machine_image.rb, line 96
def self.additional_image_option_keys
  @@additional_image_option_keys ||= []
end

Public Instance Methods

action_handler() click to toggle source
# File lib/chef/provider/machine_image.rb, line 10
def action_handler
  @action_handler ||= Chef::Provisioning::ChefProviderActionHandler.new(self)
end
chef_managed_entry_store() click to toggle source
# File lib/chef/provider/machine_image.rb, line 22
def chef_managed_entry_store
  @chef_managed_entry_store ||= Provisioning.chef_managed_entry_store(new_resource.chef_server)
end
create_image(image_spec, machine_options) click to toggle source
# File lib/chef/provider/machine_image.rb, line 56
def create_image(image_spec, machine_options)
  # 1. Create the exemplar machine
  machine_provider = Chef::Provider::Machine.new(new_resource, run_context)
  machine_provider.action_handler = action_handler
  machine_provider.load_current_resource
  machine_provider.action_converge

  # 2. Create the image
  machine_options = new_machine_options
  new_driver.allocate_image(action_handler, image_spec, new_image_options,
                            machine_provider.machine_spec, machine_options)
  image_spec.driver_url ||= new_driver.driver_url
  image_spec.from_image ||= new_resource.from_image if new_resource.from_image
  image_spec.run_list   ||= machine_provider.machine_spec.node['run_list']

  # 3. Save the linkage from name -> image id
  image_spec.save(action_handler)

  # 4. Wait for image to be ready
  new_driver.ready_image(action_handler, image_spec, new_image_options)

  machine_provider.action_destroy
end
load_current_resource() click to toggle source
# File lib/chef/provider/machine_image.rb, line 14
def load_current_resource
end
new_driver() click to toggle source

Get the driver specified in the resource

# File lib/chef/provider/machine_image.rb, line 18
def new_driver
  @new_driver ||= run_context.chef_provisioning.driver_for(new_resource.driver)
end
new_image_options() click to toggle source
# File lib/chef/provider/machine_image.rb, line 80
def new_image_options
  @new_image_options ||= begin
    configs = []
    configs << new_resource.image_options if new_resource.image_options
    # See documentation in machine.rb provider
    (self.class.additional_image_option_keys || []).each do |k|
      configs << { k => new_resource.send(k)} if new_resource.send(k)
    end
    Cheffish::MergedConfig.new(*configs)
  end
end
new_machine_options() click to toggle source
# File lib/chef/provider/machine_image.rb, line 92
def new_machine_options
  @new_machine_options ||= new_resource.machine_options
end