Module: ChefMetal

Defined in:
lib/chef_metal/action_handler.rb,
lib/chef_metal.rb,
lib/chef_metal/machine.rb,
lib/chef_metal/version.rb,
lib/chef_metal/provider.rb,
lib/chef_metal/transport.rb,
lib/chef_metal/provisioner.rb,
lib/chef_metal/machine_spec.rb,
lib/chef_metal/chef_run_data.rb,
lib/chef_metal/transport/ssh.rb,
lib/chef_metal/aws_credentials.rb,
lib/chef_metal/transport/winrm.rb,
lib/chef_metal/convergence_strategy.rb,
lib/chef_metal/machine/unix_machine.rb,
lib/chef_metal/machine/basic_machine.rb,
lib/chef_metal/openstack_credentials.rb,
lib/chef_metal/machine/windows_machine.rb,
lib/chef_metal/provider_action_handler.rb,
lib/chef_metal/add_prefix_action_handler.rb,
lib/chef_metal/convergence_strategy/install_sh.rb,
lib/chef_metal/convergence_strategy/install_msi.rb,
lib/chef_metal/convergence_strategy/no_converge.rb,
lib/chef_metal/convergence_strategy/install_cached.rb,
lib/chef_metal/convergence_strategy/precreate_chef_objects.rb

Overview

This is included in the metal provisioners to proxy from generic requests needed to specific provider actions

Defined Under Namespace

Modules: ProviderActionHandler Classes: AWSCredentials, ActionHandler, ActionHandlerForward, AddPrefixActionHandler, ChefRunData, ConvergenceStrategy, Machine, MachineSpec, OpenstackCredentials, Provider, Provisioner, Transport

Constant Summary collapse

VERSION =
'0.10.2'
@@registered_provisioner_classes =

Helpers for provisioner inflation

{}

Class Method Summary collapse

Class Method Details

.add_registered_provisioner_class(name, provisioner) ⇒ Object



37
38
39
# File 'lib/chef_metal.rb', line 37

def self.add_registered_provisioner_class(name, provisioner)
  @@registered_provisioner_classes[name] = provisioner
end

.connect_to_machine(name) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
# File 'lib/chef_metal.rb', line 49

def self.connect_to_machine(name)
  rest = Chef::ServerAPI.new()
  node = rest.get("/nodes/#{name}")
  provisioner_output = node['normal']['provisioner_output']
  if !provisioner_output
    raise "Node #{name} was not provisioned with Metal."
  end
  provisioner = provisioner_for_node(node)
  machine = provisioner.connect_to_machine(node)
  [ machine, provisioner ]
end

.inline_resource(action_handler, &block) ⇒ Object



15
16
17
18
# File 'lib/chef_metal.rb', line 15

def self.inline_resource(action_handler, &block)
  events = ActionHandlerForward.new(action_handler)
  Cheffish::BasicChefClient.converge_block(nil, events, &block)
end

.provisioner_for_node(node) ⇒ Object



41
42
43
44
45
46
47
# File 'lib/chef_metal.rb', line 41

def self.provisioner_for_node(node)
  provisioner_url = node['normal']['provisioner_output']['provisioner_url']
  cluster_type = provisioner_url.split(':', 2)[0]
  require "chef_metal/provisioner_init/#{cluster_type}_init"
  provisioner_class = @@registered_provisioner_classes[cluster_type]
  provisioner_class.inflate(node)
end