zergrush_vagrant 0.0.1

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: 9dd98a5c71a254b0c02f3826f144f510891feada
4
+ data.tar.gz: facd3cf108c86b6ca007812562f7ebe86e99fdd8
5
+ SHA512:
6
+ metadata.gz: 0049d7c9350f748c4065418a52be9a81f27f26935ef57d4eeef13a46b49e3c554f82e1dc8e0de2ae1a0a577997db5f7651376b1080cca8825559cc3a438a317b
7
+ data.tar.gz: 113adfdbfd8c0873f1c6b6e9e75ec638d9d3e624ba2d58ebe00a3970ef5c791a85114914e0fa3b8a867d01ab860b706e86bdb21dbfa3536c21c1cf46042a785e
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ pkg
2
+ tmp
data/COPYING ADDED
@@ -0,0 +1 @@
1
+ No copying restrictions/license given.
data/LICENSE ADDED
@@ -0,0 +1 @@
1
+ No license given.
data/README.md ADDED
@@ -0,0 +1,17 @@
1
+ zergrush_vagrant GemPlugin
2
+ ===
3
+
4
+ Tasks
5
+ --------------
6
+ - type - Type of task payload. 'shell', 'chef_client' or 'chef_solo'
7
+ - shell task parameters:
8
+ - [shell provisioner]
9
+ - 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
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,35 @@
1
+ #--
2
+
3
+ # Copyright 2014 by MTN Sattelite Communications
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to
7
+ # deal in the Software without restriction, including without limitation the
8
+ # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
9
+ # sell copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21
+ # IN THE SOFTWARE.
22
+ #++
23
+
24
+ require 'erb'
25
+ require 'ostruct'
26
+
27
+ class Erbalize < OpenStruct
28
+ def self.erbalize_hash(template, sources)
29
+ Erbalize.new(sources).render(template)
30
+ end
31
+
32
+ def render(template)
33
+ ERB.new(template, nil, '-').result(binding)
34
+ end
35
+ end
@@ -0,0 +1,167 @@
1
+ #--
2
+
3
+ # Copyright 2014 by MTN Sattelite Communications
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to
7
+ # deal in the Software without restriction, including without limitation the
8
+ # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
9
+ # sell copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21
+ # IN THE SOFTWARE.
22
+ #++
23
+
24
+ require 'zerg'
25
+ require_relative 'renderer'
26
+
27
+ # give this class the name you want for your command zergrush_vagrant
28
+ class Vagrant < ZergGemPlugin::Plugin "/driver"
29
+ def rush hive_location, task_name, task_hash, debug
30
+ abort("ERROR: Vagrant not installed!") unless which("vagrant") != nil
31
+ puts ("Will perform task #{task_name} with contents:\n #{task_hash.ai}")
32
+
33
+ renderer = Renderer.new(
34
+ hive_location,
35
+ task_name,
36
+ task_hash)
37
+ renderer.render
38
+
39
+ debug_string = (debug == true) ? " --debug" : ""
40
+
41
+ # bring up all of the VMs first.
42
+ puts("Starting vagrant in #{File.join("#{hive_location}", "driver", task_hash["vm"]["driver"]["drivertype"], task_name)}")
43
+ for index in 0..task_hash["instances"] - 1
44
+ create_pid = Process.spawn(
45
+ {
46
+ "VAGRANT_CWD" => File.join("#{hive_location}", "driver", task_hash["vm"]["driver"]["drivertype"], task_name),
47
+ "VAGRANT_DEFAULT_PROVIDER" => task_hash["vm"]["driver"]["providertype"]
48
+ },
49
+ "vagrant up zergling_#{index} --no-provision#{debug_string}")
50
+ Process.wait(create_pid)
51
+
52
+ if $?.exitstatus != 0
53
+ puts "Vagrant failed while creating one of the VMs. Will clean task #{task_name}:"
54
+ clean(hive_location, task_name, task_hash, debug)
55
+ abort("ERROR: vagrant failed!")
56
+ end
57
+ end
58
+
59
+ puts("Running tasks in vagrant virtual machines...")
60
+ # and provision them all at once (sort of)
61
+ provisioners = Array.new
62
+ provision_pid = nil
63
+ for index in 0..task_hash["instances"] - 1
64
+ provision_pid = Process.spawn(
65
+ {
66
+ "VAGRANT_CWD" => File.join("#{hive_location}", "driver", task_hash["vm"]["driver"]["drivertype"], task_name),
67
+ "VAGRANT_DEFAULT_PROVIDER" => task_hash["vm"]["driver"]["providertype"]
68
+ },
69
+ "vagrant provision zergling_#{index}#{debug_string}")
70
+ provisioners.push({:name => "zergling_#{index}", :pid => provision_pid})
71
+ end
72
+
73
+ # wait for everything to finish...
74
+ errors = Array.new
75
+ lock = Mutex.new
76
+ provisioners.each { |provisioner|
77
+ Thread.new {
78
+ Process.wait(provisioner[:pid]);
79
+ lock.synchronize do
80
+ errors.push(provisioner[:name]) unless $?.exitstatus == 0
81
+ end
82
+ }.join
83
+ }
84
+
85
+ if task_hash["vm"]["keepalive"] == false
86
+ halt(hive_location, task_name, task_hash, debug)
87
+ else
88
+ puts "Will leave instances running."
89
+ end
90
+
91
+ abort("ERROR: Finished with errors in: #{errors.to_s}") unless errors.length == 0
92
+ end
93
+
94
+ def clean hive_location, task_name, task_hash, debug
95
+ abort("ERROR: Vagrant not installed!") unless which("vagrant") != nil
96
+ puts("Cleaning task #{task_name} ...")
97
+
98
+ renderer = Renderer.new(
99
+ hive_location,
100
+ task_name,
101
+ task_hash)
102
+ renderer.render
103
+
104
+ # run vagrant cleanup
105
+ debug_string = (debug == true) ? " --debug" : ""
106
+
107
+ for index in 0..task_hash["instances"] - 1
108
+ cleanup_pid = Process.spawn(
109
+ {
110
+ "VAGRANT_CWD" => File.join("#{hive_location}", "driver", task_hash["vm"]["driver"]["drivertype"], task_name),
111
+ "VAGRANT_DEFAULT_PROVIDER" => task_hash["vm"]["driver"]["providertype"]
112
+ },
113
+ "vagrant destroy zergling_#{index} --force#{debug_string}")
114
+ Process.wait(cleanup_pid)
115
+ abort("ERROR: vagrant failed!") unless $?.exitstatus == 0
116
+ end
117
+
118
+ cleanup_pid = Process.spawn(
119
+ {
120
+ "VAGRANT_CWD" => File.join("#{hive_location}", "driver", task_hash["vm"]["driver"]["drivertype"], task_name)
121
+ },
122
+ "vagrant box remove zergling_#{task_name}_#{task_hash["vm"]["driver"]["providertype"]}#{debug_string} #{task_hash["vm"]["driver"]["providertype"]}")
123
+ Process.wait(cleanup_pid)
124
+ end
125
+
126
+ def halt hive_location, task_name, task_hash, debug
127
+ abort("ERROR: Vagrant not installed!") unless which("vagrant") != nil
128
+ puts("Halting all vagrant virtual machines for task #{task_name} ...")
129
+
130
+ renderer = Renderer.new(
131
+ hive_location,
132
+ task_name,
133
+ task_hash)
134
+ renderer.render
135
+
136
+ debug_string = (debug == true) ? " --debug" : ""
137
+
138
+ # halt all machines
139
+ halt_pid = nil
140
+ for index in 0..task_hash["instances"] - 1
141
+ halt_pid = Process.spawn(
142
+ {
143
+ "VAGRANT_CWD" => File.join("#{hive_location}", "driver", task_hash["vm"]["driver"]["drivertype"], task_name),
144
+ "VAGRANT_DEFAULT_PROVIDER" => task_hash["vm"]["driver"]["providertype"]
145
+ },
146
+ "vagrant halt zergling_#{index}#{debug_string}")
147
+ Process.wait(halt_pid)
148
+ abort("ERROR: vagrant halt failed on machine zergling_#{index}!") unless $?.exitstatus == 0
149
+ end
150
+ end
151
+
152
+ def task_schema
153
+ return File.open(File.join("#{File.dirname(__FILE__)}", "..", "..", "resources", "tasks_schema.template"), 'r').read
154
+ end
155
+
156
+ def which(cmd)
157
+ exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
158
+ ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
159
+ exts.each { |ext|
160
+ exe = File.join(path, "#{cmd}#{ext}")
161
+ return exe if File.executable? exe
162
+ }
163
+ end
164
+ return nil
165
+ end
166
+ end
167
+
@@ -0,0 +1,176 @@
1
+ #--
2
+
3
+ # Copyright 2014 by MTN Sattelite Communications
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to
7
+ # deal in the Software without restriction, including without limitation the
8
+ # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
9
+ # sell copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21
+ # IN THE SOFTWARE.
22
+ #++
23
+
24
+ require 'awesome_print'
25
+ require 'fileutils'
26
+ require 'securerandom'
27
+ require_relative 'erbalize'
28
+
29
+ class Renderer
30
+
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
+ def initialize(hive_location, task_name, task_hash)
40
+ @vm = task_hash["vm"]
41
+ @name = task_name
42
+ @instances = task_hash["instances"]
43
+ @tasks = task_hash["tasks"]
44
+ @synced_folders = task_hash["synced_folders"]
45
+ @hive_location = hive_location
46
+ end
47
+
48
+ def render
49
+ puts ("Rendering driver templates...")
50
+
51
+ # load the template files
52
+ main_template = File.open(File.join("#{File.dirname(__FILE__)}", "..", "..", "resources", "main.template"), 'r').read
53
+
54
+ # load the provider top level template
55
+ provider_parent_template = File.open(File.join("#{File.dirname(__FILE__)}", "..", "..", "resources", "provider.template"), 'r').read
56
+
57
+ # load the machine details template
58
+ machine_template = File.open(File.join("#{File.dirname(__FILE__)}", "..", "..", "resources", "machine.template"), 'r').read
59
+
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
+
66
+ # render templates....
67
+ # render provider details to string
68
+ #
69
+ # render provider details into a string
70
+ provider_details_array = @vm["driver"]["provider_options"]
71
+ provider_details = ""
72
+ for index in 0..provider_details_array.length - 1
73
+ provider_details += "\t\t" + provider_details_array[index] + "\n"
74
+ end
75
+
76
+ # render provider parent
77
+ sources = {
78
+ :provider => @vm["driver"]["providertype"],
79
+ :provider_specifics => provider_details
80
+ }
81
+ provider_parent_string = Erbalize.erbalize_hash(provider_parent_template, sources)
82
+
83
+ # render machine template
84
+ all_macs = Array.new
85
+ all_machines = ""
86
+ for index in 0..@instances - 1
87
+
88
+ # last ip octet offset for host only networking
89
+ ip_octet_offset = index
90
+
91
+ # inject randomized node_name into chef_client tasks
92
+ @tasks.each { |task|
93
+ if task["type"] == "chef_client"
94
+ task["node_name"] = "zergling_#{index}_#{SecureRandom.hex(20)}"
95
+ end
96
+ }
97
+
98
+ # tasks array rendered to ruby string. double encoding to escape quotes and allow for variable expansion
99
+ tasks_array = @tasks.to_json.to_json
100
+
101
+ # do we need the bridging template as well?
102
+ bridge_section = nil
103
+ if @vm.has_key?("bridge_description")
104
+ # mac address to use?
105
+ new_mac = ""
106
+ begin
107
+ new_mac = generateMACAddress()
108
+ end while all_macs.include? new_mac
109
+
110
+ sources = {
111
+ :machine_mac => new_mac,
112
+ :bridged_eth_description => @vm["bridge_description"]
113
+ }
114
+ bridge_section = Erbalize.erbalize_hash(bridge_template, sources)
115
+ end
116
+
117
+ # do we need the host only template as well?
118
+ hostonly_section = nil
119
+ if @vm["private_network"] == true
120
+ sources = {
121
+ :machine_name => "zergling_#{index}",
122
+ :last_octet => ip_octet_offset + 4, # TODO: this is probably specific to virtualbox networking
123
+ }
124
+ hostonly_section = Erbalize.erbalize_hash(hostonly_template, sources)
125
+ end
126
+
127
+ # synced folders
128
+ folder_definitions = nil
129
+ if @synced_folders != nil
130
+ folder_definitions = ""
131
+ @synced_folders.each { |folder|
132
+ other_options = ""
133
+ if folder.has_key?("options")
134
+ folder["options"].each { |option|
135
+ option.each do |key, value|
136
+ if value.is_a?(String)
137
+ other_options += ", :#{key} => \"#{value}\""
138
+ else
139
+ other_options += ", :#{key} => #{value}"
140
+ end
141
+ end
142
+ }
143
+ 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"
148
+ }
149
+ end
150
+
151
+ sources = {
152
+ :machine_name => "zergling_#{index}",
153
+ :bridge_specifics => bridge_section,
154
+ :hostonly_specifics => hostonly_section,
155
+ :tasks_array => tasks_array,
156
+ :sync_folders_array => folder_definitions
157
+ }.delete_if { |k, v| v.nil? }
158
+
159
+ machine_section = Erbalize.erbalize_hash(machine_template, sources)
160
+ all_machines += "\n#{machine_section}"
161
+ end
162
+
163
+ sources = {
164
+ :provider_section => provider_parent_string,
165
+ :basebox_path => @vm["basebox"],
166
+ :box_name => "zergling_#{@name}_#{@vm["driver"]["providertype"]}",
167
+ :vm_defines => all_machines
168
+ }
169
+ full_template = Erbalize.erbalize_hash(main_template, sources)
170
+
171
+ # write the file
172
+ puts ("Writing #{File.join("#{@hive_location}", "driver", @vm["driver"]["drivertype"], @name, "Vagrantfile")}...")
173
+ FileUtils.mkdir_p(File.join("#{@hive_location}", "driver", @vm["driver"]["drivertype"], @name))
174
+ File.open(File.join("#{@hive_location}", "driver", @vm["driver"]["drivertype"], @name, "Vagrantfile"), 'w') { |file| file.write(full_template) }
175
+ end
176
+ end
@@ -0,0 +1,26 @@
1
+ #--
2
+
3
+ # Copyright 2014 by MTN Sattelite Communications
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to
7
+ # deal in the Software without restriction, including without limitation the
8
+ # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
9
+ # sell copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21
+ # IN THE SOFTWARE.
22
+ #++
23
+
24
+ module ZergrushVagrant
25
+ VERSION = "0.0.1"
26
+ end
@@ -0,0 +1 @@
1
+ <%= machine_name %>.vm.network :public_network, :bridge => "<%= bridged_eth_description %>", :mac => <%= machine_mac %>, :use_dhcp_assigned_default_route => true
@@ -0,0 +1,2 @@
1
+ ---
2
+ :debug: false
@@ -0,0 +1 @@
1
+ <%= machine_name %>.vm.network :private_network, ip: "192.168.50.<%= last_octet %>"
@@ -0,0 +1,22 @@
1
+ # define the machine name
2
+ config.vm.define "<%= machine_name %>" do |<%= machine_name %>|
3
+ <%= bridge_specifics -%>
4
+ <%= hostonly_specifics %>
5
+ <%= sync_folders_array -%>
6
+
7
+ # provisioning
8
+ tasks = JSON.parse(<%= tasks_array %>)
9
+ tasks.each { |task|
10
+ if task["type"] == "chef_client" || task["type"] == "chef_solo"
11
+ <%= machine_name %>.omnibus.chef_version = :latest
12
+ end
13
+
14
+ <%= machine_name %>.vm.provision "#{task["type"]}" do |provisioner|
15
+ task.each do |key, value|
16
+ next if key == "type"
17
+ provisioner.send("#{key}=", value)
18
+ end
19
+ end
20
+ }
21
+ end
22
+
@@ -0,0 +1,11 @@
1
+ Vagrant.configure(2) do |config|
2
+ <%= provider_section %>
3
+
4
+ config.vagrant.host = :detect
5
+ config.vm.box_url = "<%= basebox_path %>"
6
+ config.vm.box = "<%= box_name %>"
7
+ config.vm.boot_timeout = 300
8
+ config.vm.graceful_halt_timeout = 60
9
+ <%= vm_defines -%>
10
+
11
+ end
@@ -0,0 +1,3 @@
1
+ config.vm.provider :<%= provider %> do |<%= provider %>, override|
2
+ <%= provider_specifics -%>
3
+ end
@@ -0,0 +1,174 @@
1
+ "properties": {
2
+ "type": {
3
+ "type": "string",
4
+ "pattern": "^(shell|chef_client|chef_solo)$"
5
+ },
6
+ "inline": {
7
+ "type": "string"
8
+ },
9
+ "path": {
10
+ "type": "string"
11
+ },
12
+ "parameters": {
13
+ "type": "string"
14
+ },
15
+ "environment": {
16
+ "type": "string"
17
+ },
18
+ "upload_path": {
19
+ "type": "string"
20
+ },
21
+ "recipe_url": {
22
+ "type": "string"
23
+ },
24
+ "client_key_path": {
25
+ "type": "string"
26
+ },
27
+ "validation_client_name": {
28
+ "type": "string"
29
+ },
30
+ "arguments": {
31
+ "type": "string"
32
+ },
33
+ "chef_server_url": {
34
+ "type": "string"
35
+ },
36
+ "validation_key_path": {
37
+ "type": "string"
38
+ },
39
+ "encrypted_data_bag_secret_key_path": {
40
+ "type": "string"
41
+ },
42
+ "binary_path": {
43
+ "type": "string"
44
+ },
45
+ "custom_config_path": {
46
+ "type": "string"
47
+ },
48
+ "formatter": {
49
+ "type": "string"
50
+ },
51
+ "http_proxy": {
52
+ "type": "string"
53
+ },
54
+ "http_proxy_user": {
55
+ "type": "string"
56
+ },
57
+ "http_proxy_pass": {
58
+ "type": "string"
59
+ },
60
+ "no_proxy": {
61
+ "type": "string"
62
+ },
63
+ "https_proxy": {
64
+ "type": "string"
65
+ },
66
+ "https_proxy_user": {
67
+ "type": "string"
68
+ },
69
+ "https_proxy_pass": {
70
+ "type": "string"
71
+ },
72
+ "log_level": {
73
+ "type": "string"
74
+ },
75
+ "provisioning_path": {
76
+ "type": "string"
77
+ },
78
+ "file_cache_path": {
79
+ "type": "string"
80
+ },
81
+ "file_backup_path": {
82
+ "type": "string"
83
+ },
84
+ "verbose_logging": {
85
+ "type": "boolean"
86
+ },
87
+ "delete_node": {
88
+ "type": "boolean"
89
+ },
90
+ "delete_client": {
91
+ "type": "boolean"
92
+ },
93
+ "nfs": {
94
+ "type": "boolean"
95
+ },
96
+ "binary": {
97
+ "type": "boolean"
98
+ },
99
+ "keep_color": {
100
+ "type": "boolean"
101
+ },
102
+ "priveleged": {
103
+ "type": "boolean"
104
+ },
105
+ "attempts": {
106
+ "type": "integer"
107
+ },
108
+ "json": {
109
+ "type": "object"
110
+ },
111
+ "cookbooks_path": {
112
+ "type": "array",
113
+ "minItems": 1,
114
+ "items": [
115
+ {
116
+ "type": "string"
117
+ }
118
+ ]
119
+ },
120
+ "args": {
121
+ "type": "array",
122
+ "minItems": 1,
123
+ "items": [
124
+ {
125
+ "type": "string"
126
+ }
127
+ ]
128
+ },
129
+ "roles_path": {
130
+ "type": "array",
131
+ "minItems": 1,
132
+ "items": [
133
+ {
134
+ "type": "string"
135
+ }
136
+ ]
137
+ },
138
+ "data_bags_path": {
139
+ "type": "array",
140
+ "minItems": 1,
141
+ "items": [
142
+ {
143
+ "type": "string"
144
+ }
145
+ ]
146
+ },
147
+ "environments_path": {
148
+ "type": "array",
149
+ "minItems": 1,
150
+ "items": [
151
+ {
152
+ "type": "string"
153
+ }
154
+ ]
155
+ },
156
+ "run_list": {
157
+ "type": "array",
158
+ "minItems": 1,
159
+ "items": [
160
+ {
161
+ "type": "string"
162
+ }
163
+ ]
164
+ },
165
+ "roles": {
166
+ "type": "array",
167
+ "minItems": 1,
168
+ "items": [
169
+ {
170
+ "type": "string"
171
+ }
172
+ ]
173
+ }
174
+ }
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path("../lib/zergrush_vagrant/version", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "zergrush_vagrant"
6
+ s.version = ZergrushVagrant::VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ["MTN Satellite Communications"]
9
+ s.email = ["Marat.Garafutdinov@mtnsat.com"]
10
+ s.homepage = "https://github.com/MTNSatelliteComm/zerg"
11
+ s.license = "MIT"
12
+ s.summary = "Vagrant driver for zergrush"
13
+ s.description = "Vagrant driver for zergrush"
14
+
15
+ s.required_rubygems_version = ">= 2.0.0"
16
+ s.rubyforge_project = "zergrush_vagrant"
17
+
18
+ s.add_development_dependency "bundler", ">= 1.0.0"
19
+ s.add_development_dependency "rake"
20
+ s.add_development_dependency "zergrush"
21
+
22
+ s.add_dependency "vagrant-omnibus"
23
+ s.add_dependency "vagrant-aws"
24
+ s.add_dependency "vagrant-libvirt"
25
+
26
+ s.files = `git ls-files`.split("\n")
27
+ s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
28
+ s.require_path = 'lib'
29
+
30
+ # metadata that marks this as a zergrush plugin
31
+ s.metadata = { "zergrushplugin" => "driver" }
32
+ end
metadata ADDED
@@ -0,0 +1,146 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zergrush_vagrant
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - MTN Satellite Communications
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: zergrush
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: vagrant-omnibus
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
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Vagrant driver for zergrush
98
+ email:
99
+ - Marat.Garafutdinov@mtnsat.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - .gitignore
105
+ - COPYING
106
+ - LICENSE
107
+ - README.md
108
+ - Rakefile
109
+ - lib/zergrush_vagrant/erbalize.rb
110
+ - lib/zergrush_vagrant/init.rb
111
+ - lib/zergrush_vagrant/renderer.rb
112
+ - lib/zergrush_vagrant/version.rb
113
+ - resources/bridging.template
114
+ - resources/defaults.yaml
115
+ - resources/hostonly.template
116
+ - resources/machine.template
117
+ - resources/main.template
118
+ - resources/provider.template
119
+ - resources/tasks_schema.template
120
+ - zergrush_vagrant.gemspec
121
+ homepage: https://github.com/MTNSatelliteComm/zerg
122
+ licenses:
123
+ - MIT
124
+ metadata:
125
+ zergrushplugin: driver
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - '>='
138
+ - !ruby/object:Gem::Version
139
+ version: 2.0.0
140
+ requirements: []
141
+ rubyforge_project: zergrush_vagrant
142
+ rubygems_version: 2.2.2
143
+ signing_key:
144
+ specification_version: 4
145
+ summary: Vagrant driver for zergrush
146
+ test_files: []