chef-provisioning-vbox 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/chef/provisioning/vbox_driver/driver.rb +130 -0
- metadata +44 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0ae44363cdfd487c9e037fb9b55eeb3e67740abb
|
4
|
+
data.tar.gz: 8430fd4e8e7e48378fa92e1cd7904c6ce9e43b26
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c086c021e81a79310f4611a553e9cb3bb7d3303decddcbd86cb1c103f1d0ad623d6ae9c88d15ed0e7d0144ec86471f0dc11a47d68607e1dfa45926f2b91807e7
|
7
|
+
data.tar.gz: 987d15aafbc0c6b72d54da22b5140895bc2c25a58ba0462b9d400ddd3e19daf0055bb78394f624d7b84314a814f0e9ed9e86ff8134732b867d9f508d825872ed
|
@@ -0,0 +1,130 @@
|
|
1
|
+
require 'chef/provisioning/driver'
|
2
|
+
require 'chef/provisioning/vbox_driver/version'
|
3
|
+
|
4
|
+
class Chef
|
5
|
+
module Provisioning
|
6
|
+
module VboxDriver
|
7
|
+
class Driver < Chef::Provisioning::Driver
|
8
|
+
|
9
|
+
# generated by script, required by API.
|
10
|
+
def self.canonicalize_url(driver_url, config)
|
11
|
+
[ "vbox:#{driver_url} [vboxmanage]", config ]
|
12
|
+
end
|
13
|
+
|
14
|
+
# generated by script, required by API.
|
15
|
+
def self.from_url(driver_url, config)
|
16
|
+
Driver.new(driver_url, config)
|
17
|
+
end
|
18
|
+
|
19
|
+
out = %x(vboxmanage list vms |grep "#{server_id}" |awk '{print $2}'|sed 's/\{//g'|sed 's/\}//g')
|
20
|
+
machine_spec.reference['server_id'] = out
|
21
|
+
end
|
22
|
+
|
23
|
+
#create vm
|
24
|
+
def vbox.create_server(machine_spec.name, machine_options)
|
25
|
+
machine_spec.reference['server_id'] = %x(createvm-q.sh "#{machine_spec.name}" 10)
|
26
|
+
end
|
27
|
+
|
28
|
+
#start vm
|
29
|
+
def vbox.power_on(server_id)
|
30
|
+
%x(vboxmanage startvm #{server_id} --type headless)
|
31
|
+
end
|
32
|
+
|
33
|
+
#ready the vm
|
34
|
+
def vbox.wait_for_machine_to_have_status(server_id)
|
35
|
+
ready = %x(ready.sh #{server_id})
|
36
|
+
end
|
37
|
+
|
38
|
+
#get hostname
|
39
|
+
def vbox.get_hostname(server_id)
|
40
|
+
hostname = %x(vboxmanage list vms |grep "#{server_id}|awk '{print $1}'|sed 's/"//g')
|
41
|
+
return hostname
|
42
|
+
end
|
43
|
+
|
44
|
+
def vbox.power_off(server_id)
|
45
|
+
%x(vboxmanage controlvm #{server_id} poweroff)
|
46
|
+
end
|
47
|
+
|
48
|
+
#destroy host
|
49
|
+
def vbox.destroy_machine(server_id)
|
50
|
+
%x(vboxmanage unregistervm #{server_id} --delete)
|
51
|
+
end
|
52
|
+
|
53
|
+
def allocate_machine(action_handler, machine_spec, machine_options)
|
54
|
+
if machine_spec.reference
|
55
|
+
if !vbox.server_exists?(machine_spec.reference['server_id'])
|
56
|
+
# It doesn't really exist
|
57
|
+
action_handler.perform_action "Machine #{machine_spec.reference['server_id']} does not really exist. Recreating ..." do
|
58
|
+
machine_spec.reference = nil
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
if !machine_spec.reference
|
63
|
+
action_handler.perform_action "Creating server #{machine_spec.name} with options #{machine_options}" do
|
64
|
+
private_key = get_private_key('bootstrapkey')
|
65
|
+
server_id = vbox.create_server(machine_spec.name, machine_options)
|
66
|
+
machine_spec.reference = {
|
67
|
+
'driver_version' => Vbox::VERSION,
|
68
|
+
'server_id' => server_id
|
69
|
+
}
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def ready_machine(action_handler, machine_spec, machine_options)
|
75
|
+
server_id = machine_spec.reference['server_id']
|
76
|
+
if vbox.machine_status(server_id) == 'stopped'
|
77
|
+
action_handler.perform_action "Powering up machine #{server_id}" do
|
78
|
+
vbox.power_on(server_id)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
if vbox.machine_status(server_id) != 'ready'
|
83
|
+
action_handler.perform_action "wait for machine #{server_id}" do
|
84
|
+
vbox.wait_for_machine_to_have_status(server_id, 'ready')
|
85
|
+
end
|
86
|
+
end
|
87
|
+
# Return the Machine object
|
88
|
+
machine_for(machine_spec, machine_options)
|
89
|
+
end
|
90
|
+
|
91
|
+
def machine_for(machine_spec, machine_options)
|
92
|
+
server_id = machine_spec.reference['server_id']
|
93
|
+
hostname = vbox.get_hostname()
|
94
|
+
username = 'root'
|
95
|
+
ssh_options = {
|
96
|
+
:auth_methods => ['publickey'],
|
97
|
+
:keys => [ get_key('bootstrapkey') ],
|
98
|
+
}
|
99
|
+
transport = Chef::Provisioning::Transport::SSH.new(vbox.get_hostname(server_id), username, ssh_options, {}, config)
|
100
|
+
convergence_strategy = Chef::Provisioning::ConvergenceStrategy::InstallCached.new(machine_options[:convergence_options], {})
|
101
|
+
Chef::Provisioning::Machine::UnixMachine.new(machine_spec, transport, convergence_strategy)
|
102
|
+
end
|
103
|
+
|
104
|
+
def destroy_machine(action_handler, machine_spec, machine_options)
|
105
|
+
if machine_spec.reference
|
106
|
+
server_id = machine_spec.reference['server_id']
|
107
|
+
action_handler.perform_action "Destroy machine #{server_id}" do
|
108
|
+
vbox.power_off(server_id)
|
109
|
+
vbox.destroy_machine(server_id)
|
110
|
+
machine_spec.reference = nil
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def stop_machine(action_handler, machine_spec, machine_options)
|
116
|
+
if machine_spec.reference
|
117
|
+
server_id = machine_spec.reference['server_id']
|
118
|
+
action_handler.perform_action "Power off machine #{server_id}" do
|
119
|
+
vbox.power_off(server_id)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def connect_to_machine(machine_spec, machine_options)
|
125
|
+
machine_for(machine_spec, machine_options)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
metadata
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: chef-provisioning-vbox
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Robert Reilly
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-08-17 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: what I said above
|
14
|
+
email: robertjreillygmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/chef/provisioning/vbox_driver/driver.rb
|
20
|
+
homepage: https://rubygems.org/gems/chef-provisioning-vbox
|
21
|
+
licenses:
|
22
|
+
- MIT
|
23
|
+
metadata: {}
|
24
|
+
post_install_message:
|
25
|
+
rdoc_options: []
|
26
|
+
require_paths:
|
27
|
+
- lib
|
28
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
requirements: []
|
39
|
+
rubyforge_project:
|
40
|
+
rubygems_version: 2.0.14.1
|
41
|
+
signing_key:
|
42
|
+
specification_version: 4
|
43
|
+
summary: chef provisioning driver for virtualbox
|
44
|
+
test_files: []
|