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 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: []