zergrush_vagrant 0.0.1 → 0.0.2
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 +4 -4
- data/README.md +108 -12
- data/lib/zergrush_vagrant/init.rb +120 -22
- data/lib/zergrush_vagrant/renderer.rb +192 -84
- data/lib/zergrush_vagrant/version.rb +1 -1
- data/resources/folders_schema.template +18 -0
- data/resources/machine.template +11 -2
- data/resources/main.template +0 -4
- data/resources/networks_schema.template +12 -0
- data/resources/option_schema.template +9 -0
- data/resources/ports_schema.template +12 -0
- data/resources/ssh_schema.template +6 -0
- data/resources/tasks_schema.template +172 -174
- data/zergrush_vagrant.gemspec +1 -3
- metadata +8 -33
- data/resources/bridging.template +0 -1
- data/resources/hostonly.template +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 613db97e270ed84ab042953b3e2b0b9f190eee07
|
4
|
+
data.tar.gz: a31d61d4a70873d6661a8499d95bd6035951ac11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0cb6d4938d637ecd4f2eea9eea1193b9337eca37f838fe0483b12a647ea515c870f3b0f8f92d1ed5c7e25c855742bf77aadfdff8b06cf7b437f240eaf8601894
|
7
|
+
data.tar.gz: e80ee37bbdb5552b8d9939a3a662e93c93faf3a26c441a620546e619d68c5110d2c829dec944512d649b75ad8de14beef9b7fcddaae2f3dc8e5d44551011a704
|
data/README.md
CHANGED
@@ -1,17 +1,113 @@
|
|
1
|
-
|
1
|
+
Vagrant driver for Zerg
|
2
2
|
===
|
3
3
|
|
4
|
-
|
4
|
+
Dependencies
|
5
5
|
--------------
|
6
|
+
|
7
|
+
- [vagrant-aws](https://github.com/mitchellh/vagrant-aws)
|
8
|
+
- [vagrant-libvirt](https://github.com/pradels/vagrant-libvirt)
|
9
|
+
- [vagrant-omnibus](https://github.com/schisamo/vagrant-omnibus)
|
10
|
+
- [vagrant-berkshelf](https://github.com/berkshelf/vagrant-berkshelf)
|
11
|
+
|
12
|
+
Additional properties defined
|
13
|
+
--------------
|
14
|
+
|
15
|
+
######[Synchronized folders](resources/folder_schema.template)
|
16
|
+
|
17
|
+
Defined by [Vagrant synced folders](http://docs.vagrantup.com/v2/synced-folders/)
|
18
|
+
|
19
|
+
Example use:
|
20
|
+
```
|
21
|
+
...
|
22
|
+
"create": true,
|
23
|
+
"mount_options": ["rw", "vers=3", "tcp"]
|
24
|
+
...
|
25
|
+
```
|
26
|
+
|
27
|
+
######[Networks](resources/networks_schema.template)
|
28
|
+
|
29
|
+
Defined by [Vagrant networking](http://docs.vagrantup.com/v2/networking/index.html)
|
30
|
+
|
31
|
+
Example use:
|
32
|
+
```
|
33
|
+
...
|
34
|
+
"type": "public_network",
|
35
|
+
"bridge": "en1: Wi-Fi (AirPort)"
|
36
|
+
...
|
37
|
+
```
|
38
|
+
|
39
|
+
######[Driver options](resources/option_schema.template)
|
40
|
+
|
41
|
+
- providertype - One of the supported Vagrant providers. Currenlty supported providers are: virtualbox, libvirt, aws
|
42
|
+
- provider_options - hash of provider specific options.
|
43
|
+
- raw_options - if some of the provider options do not map to a hash format - you can specify them as an array of strings. Each string should start with '[provider].'
|
44
|
+
|
45
|
+
Example use:
|
46
|
+
```
|
47
|
+
...
|
48
|
+
"driver": {
|
49
|
+
"drivertype": "vagrant",
|
50
|
+
"driveroptions": [
|
51
|
+
{
|
52
|
+
"providertype": "aws",
|
53
|
+
"provider_options" : {
|
54
|
+
"instance_type": "t1.micro",
|
55
|
+
"access_key_id": "blah blah blah",
|
56
|
+
"secret_access_key": "yadda yadda",
|
57
|
+
"keypair_name": "HURGHBURGHLGHRL",
|
58
|
+
"ami": "ami-3fec7956",
|
59
|
+
"region": "us-east-1"
|
60
|
+
}
|
61
|
+
},
|
62
|
+
{
|
63
|
+
"providertype": "virtualbox",
|
64
|
+
"provider_options" : {
|
65
|
+
"gui": false,
|
66
|
+
"memory": 256
|
67
|
+
},
|
68
|
+
"raw_options": [
|
69
|
+
"virtualbox.customize [\"modifyvm\", :id, \"--natdnsproxy1\", \"off\"]",
|
70
|
+
"virtualbox.customize [\"modifyvm\", :id, \"--natdnshostresolver1\", \"off\"]"
|
71
|
+
]
|
72
|
+
}
|
73
|
+
]
|
74
|
+
}
|
75
|
+
...
|
76
|
+
```
|
77
|
+
|
78
|
+
######[Forwarded ports](resources/ports_schema.template)
|
79
|
+
|
80
|
+
Defined by [Vagrant forwarded ports](http://docs.vagrantup.com/v2/networking/forwarded_ports.html)
|
81
|
+
|
82
|
+
Example use:
|
83
|
+
```
|
84
|
+
...
|
85
|
+
"guest_port": 8080,
|
86
|
+
"host_port": 80,
|
87
|
+
"protocol": "tcp"
|
88
|
+
...
|
89
|
+
```
|
90
|
+
|
91
|
+
######[SSH](resources/ssh_schema.template)
|
92
|
+
|
93
|
+
Defined by [Vagrant SSH](http://docs.vagrantup.com/v2/vagrantfile/ssh_settings.html)
|
94
|
+
|
95
|
+
Example use:
|
96
|
+
```
|
97
|
+
...
|
98
|
+
"username": "ubuntu",
|
99
|
+
"private_key_path": "PATH_TO_YOUR_PK",
|
100
|
+
"shell": "bash -l"
|
101
|
+
...
|
102
|
+
```
|
103
|
+
|
104
|
+
######[Tasks](resources/tasks_schema.template)
|
105
|
+
|
106
|
+
Describes what tasks a VM should run at provisioning step
|
107
|
+
|
6
108
|
- type - Type of task payload. 'shell', 'chef_client' or 'chef_solo'
|
7
|
-
- shell task parameters
|
8
|
-
- [shell provisioner]
|
109
|
+
- shell task parameters are defined by [Vagrant shell provisioner](http://docs.vagrantup.com/v2/provisioning/shell.html)
|
9
110
|
- chef_client and chef_solo task parameters map directly to Vagrant provisioner docs, **EXCEPT the node_name parameter**:
|
10
|
-
- [chef_solo provisioner]
|
11
|
-
- [chef_client provisioner]
|
12
|
-
- [chef common options]
|
13
|
-
|
14
|
-
[chef_solo provisioner]:http://docs.vagrantup.com/v2/provisioning/chef_solo.html
|
15
|
-
[chef_client provisioner]:https://docs.vagrantup.com/v2/provisioning/chef_client.html
|
16
|
-
[chef common options]:http://docs.vagrantup.com/v2/provisioning/chef_common.html
|
17
|
-
[shell provisioner]:http://docs.vagrantup.com/v2/provisioning/shell.html
|
111
|
+
- [chef_solo provisioner](http://docs.vagrantup.com/v2/provisioning/chef_solo.html)
|
112
|
+
- [chef_client provisioner](https://docs.vagrantup.com/v2/provisioning/chef_client.html)
|
113
|
+
- [chef common options](http://docs.vagrantup.com/v2/provisioning/chef_common.html)
|
@@ -22,12 +22,13 @@
|
|
22
22
|
#++
|
23
23
|
|
24
24
|
require 'zerg'
|
25
|
+
require 'rbconfig'
|
25
26
|
require_relative 'renderer'
|
26
27
|
|
27
28
|
# give this class the name you want for your command zergrush_vagrant
|
28
29
|
class Vagrant < ZergGemPlugin::Plugin "/driver"
|
29
30
|
def rush hive_location, task_name, task_hash, debug
|
30
|
-
|
31
|
+
check_dependencies
|
31
32
|
puts ("Will perform task #{task_name} with contents:\n #{task_hash.ai}")
|
32
33
|
|
33
34
|
renderer = Renderer.new(
|
@@ -38,13 +39,20 @@ class Vagrant < ZergGemPlugin::Plugin "/driver"
|
|
38
39
|
|
39
40
|
debug_string = (debug == true) ? " --debug" : ""
|
40
41
|
|
42
|
+
# last explicitly defined driver option set
|
43
|
+
last_defined_driveroption = nil
|
44
|
+
|
41
45
|
# bring up all of the VMs first.
|
42
46
|
puts("Starting vagrant in #{File.join("#{hive_location}", "driver", task_hash["vm"]["driver"]["drivertype"], task_name)}")
|
43
|
-
for index in 0..task_hash["
|
47
|
+
for index in 0..task_hash["num_instances"] - 1
|
48
|
+
|
49
|
+
# grab last defined driver options set, or keep the current one
|
50
|
+
last_defined_driveroption = (task_hash["vm"]["driver"]["driveroptions"][index] == nil) ? last_defined_driveroption : task_hash["vm"]["driver"]["driveroptions"][index]
|
51
|
+
|
44
52
|
create_pid = Process.spawn(
|
45
53
|
{
|
46
54
|
"VAGRANT_CWD" => File.join("#{hive_location}", "driver", task_hash["vm"]["driver"]["drivertype"], task_name),
|
47
|
-
"VAGRANT_DEFAULT_PROVIDER" =>
|
55
|
+
"VAGRANT_DEFAULT_PROVIDER" => last_defined_driveroption["providertype"]
|
48
56
|
},
|
49
57
|
"vagrant up zergling_#{index} --no-provision#{debug_string}")
|
50
58
|
Process.wait(create_pid)
|
@@ -56,15 +64,19 @@ class Vagrant < ZergGemPlugin::Plugin "/driver"
|
|
56
64
|
end
|
57
65
|
end
|
58
66
|
|
67
|
+
last_defined_driveroption = nil
|
59
68
|
puts("Running tasks in vagrant virtual machines...")
|
60
69
|
# and provision them all at once (sort of)
|
61
70
|
provisioners = Array.new
|
62
71
|
provision_pid = nil
|
63
|
-
for index in 0..task_hash["
|
72
|
+
for index in 0..task_hash["num_instances"] - 1
|
73
|
+
# grab last defined driver options set, or keep the current one
|
74
|
+
last_defined_driveroption = (task_hash["vm"]["driver"]["driveroptions"][index] == nil) ? last_defined_driveroption : task_hash["vm"]["driver"]["driveroptions"][index]
|
75
|
+
|
64
76
|
provision_pid = Process.spawn(
|
65
77
|
{
|
66
78
|
"VAGRANT_CWD" => File.join("#{hive_location}", "driver", task_hash["vm"]["driver"]["drivertype"], task_name),
|
67
|
-
"VAGRANT_DEFAULT_PROVIDER" =>
|
79
|
+
"VAGRANT_DEFAULT_PROVIDER" => last_defined_driveroption["providertype"]
|
68
80
|
},
|
69
81
|
"vagrant provision zergling_#{index}#{debug_string}")
|
70
82
|
provisioners.push({:name => "zergling_#{index}", :pid => provision_pid})
|
@@ -82,17 +94,40 @@ class Vagrant < ZergGemPlugin::Plugin "/driver"
|
|
82
94
|
}.join
|
83
95
|
}
|
84
96
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
puts "Will leave instances running."
|
89
|
-
end
|
97
|
+
# halt only the machines that are not marked as "keepalive"
|
98
|
+
last_defined_driveroption = nil
|
99
|
+
last_defined_vm = nil
|
90
100
|
|
101
|
+
halt_pid = nil
|
102
|
+
keepalive_left = false
|
103
|
+
for index in 0..task_hash["num_instances"] - 1
|
104
|
+
|
105
|
+
# grab last defined driver options set, or keep the current one
|
106
|
+
last_defined_driveroption = (task_hash["vm"]["driver"]["driveroptions"][index] == nil) ? last_defined_driveroption : task_hash["vm"]["driver"]["driveroptions"][index]
|
107
|
+
|
108
|
+
# grab last defined vm instance, or keep the current one
|
109
|
+
last_defined_vm = (task_hash["vm"]["instances"][index] == nil) ? last_defined_vm : task_hash["vm"]["instances"][index]
|
110
|
+
|
111
|
+
if last_defined_vm["keepalive"] != true
|
112
|
+
halt_pid = Process.spawn(
|
113
|
+
{
|
114
|
+
"VAGRANT_CWD" => File.join("#{hive_location}", "driver", task_hash["vm"]["driver"]["drivertype"], task_name),
|
115
|
+
"VAGRANT_DEFAULT_PROVIDER" => last_defined_driveroption["providertype"]
|
116
|
+
},
|
117
|
+
"vagrant halt zergling_#{index}#{debug_string}")
|
118
|
+
Process.wait(halt_pid)
|
119
|
+
abort("ERROR: vagrant halt failed on machine zergling_#{index}!") unless $?.exitstatus == 0
|
120
|
+
else
|
121
|
+
keepalive_left = true
|
122
|
+
puts "zergling_#{index} is marked as keepalive, skipping halt..."
|
123
|
+
end
|
124
|
+
end
|
91
125
|
abort("ERROR: Finished with errors in: #{errors.to_s}") unless errors.length == 0
|
126
|
+
puts "Some instances were left running." unless keepalive_left == false
|
92
127
|
end
|
93
128
|
|
94
129
|
def clean hive_location, task_name, task_hash, debug
|
95
|
-
|
130
|
+
check_dependencies
|
96
131
|
puts("Cleaning task #{task_name} ...")
|
97
132
|
|
98
133
|
renderer = Renderer.new(
|
@@ -104,27 +139,47 @@ class Vagrant < ZergGemPlugin::Plugin "/driver"
|
|
104
139
|
# run vagrant cleanup
|
105
140
|
debug_string = (debug == true) ? " --debug" : ""
|
106
141
|
|
107
|
-
|
142
|
+
last_defined_driveroption = nil
|
143
|
+
|
144
|
+
for index in 0..task_hash["num_instances"] - 1
|
145
|
+
|
146
|
+
# grab last defined driver options set, or keep the current one
|
147
|
+
last_defined_driveroption = (task_hash["vm"]["driver"]["driveroptions"][index] == nil) ? last_defined_driveroption : task_hash["vm"]["driver"]["driveroptions"][index]
|
148
|
+
|
108
149
|
cleanup_pid = Process.spawn(
|
109
150
|
{
|
110
151
|
"VAGRANT_CWD" => File.join("#{hive_location}", "driver", task_hash["vm"]["driver"]["drivertype"], task_name),
|
111
|
-
"VAGRANT_DEFAULT_PROVIDER" =>
|
152
|
+
"VAGRANT_DEFAULT_PROVIDER" => last_defined_driveroption["providertype"]
|
112
153
|
},
|
113
154
|
"vagrant destroy zergling_#{index} --force#{debug_string}")
|
114
155
|
Process.wait(cleanup_pid)
|
115
156
|
abort("ERROR: vagrant failed!") unless $?.exitstatus == 0
|
116
157
|
end
|
117
158
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
159
|
+
last_defined_driveroption = nil
|
160
|
+
|
161
|
+
# last explicitly defined vm instance.
|
162
|
+
last_defined_vm = nil
|
163
|
+
|
164
|
+
for index in 0..task_hash["num_instances"] - 1
|
165
|
+
# grab last defined driver options set, or keep the current one
|
166
|
+
last_defined_driveroption = (task_hash["vm"]["driver"]["driveroptions"][index] == nil) ? last_defined_driveroption : task_hash["vm"]["driver"]["driveroptions"][index]
|
167
|
+
|
168
|
+
# grab last defined vm instance, or keep the current one
|
169
|
+
last_defined_vm = (task_hash["vm"]["instances"][index] == nil) ? last_defined_vm : task_hash["vm"]["instances"][index]
|
170
|
+
|
171
|
+
boxname = Digest::SHA1.hexdigest "#{task_name}#{last_defined_driveroption["providertype"]}#{last_defined_vm["basebox"]}"
|
172
|
+
cleanup_pid = Process.spawn(
|
173
|
+
{
|
174
|
+
"VAGRANT_CWD" => File.join("#{hive_location}", "driver", task_hash["vm"]["driver"]["drivertype"], task_name)
|
175
|
+
},
|
176
|
+
"vagrant box remove #{boxname} #{last_defined_driveroption["providertype"]}#{debug_string}")
|
177
|
+
Process.wait(cleanup_pid)
|
178
|
+
end
|
124
179
|
end
|
125
180
|
|
126
181
|
def halt hive_location, task_name, task_hash, debug
|
127
|
-
|
182
|
+
check_dependencies
|
128
183
|
puts("Halting all vagrant virtual machines for task #{task_name} ...")
|
129
184
|
|
130
185
|
renderer = Renderer.new(
|
@@ -137,11 +192,18 @@ class Vagrant < ZergGemPlugin::Plugin "/driver"
|
|
137
192
|
|
138
193
|
# halt all machines
|
139
194
|
halt_pid = nil
|
140
|
-
|
195
|
+
|
196
|
+
last_defined_driveroption = nil
|
197
|
+
|
198
|
+
for index in 0..task_hash["num_instances"] - 1
|
199
|
+
|
200
|
+
# grab last defined driver options set, or keep the current one
|
201
|
+
last_defined_driveroption = (task_hash["vm"]["driver"]["driveroptions"][index] == nil) ? last_defined_driveroption : task_hash["vm"]["driver"]["driveroptions"][index]
|
202
|
+
|
141
203
|
halt_pid = Process.spawn(
|
142
204
|
{
|
143
205
|
"VAGRANT_CWD" => File.join("#{hive_location}", "driver", task_hash["vm"]["driver"]["drivertype"], task_name),
|
144
|
-
"VAGRANT_DEFAULT_PROVIDER" =>
|
206
|
+
"VAGRANT_DEFAULT_PROVIDER" => last_defined_driveroption["providertype"]
|
145
207
|
},
|
146
208
|
"vagrant halt zergling_#{index}#{debug_string}")
|
147
209
|
Process.wait(halt_pid)
|
@@ -153,6 +215,22 @@ class Vagrant < ZergGemPlugin::Plugin "/driver"
|
|
153
215
|
return File.open(File.join("#{File.dirname(__FILE__)}", "..", "..", "resources", "tasks_schema.template"), 'r').read
|
154
216
|
end
|
155
217
|
|
218
|
+
def option_schema
|
219
|
+
return File.open(File.join("#{File.dirname(__FILE__)}", "..", "..", "resources", "option_schema.template"), 'r').read
|
220
|
+
end
|
221
|
+
|
222
|
+
def folder_schema
|
223
|
+
return File.open(File.join("#{File.dirname(__FILE__)}", "..", "..", "resources", "folders_schema.template"), 'r').read
|
224
|
+
end
|
225
|
+
|
226
|
+
def port_schema
|
227
|
+
return File.open(File.join("#{File.dirname(__FILE__)}", "..", "..", "resources", "ports_schema.template"), 'r').read
|
228
|
+
end
|
229
|
+
|
230
|
+
def ssh_schema
|
231
|
+
return File.open(File.join("#{File.dirname(__FILE__)}", "..", "..", "resources", "ssh_schema.template"), 'r').read
|
232
|
+
end
|
233
|
+
|
156
234
|
def which(cmd)
|
157
235
|
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
158
236
|
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
@@ -163,5 +241,25 @@ class Vagrant < ZergGemPlugin::Plugin "/driver"
|
|
163
241
|
end
|
164
242
|
return nil
|
165
243
|
end
|
244
|
+
|
245
|
+
def check_dependencies
|
246
|
+
abort("ERROR: Vagrant not installed!") unless which("vagrant") != nil
|
247
|
+
required_plugins = ["vagrant-aws", "vagrant-omnibus", "vagrant-berkshelf"]
|
248
|
+
if /linux|arch/i === RbConfig::CONFIG['host_os']
|
249
|
+
required_plugins.push("vagrant-libvirt")
|
250
|
+
end
|
251
|
+
|
252
|
+
required_plugins.each { |plugin|
|
253
|
+
plugin_check_pid = Process.spawn("vagrant plugin list | grep #{plugin}")
|
254
|
+
Process.wait(plugin_check_pid)
|
255
|
+
|
256
|
+
if $?.exitstatus != 0
|
257
|
+
puts "Installing #{plugin}"
|
258
|
+
plugin_check_pid = Process.spawn("vagrant plugin install #{plugin}")
|
259
|
+
Process.wait(plugin_check_pid)
|
260
|
+
abort("ERROR: #{plugin} installation failed!") unless $?.exitstatus == 0
|
261
|
+
end
|
262
|
+
}
|
263
|
+
end
|
166
264
|
end
|
167
265
|
|
@@ -24,24 +24,18 @@
|
|
24
24
|
require 'awesome_print'
|
25
25
|
require 'fileutils'
|
26
26
|
require 'securerandom'
|
27
|
+
require 'ipaddress'
|
28
|
+
require 'digest/sha1'
|
29
|
+
require 'ipaddress'
|
27
30
|
require_relative 'erbalize'
|
28
31
|
|
29
32
|
class Renderer
|
30
33
|
|
31
|
-
# generate a virtualbox - compatible MAC address
|
32
|
-
def generateMACAddress()
|
33
|
-
firstChar = (0..255).map(&:chr).select{|x| x =~ /[0-9A-Fa-f]/}.sample(1).join
|
34
|
-
secondChar = (0..255).map(&:chr).select{|x| x =~ /[02468ACEace]/}.sample(1).join
|
35
|
-
restOfChars = (0..255).map(&:chr).select{|x| x =~ /[0-9A-Fa-f]/}.sample(10).join
|
36
|
-
return "#{firstChar}#{secondChar}#{restOfChars}"
|
37
|
-
end
|
38
|
-
|
39
34
|
def initialize(hive_location, task_name, task_hash)
|
40
35
|
@vm = task_hash["vm"]
|
41
36
|
@name = task_name
|
42
|
-
@
|
43
|
-
@
|
44
|
-
@synced_folders = task_hash["synced_folders"]
|
37
|
+
@num_instances = task_hash["num_instances"]
|
38
|
+
@vm_instances = task_hash["vm"]["instances"]
|
45
39
|
@hive_location = hive_location
|
46
40
|
end
|
47
41
|
|
@@ -57,103 +51,220 @@ class Renderer
|
|
57
51
|
# load the machine details template
|
58
52
|
machine_template = File.open(File.join("#{File.dirname(__FILE__)}", "..", "..", "resources", "machine.template"), 'r').read
|
59
53
|
|
60
|
-
# load the bridge details template
|
61
|
-
bridge_template = File.open(File.join("#{File.dirname(__FILE__)}", "..", "..", "resources", "bridging.template"), 'r').read
|
62
|
-
|
63
|
-
# load the host only network details template
|
64
|
-
hostonly_template = File.open(File.join("#{File.dirname(__FILE__)}", "..", "..", "resources", "hostonly.template"), 'r').read
|
65
54
|
|
66
55
|
# render templates....
|
67
|
-
|
68
|
-
#
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
56
|
+
|
57
|
+
# all machines
|
58
|
+
all_machines = ""
|
59
|
+
|
60
|
+
# JSON - defined range of ip addresses in CIDR format
|
61
|
+
ip_range = (@vm.has_key?("private_ip_range")) ? IPAddress(@vm["private_ip_range"]).hosts : nil
|
62
|
+
if ip_range != nil
|
63
|
+
abort("ERROR: ip range (#{@vm["private_ip_range"]}) does not have enough ip addresses for all instances.") unless ip_range.length > @num_instances
|
74
64
|
end
|
75
65
|
|
76
|
-
#
|
77
|
-
|
78
|
-
:provider => @vm["driver"]["providertype"],
|
79
|
-
:provider_specifics => provider_details
|
80
|
-
}
|
81
|
-
provider_parent_string = Erbalize.erbalize_hash(provider_parent_template, sources)
|
66
|
+
# last explicitly defined vm instance.
|
67
|
+
last_defined_vm = nil
|
82
68
|
|
83
|
-
#
|
84
|
-
|
85
|
-
all_machines = ""
|
86
|
-
for index in 0..@instances - 1
|
69
|
+
# last explicitly defined driver option set
|
70
|
+
last_defined_driveroption = nil
|
87
71
|
|
88
|
-
|
89
|
-
|
72
|
+
# render a machine section for each instance.
|
73
|
+
# each machine gets an explicitly defined instance
|
74
|
+
# if there is no explicitly defined instance - last known explicitly defined instance information is used.
|
75
|
+
# For example: if num_instances = 3 and there are 2 vm instances defined, then machine_0 gets instance definition 0, machine_1 gets instance
|
76
|
+
# definition 1, machine_2 gets instance definition 2
|
77
|
+
for index in 0..@num_instances - 1
|
90
78
|
|
91
|
-
#
|
92
|
-
@
|
93
|
-
|
94
|
-
|
79
|
+
# grab last defined vm instance, or keep the current one
|
80
|
+
last_defined_vm = (@vm_instances[index] == nil) ? last_defined_vm : @vm_instances[index]
|
81
|
+
|
82
|
+
# grab last defined driver options set, or keep the current one
|
83
|
+
last_defined_driveroption = (@vm["driver"]["driveroptions"][index] == nil) ? last_defined_driveroption : @vm["driver"]["driveroptions"][index]
|
84
|
+
|
85
|
+
# provider type
|
86
|
+
provider = last_defined_driveroption["providertype"]
|
87
|
+
|
88
|
+
# unique name
|
89
|
+
unique_name = "zergling_#{index}_#{SecureRandom.hex(20)}"
|
90
|
+
|
91
|
+
# render provider details to string
|
92
|
+
provider_specifics = ""
|
93
|
+
|
94
|
+
if provider == "aws"
|
95
|
+
# inject private ip for aws provider (if not specified explicitly and if ip range is provided)
|
96
|
+
if last_defined_driveroption.has_key?("provider_options")
|
97
|
+
if last_defined_driveroption["provider_options"].has_key?("subnet_id")
|
98
|
+
if !last_defined_driveroption["provider_options"].has_key?("private_ip_address")
|
99
|
+
if ip_range != nil
|
100
|
+
provider_specifics += "\t\t\t#{provider}.private_ip_address = #{ip_range[index]}"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
95
104
|
end
|
96
|
-
}
|
97
105
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
106
|
+
# inject name tag
|
107
|
+
if last_defined_driveroption.has_key?("provider_options")
|
108
|
+
if last_defined_driveroption["provider_options"].has_key?("tags")
|
109
|
+
if !last_defined_driveroption["provider_options"]["tags"].has_key?("Name")
|
110
|
+
last_defined_driveroption["provider_options"]["tags"]["Name"] = unique_name
|
111
|
+
end
|
112
|
+
else
|
113
|
+
last_defined_driveroption["provider_options"]["tags"] = { "Name" => unique_name }
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
if last_defined_driveroption.has_key?("provider_options")
|
120
|
+
provider_options = last_defined_driveroption["provider_options"]
|
121
|
+
|
122
|
+
provider_options.each do |key, value|
|
123
|
+
if value.is_a?(String)
|
124
|
+
provider_specifics += "\t\t\t#{provider}.#{key} = \"#{value}\"\n"
|
125
|
+
elsif value.is_a?(Array)
|
126
|
+
provider_specifics += "\t\t\t#{provider}.#{key} = #{value.to_json}\n"
|
127
|
+
else
|
128
|
+
provider_specifics += "\t\t\t#{provider}.#{key} = #{value}\n"
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
if last_defined_driveroption.has_key?("raw_options")
|
134
|
+
raw_provider_options = last_defined_driveroption["raw_options"]
|
135
|
+
raw_provider_options.each { |raw_option|
|
136
|
+
provider_specifics += "\t\t\t#{raw_option}\n"
|
137
|
+
}
|
138
|
+
end
|
139
|
+
|
140
|
+
# render networks
|
141
|
+
network_specifics = ""
|
142
|
+
if last_defined_vm.has_key?("networks")
|
143
|
+
last_defined_vm["networks"].each { |network|
|
144
|
+
network_specifics += "\t\tzergling_#{index}.vm.network \"#{network["type"]}\""
|
145
|
+
if network.has_key?("bridge")
|
146
|
+
network_specifics += ", bridge: \"#{network["bridge"]}\""
|
147
|
+
end
|
148
|
+
if network.has_key?("ip")
|
149
|
+
network_specifics += ", ip: \"#{network["ip"]}\""
|
150
|
+
elsif ip_range != nil && network["type"] != "public_network"
|
151
|
+
# first host IP is the host machine
|
152
|
+
network_specifics += ", ip: \"#{ip_range[index + 1]}\""
|
153
|
+
end
|
154
|
+
|
155
|
+
if network.has_key?("additional")
|
156
|
+
network["additional"].each do |key, value|
|
157
|
+
if value.is_a?(String)
|
158
|
+
network_specifics += ", #{key}: \"#{value}\""
|
159
|
+
else
|
160
|
+
network_specifics += ", #{key}: #{value}"
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
network_specifics += "\n"
|
113
165
|
}
|
114
|
-
bridge_section = Erbalize.erbalize_hash(bridge_template, sources)
|
115
166
|
end
|
116
167
|
|
117
|
-
#
|
118
|
-
|
119
|
-
if
|
120
|
-
|
121
|
-
|
122
|
-
|
168
|
+
# render sync folders
|
169
|
+
folder_specifics = ""
|
170
|
+
if last_defined_vm.has_key?("synced_folders")
|
171
|
+
last_defined_vm["synced_folders"].each { |folder|
|
172
|
+
folder_specifics += "\t\tzergling_#{index}.vm.synced_folder \"#{folder["host_path"]}\", \"#{folder["guest_path"]}\""
|
173
|
+
if folder.has_key?("additional")
|
174
|
+
folder["additional"].each do |key, value|
|
175
|
+
if value.is_a?(String)
|
176
|
+
folder_specifics += ", #{key}: \"#{value}\""
|
177
|
+
else
|
178
|
+
folder_specifics += ", #{key}: #{value}"
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
folder_specifics += "\n"
|
123
183
|
}
|
124
|
-
hostonly_section = Erbalize.erbalize_hash(hostonly_template, sources)
|
125
184
|
end
|
126
185
|
|
127
|
-
#
|
128
|
-
|
129
|
-
if
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
folder["options"].each { |option|
|
186
|
+
# render forwarded ports
|
187
|
+
port_specifics = ""
|
188
|
+
if last_defined_vm.has_key?("forwarded_ports")
|
189
|
+
last_defined_vm["forwarded_ports"].each { |port|
|
190
|
+
port_specifics += "\t\tzergling_#{index}.vm.network \"forwarded_port\", guest: #{port["guest_port"]}, host: #{port["host_port"]}"
|
191
|
+
if port.has_key?("additional")
|
192
|
+
port["additional"].each { |option|
|
135
193
|
option.each do |key, value|
|
136
194
|
if value.is_a?(String)
|
137
|
-
|
195
|
+
port_specifics += ", #{key}: \"#{value}\""
|
138
196
|
else
|
139
|
-
|
197
|
+
port_specifics += ", #{key}: #{value}"
|
140
198
|
end
|
141
199
|
end
|
142
200
|
}
|
143
201
|
end
|
144
|
-
|
145
|
-
folder_definition = "zergling_#{index}.vm.synced_folder \"#{folder['host_path']}\", \"#{folder['guest_path']}\""
|
146
|
-
folder_definition = "#{folder_definition}#{other_options}" unless other_options.empty?()
|
147
|
-
folder_definitions += "\t\t#{folder_definition}\n"
|
202
|
+
port_specifics += "\n"
|
148
203
|
}
|
149
204
|
end
|
150
205
|
|
206
|
+
# render ssh settings
|
207
|
+
ssh_specifics = ""
|
208
|
+
if last_defined_vm.has_key?("ssh")
|
209
|
+
if last_defined_vm["ssh"].has_key?("username")
|
210
|
+
ssh_specifics += "\t\tzergling_#{index}.ssh.username = \"#{last_defined_vm["ssh"]["username"]}\"\n"
|
211
|
+
end
|
212
|
+
|
213
|
+
if last_defined_vm["ssh"].has_key?("host")
|
214
|
+
ssh_specifics += "\t\tzergling_#{index}.ssh.host = \"#{last_defined_vm["ssh"]["host"]}\"\n"
|
215
|
+
end
|
216
|
+
|
217
|
+
if last_defined_vm["ssh"].has_key?("port")
|
218
|
+
ssh_specifics += "\t\tzergling_#{index}.ssh.port = #{last_defined_vm["ssh"]["port"]}\n"
|
219
|
+
end
|
220
|
+
|
221
|
+
if last_defined_vm["ssh"].has_key?("guest_port")
|
222
|
+
ssh_specifics += "\t\tzergling_#{index}.ssh.guest_port = #{last_defined_vm["ssh"]["guest_port"]}\n"
|
223
|
+
end
|
224
|
+
|
225
|
+
if last_defined_vm["ssh"].has_key?("private_key_path")
|
226
|
+
ssh_specifics += "\t\tzergling_#{index}.ssh.private_key_path = \"#{last_defined_vm["ssh"]["private_key_path"]}\"\n"
|
227
|
+
end
|
228
|
+
|
229
|
+
if last_defined_vm["ssh"].has_key?("forward_agent")
|
230
|
+
ssh_specifics += "\t\tzergling_#{index}.ssh.forward_agent = #{last_defined_vm["ssh"]["forward_agent"]}\n"
|
231
|
+
end
|
232
|
+
|
233
|
+
if last_defined_vm["ssh"].has_key?("additional")
|
234
|
+
last_defined_vm["ssh"]["additional"].each { |option|
|
235
|
+
option.each do |key, value|
|
236
|
+
if value.is_a?(String)
|
237
|
+
ssh_specifics += "\t\tzergling_#{index}.ssh.#{key} = \"#{value}\"\n"
|
238
|
+
else
|
239
|
+
ssh_specifics += "\t\tzergling_#{index}.ssh.#{key} = #{value}\n"
|
240
|
+
end
|
241
|
+
end
|
242
|
+
}
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
# render tasks array
|
247
|
+
# inject randomized node_name into chef_client tasks
|
248
|
+
last_defined_vm["tasks"].each { |task|
|
249
|
+
if task["type"] == "chef_client"
|
250
|
+
task["node_name"] = unique_name
|
251
|
+
end
|
252
|
+
}
|
253
|
+
|
254
|
+
# tasks array rendered to ruby string. double encoding to escape quotes and allow for variable expansion
|
255
|
+
tasks_array = last_defined_vm["tasks"].to_json.to_json
|
256
|
+
|
151
257
|
sources = {
|
152
258
|
:machine_name => "zergling_#{index}",
|
153
|
-
:
|
154
|
-
:
|
155
|
-
:
|
156
|
-
:
|
259
|
+
:basebox_path => last_defined_vm["basebox"],
|
260
|
+
:box_name => Digest::SHA1.hexdigest("#{@name}#{provider}#{last_defined_vm["basebox"]}"),
|
261
|
+
:provider => provider,
|
262
|
+
:provider_specifics => provider_specifics,
|
263
|
+
:networks_array => network_specifics,
|
264
|
+
:sync_folders_array => folder_specifics,
|
265
|
+
:ports_array => port_specifics,
|
266
|
+
:ssh_specifics => ssh_specifics,
|
267
|
+
:tasks_array => tasks_array
|
157
268
|
}.delete_if { |k, v| v.nil? }
|
158
269
|
|
159
270
|
machine_section = Erbalize.erbalize_hash(machine_template, sources)
|
@@ -161,9 +272,6 @@ class Renderer
|
|
161
272
|
end
|
162
273
|
|
163
274
|
sources = {
|
164
|
-
:provider_section => provider_parent_string,
|
165
|
-
:basebox_path => @vm["basebox"],
|
166
|
-
:box_name => "zergling_#{@name}_#{@vm["driver"]["providertype"]}",
|
167
275
|
:vm_defines => all_machines
|
168
276
|
}
|
169
277
|
full_template = Erbalize.erbalize_hash(main_template, sources)
|
data/resources/machine.template
CHANGED
@@ -1,8 +1,17 @@
|
|
1
1
|
# define the machine name
|
2
2
|
config.vm.define "<%= machine_name %>" do |<%= machine_name %>|
|
3
|
-
|
4
|
-
|
3
|
+
<%= machine_name %>.vm.box_url = "<%= basebox_path %>"
|
4
|
+
<%= machine_name %>.vm.box = "<%= box_name %>"
|
5
|
+
|
6
|
+
<%= ssh_specifics -%>
|
7
|
+
|
8
|
+
<%= machine_name %>.vm.provider :<%= provider %> do |<%= provider %>|
|
9
|
+
<%= provider_specifics -%>
|
10
|
+
end
|
11
|
+
|
12
|
+
<%= networks_array -%>
|
5
13
|
<%= sync_folders_array -%>
|
14
|
+
<%= ports_array -%>
|
6
15
|
|
7
16
|
# provisioning
|
8
17
|
tasks = JSON.parse(<%= tasks_array %>)
|
data/resources/main.template
CHANGED
@@ -1,174 +1,172 @@
|
|
1
|
-
"
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
}
|
174
|
-
}
|
1
|
+
"type": {
|
2
|
+
"type": "string",
|
3
|
+
"pattern": "^(shell|chef_client|chef_solo)$"
|
4
|
+
},
|
5
|
+
"inline": {
|
6
|
+
"type": "string"
|
7
|
+
},
|
8
|
+
"path": {
|
9
|
+
"type": "string"
|
10
|
+
},
|
11
|
+
"parameters": {
|
12
|
+
"type": "string"
|
13
|
+
},
|
14
|
+
"environment": {
|
15
|
+
"type": "string"
|
16
|
+
},
|
17
|
+
"upload_path": {
|
18
|
+
"type": "string"
|
19
|
+
},
|
20
|
+
"recipe_url": {
|
21
|
+
"type": "string"
|
22
|
+
},
|
23
|
+
"client_key_path": {
|
24
|
+
"type": "string"
|
25
|
+
},
|
26
|
+
"validation_client_name": {
|
27
|
+
"type": "string"
|
28
|
+
},
|
29
|
+
"arguments": {
|
30
|
+
"type": "string"
|
31
|
+
},
|
32
|
+
"chef_server_url": {
|
33
|
+
"type": "string"
|
34
|
+
},
|
35
|
+
"validation_key_path": {
|
36
|
+
"type": "string"
|
37
|
+
},
|
38
|
+
"encrypted_data_bag_secret_key_path": {
|
39
|
+
"type": "string"
|
40
|
+
},
|
41
|
+
"binary_path": {
|
42
|
+
"type": "string"
|
43
|
+
},
|
44
|
+
"custom_config_path": {
|
45
|
+
"type": "string"
|
46
|
+
},
|
47
|
+
"formatter": {
|
48
|
+
"type": "string"
|
49
|
+
},
|
50
|
+
"http_proxy": {
|
51
|
+
"type": "string"
|
52
|
+
},
|
53
|
+
"http_proxy_user": {
|
54
|
+
"type": "string"
|
55
|
+
},
|
56
|
+
"http_proxy_pass": {
|
57
|
+
"type": "string"
|
58
|
+
},
|
59
|
+
"no_proxy": {
|
60
|
+
"type": "string"
|
61
|
+
},
|
62
|
+
"https_proxy": {
|
63
|
+
"type": "string"
|
64
|
+
},
|
65
|
+
"https_proxy_user": {
|
66
|
+
"type": "string"
|
67
|
+
},
|
68
|
+
"https_proxy_pass": {
|
69
|
+
"type": "string"
|
70
|
+
},
|
71
|
+
"log_level": {
|
72
|
+
"type": "string"
|
73
|
+
},
|
74
|
+
"provisioning_path": {
|
75
|
+
"type": "string"
|
76
|
+
},
|
77
|
+
"file_cache_path": {
|
78
|
+
"type": "string"
|
79
|
+
},
|
80
|
+
"file_backup_path": {
|
81
|
+
"type": "string"
|
82
|
+
},
|
83
|
+
"verbose_logging": {
|
84
|
+
"type": "boolean"
|
85
|
+
},
|
86
|
+
"delete_node": {
|
87
|
+
"type": "boolean"
|
88
|
+
},
|
89
|
+
"delete_client": {
|
90
|
+
"type": "boolean"
|
91
|
+
},
|
92
|
+
"nfs": {
|
93
|
+
"type": "boolean"
|
94
|
+
},
|
95
|
+
"binary": {
|
96
|
+
"type": "boolean"
|
97
|
+
},
|
98
|
+
"keep_color": {
|
99
|
+
"type": "boolean"
|
100
|
+
},
|
101
|
+
"priveleged": {
|
102
|
+
"type": "boolean"
|
103
|
+
},
|
104
|
+
"attempts": {
|
105
|
+
"type": "integer"
|
106
|
+
},
|
107
|
+
"json": {
|
108
|
+
"type": "object"
|
109
|
+
},
|
110
|
+
"cookbooks_path": {
|
111
|
+
"type": "array",
|
112
|
+
"minItems": 1,
|
113
|
+
"items": [
|
114
|
+
{
|
115
|
+
"type": "string"
|
116
|
+
}
|
117
|
+
]
|
118
|
+
},
|
119
|
+
"args": {
|
120
|
+
"type": "array",
|
121
|
+
"minItems": 1,
|
122
|
+
"items": [
|
123
|
+
{
|
124
|
+
"type": "string"
|
125
|
+
}
|
126
|
+
]
|
127
|
+
},
|
128
|
+
"roles_path": {
|
129
|
+
"type": "array",
|
130
|
+
"minItems": 1,
|
131
|
+
"items": [
|
132
|
+
{
|
133
|
+
"type": "string"
|
134
|
+
}
|
135
|
+
]
|
136
|
+
},
|
137
|
+
"data_bags_path": {
|
138
|
+
"type": "array",
|
139
|
+
"minItems": 1,
|
140
|
+
"items": [
|
141
|
+
{
|
142
|
+
"type": "string"
|
143
|
+
}
|
144
|
+
]
|
145
|
+
},
|
146
|
+
"environments_path": {
|
147
|
+
"type": "array",
|
148
|
+
"minItems": 1,
|
149
|
+
"items": [
|
150
|
+
{
|
151
|
+
"type": "string"
|
152
|
+
}
|
153
|
+
]
|
154
|
+
},
|
155
|
+
"run_list": {
|
156
|
+
"type": "array",
|
157
|
+
"minItems": 1,
|
158
|
+
"items": [
|
159
|
+
{
|
160
|
+
"type": "string"
|
161
|
+
}
|
162
|
+
]
|
163
|
+
},
|
164
|
+
"roles": {
|
165
|
+
"type": "array",
|
166
|
+
"minItems": 1,
|
167
|
+
"items": [
|
168
|
+
{
|
169
|
+
"type": "string"
|
170
|
+
}
|
171
|
+
]
|
172
|
+
}
|
data/zergrush_vagrant.gemspec
CHANGED
@@ -19,9 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.add_development_dependency "rake"
|
20
20
|
s.add_development_dependency "zergrush"
|
21
21
|
|
22
|
-
s.add_dependency "
|
23
|
-
s.add_dependency "vagrant-aws"
|
24
|
-
s.add_dependency "vagrant-libvirt"
|
22
|
+
s.add_dependency "ipaddress"
|
25
23
|
|
26
24
|
s.files = `git ls-files`.split("\n")
|
27
25
|
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zergrush_vagrant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- MTN Satellite Communications
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -53,35 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - '>='
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: vagrant-aws
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - '>='
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :runtime
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - '>='
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: vagrant-libvirt
|
56
|
+
name: ipaddress
|
85
57
|
requirement: !ruby/object:Gem::Requirement
|
86
58
|
requirements:
|
87
59
|
- - '>='
|
@@ -110,12 +82,15 @@ files:
|
|
110
82
|
- lib/zergrush_vagrant/init.rb
|
111
83
|
- lib/zergrush_vagrant/renderer.rb
|
112
84
|
- lib/zergrush_vagrant/version.rb
|
113
|
-
- resources/bridging.template
|
114
85
|
- resources/defaults.yaml
|
115
|
-
- resources/
|
86
|
+
- resources/folders_schema.template
|
116
87
|
- resources/machine.template
|
117
88
|
- resources/main.template
|
89
|
+
- resources/networks_schema.template
|
90
|
+
- resources/option_schema.template
|
91
|
+
- resources/ports_schema.template
|
118
92
|
- resources/provider.template
|
93
|
+
- resources/ssh_schema.template
|
119
94
|
- resources/tasks_schema.template
|
120
95
|
- zergrush_vagrant.gemspec
|
121
96
|
homepage: https://github.com/MTNSatelliteComm/zerg
|
data/resources/bridging.template
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
<%= machine_name %>.vm.network :public_network, :bridge => "<%= bridged_eth_description %>", :mac => <%= machine_mac %>, :use_dhcp_assigned_default_route => true
|
data/resources/hostonly.template
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
<%= machine_name %>.vm.network :private_network, ip: "192.168.50.<%= last_octet %>"
|