Class: Kitchen::Driver::Vsphere

Inherits:
Base
  • Object
show all
Defined in:
lib/kitchen/driver/vsphere.rb

Constant Summary collapse

@@chef_zero_server =
false

Instance Method Summary collapse

Instance Method Details

#chef_serverObject



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/kitchen/driver/vsphere.rb', line 76

def chef_server
  unless @@chef_zero_server
    vsphere_mutex.synchronize do
      unless @@chef_zero_server
        Chef::Config.local_mode = true
        Chef::Config.chef_repo_path = Chef::Config.find_chef_repo_path(Dir.pwd)
        require 'chef/local_mode'
        Chef::LocalMode.setup_server_connectivity
        @@chef_zero_server = true
      end
    end
  end

  Cheffish.default_chef_server
end

#create(state) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/kitchen/driver/vsphere.rb', line 34

def create(state)
  state[:vsphere_name] = config[:vsphere_name]
  state[:username] = config[:machine_options][:bootstrap_options][:ssh][:user]
  state[:password] = config[:machine_options][:bootstrap_options][:ssh][:password]
  config[:server_name] = state[:vsphere_name]

  machine = with_provisioning_driver(state) do |action_handler, driver, machine_spec|
    driver.allocate_machine(action_handler, machine_spec, config[:machine_options])
    driver.ready_machine(action_handler, machine_spec, config[:machine_options])
    state[:server_id] = machine_spec.location['server_id']
    state[:hostname] = machine_spec.location['ipaddress']
    machine_spec.save(action_handler)
  end
end

#destroy(state) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/kitchen/driver/vsphere.rb', line 49

def destroy(state)
  return if state[:server_id].nil?

  with_provisioning_driver(state) do |action_handler, driver, machine_spec|
    machine_spec.location = { 'driver_url' => driver.driver_url,
                              'server_id' => state[:server_id] }
    driver.destroy_machine(action_handler, machine_spec, config[:machine_options])
  end

  state.delete(:server_id)
  state.delete(:hostname)
  state.delete(:vsphere_name)
end

#vsphere_mutexObject



92
93
94
95
96
97
98
99
100
101
# File 'lib/kitchen/driver/vsphere.rb', line 92

def vsphere_mutex
  @@vsphere_mutex ||= begin
    Kitchen.mutex.synchronize do
      instance.class.mutexes ||= {}
      instance.class.mutexes[self.class] = Mutex.new
    end

    instance.class.mutexes[self.class]
  end
end

#with_provisioning_driver(state) {|action_handler, driver, machine_spec| ... } ⇒ Object

Yields:

  • (action_handler, driver, machine_spec)


63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/kitchen/driver/vsphere.rb', line 63

def with_provisioning_driver(state)
  config[:machine_options][:convergence_options] = { chef_server: chef_server }
  machine_spec = Chef::Provisioning.chef_managed_entry_store(chef_server).get(:machine, state[:vsphere_name])
  if machine_spec.nil?
    machine_spec = Chef::Provisioning.chef_managed_entry_store(chef_server)
                                     .new_entry(:machine, state[:vsphere_name])
  end
  url = URI::VsphereUrl.from_config(@config[:driver_options]).to_s
  driver = Chef::Provisioning.driver_for_url(url, config)
  action_handler = Chef::Provisioning::ActionHandler.new
  yield(action_handler, driver, machine_spec)
end