zergrush_cf 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.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Y2YzZmVlNzZjYzQzZmI2MjRiYWM1ZjczYWFlNGM3MzhkYmYxMGY4Yg==
5
+ data.tar.gz: !binary |-
6
+ ZDg1NTk3ZThlMmIwNjg1ZTUwNWIxYWUyMzY2ZWJlZjYyOTQ3NmE5OA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ Njc4OWQ0MTI0Yjg3Njk5NzE0MTE5ZjNhODE4YTBjY2I3ZTEyMDFmODVjNjlk
10
+ OTAwMWRhZjZiOWYyYjIwZmEzOTBhOTNhOTNlZGFiOTQwNWM0NjM4YjUxNzRl
11
+ MGJlOGZlZTlmYjRlZTViZTNkNGIyNDg0MWRmZWVlNWJjZTQzOTU=
12
+ data.tar.gz: !binary |-
13
+ NTM4YjM4MGYzNmMzNjVlMzljNTgwNDIwZDAzZDMyNzQ1YzgyMGFiZTAwOTUx
14
+ MWRjYjE3ZmNlZmMwYzRmZjkzZTMzYTRkMjIyNzhlNzgyZjI2OWU4ZWEwMjlk
15
+ Y2NjNjAwZWMxODVmMGM3MzlmMmI3YjhjMWI0MDgxNDJmYTFjOGU=
@@ -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.
@@ -0,0 +1,113 @@
1
+ Vagrant driver for Zerg
2
+ ===
3
+
4
+ Dependencies
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
+
108
+ - type - Type of task payload. 'shell', 'chef_client' or 'chef_solo'
109
+ - shell task parameters are defined by [Vagrant shell provisioner](http://docs.vagrantup.com/v2/provisioning/shell.html)
110
+ - chef_client and chef_solo task parameters map directly to Vagrant provisioner docs, **EXCEPT the node_name parameter**:
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)
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,197 @@
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 'fog'
26
+ require 'excon'
27
+ require 'rbconfig'
28
+ require 'awesome_print'
29
+ require 'securerandom'
30
+ require 'ruby-progressbar'
31
+ require_relative 'renderer'
32
+
33
+ class CloudFormation < ZergGemPlugin::Plugin "/driver"
34
+ def rush hive_location, task_name, task_hash, debug
35
+ aws_key_id = task_hash["vm"]["driver"]["driveroptions"][0]["access_key_id"]
36
+ aws_secret = task_hash["vm"]["driver"]["driveroptions"][0]["secret_access_key"]
37
+
38
+ # eval possible environment variables
39
+ if aws_key_id =~ /^ENV\['.+'\]$/
40
+ aws_key_id = eval(aws_key_id)
41
+ end
42
+
43
+ if aws_secret =~ /^ENV\['.+'\]$/
44
+ aws_secret = eval(aws_secret)
45
+ end
46
+
47
+ abort("AWS key id is not specified in task") unless aws_key_id != nil
48
+ abort("AWS secret is not specified in task") unless aws_secret != nil
49
+
50
+ renderer = ZergrushCF::Renderer.new(
51
+ hive_location,
52
+ task_name,
53
+ task_hash)
54
+ template_body = renderer.render
55
+
56
+ cf = Fog::AWS::CloudFormation.new(
57
+ :aws_access_key_id => aws_key_id,
58
+ :aws_secret_access_key => aws_secret
59
+ )
60
+
61
+ # create the cloudformation stack
62
+ stack_name = "#{task_name}"
63
+
64
+ progressbar = nil
65
+ params = eval_params(task_hash["vm"]["driver"]["driveroptions"][0]["template_parameters"])
66
+ stack_info = cf.create_stack(stack_name, { 'DisableRollback' => true, 'TemplateBody' => template_body.to_json, 'Parameters' => params, 'Capabilities' => [ "CAPABILITY_IAM" ] })
67
+
68
+ # grab the id of the stack
69
+ stack_id = stack_info.body["StackId"]
70
+ puts("Creating stack #{stack_name} with id #{stack_id}\n-----------------------------")
71
+ progressbar = ProgressBar.create(:starting_at => 20, :total => nil)
72
+
73
+ # get stack outputs
74
+ outputs_info = cf.describe_stacks({ 'StackName' => stack_name })
75
+
76
+ until outputs_info.body["Stacks"][0]["StackStatus"] != "CREATE_IN_PROGRESS" do
77
+ progressbar.increment
78
+ sleep 2
79
+
80
+ outputs_info = cf.describe_stacks({ 'StackName' => stack_name })
81
+ end
82
+ progressbar.stop
83
+ abort "ERROR: Stack #{stack_name} creation failed. Refer to AWS CloudFormation console for further info." unless outputs_info.body["Stacks"][0]["StackStatus"] == "CREATE_COMPLETE"
84
+
85
+ puts("SUCCESS! Stack outputs:")
86
+ ap outputs_info.body["Stacks"][0]["Outputs"]
87
+
88
+ rescue Fog::Errors::Error => fog_cf_error
89
+ progressbar.stop unless progressbar == nil
90
+ abort ("ERROR: AWS error: #{fog_cf_error.message}")
91
+ end
92
+
93
+ def clean hive_location, task_name, task_hash, debug
94
+
95
+ aws_key_id = task_hash["vm"]["driver"]["driveroptions"][0]["access_key_id"]
96
+ aws_secret = task_hash["vm"]["driver"]["driveroptions"][0]["secret_access_key"]
97
+
98
+ # eval possible environment variables
99
+ if aws_key_id =~ /^ENV\['.+'\]$/
100
+ aws_key_id = eval(aws_key_id)
101
+ end
102
+
103
+ if aws_secret =~ /^ENV\['.+'\]$/
104
+ aws_secret = eval(aws_secret)
105
+ end
106
+
107
+ abort("AWS key id is not specified in task") unless aws_key_id != nil
108
+ abort("AWS secret is not specified in task") unless aws_secret != nil
109
+
110
+ puts("Cleaning task #{task_name} ...")
111
+
112
+ # run fog cleanup on the stack.
113
+ stack_name = "#{task_name}"
114
+
115
+ cf = Fog::AWS::CloudFormation.new(
116
+ :aws_access_key_id => aws_key_id,
117
+ :aws_secret_access_key => aws_secret
118
+ )
119
+
120
+ progressbar = nil
121
+
122
+ stack_info = cf.delete_stack(stack_name)
123
+ puts("Deleting stack #{stack_name}")
124
+ progressbar = ProgressBar.create(:starting_at => 20, :total => nil)
125
+ outputs_info = cf.describe_stacks({ 'StackName' => stack_name })
126
+
127
+ while outputs_info.body["Stacks"][0]["StackStatus"] == "DELETE_IN_PROGRESS" do
128
+ progressbar.increment
129
+ sleep 2
130
+
131
+ begin
132
+ outputs_info = cf.describe_stacks({ 'StackName' => stack_name })
133
+ rescue Fog::AWS::CloudFormation::NotFound
134
+ progressbar.stop
135
+ break
136
+ end
137
+ end
138
+
139
+ rescue Fog::AWS::CloudFormation::NotFound
140
+ progressbar.stop unless progressbar == nil
141
+ abort ("ERROR: Stack #{stack_name} was not found in AWS.")
142
+ rescue Fog::Errors::Error => fog_cf_error
143
+ progressbar.stop unless progressbar == nil
144
+ abort ("ERROR: AWS error: #{fog_cf_error.ai}")
145
+ end
146
+
147
+ def halt hive_location, task_name, task_hash, debug
148
+ puts("Halt is not implemented for CloudFormation.")
149
+ return
150
+ end
151
+
152
+ def task_schema
153
+ return nil
154
+ end
155
+
156
+ def option_schema
157
+ return File.open(File.join("#{File.dirname(__FILE__)}", "..", "..", "resources", "option_schema.template"), 'r').read
158
+ end
159
+
160
+ def folder_schema
161
+ return nil
162
+ end
163
+
164
+ def port_schema
165
+ return nil
166
+ end
167
+
168
+ def ssh_schema
169
+ return nil
170
+ end
171
+
172
+ def eval_params(params)
173
+ params.each do |k, v|
174
+ # If v is nil, an array is being iterated and the value is k.
175
+ # If v is not nil, a hash is being iterated and the value is v.
176
+ #
177
+ value = v || k
178
+
179
+ if value.is_a?(Hash) || value.is_a?(Array)
180
+ eval_params(value)
181
+ else
182
+ if value.is_a?(String)
183
+ if value =~ /(^ENV\['.+'\]$)/
184
+ if v.nil?
185
+ k.replace eval(value)
186
+ else
187
+ params[k] = eval(value)
188
+ end
189
+ end
190
+ end
191
+ end
192
+ end
193
+
194
+ return params
195
+ end
196
+ end
197
+
@@ -0,0 +1,50 @@
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 'fileutils'
25
+
26
+ module ZergrushCF
27
+ class Renderer
28
+
29
+ def initialize(hive_location, task_name, task_hash)
30
+ @vm = task_hash["vm"]
31
+ @name = task_name
32
+ @template = task_hash["vm"]["driver"]["driveroptions"][0]["template"]
33
+ @driver = task_hash["vm"]["driver"]["drivertype"]
34
+ @hive_location = hive_location
35
+ end
36
+
37
+ def render
38
+ puts ("Rendering driver templates...")
39
+
40
+ # write cloudformation template to a separate file
41
+ abort("CloudFormation template not specified!") unless @template != nil
42
+
43
+ puts ("Writing #{File.join(@hive_location, "driver", @driver, @name, "template.json")}...")
44
+ FileUtils.mkdir_p(File.join(@hive_location, "driver", @driver, @name))
45
+ File.open(File.join("#{@hive_location}", "driver", @vm["driver"]["drivertype"], @name, "template.json"), 'w') { |file| file.write(@template.to_json) }
46
+
47
+ return @template
48
+ end
49
+ end
50
+ 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 ZergrushCF
25
+ VERSION = "0.0.1"
26
+ end
@@ -0,0 +1,2 @@
1
+ ---
2
+ :debug: false
@@ -0,0 +1,12 @@
1
+ "access_key_id": {
2
+ "type": "string"
3
+ },
4
+ "secret_access_key": {
5
+ "type": "string"
6
+ },
7
+ "template": {
8
+ "type": "object"
9
+ },
10
+ "template_parameters": {
11
+ "type": "object"
12
+ }
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path("../lib/zergrush_cf/version", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "zergrush_cf"
6
+ s.version = ZergrushCF::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 = "Amazon Cloud Formation driver for zergrush"
13
+ s.description = "Amazon Cloud Formation driver for zergrush"
14
+
15
+ s.required_rubygems_version = ">= 2.0.0"
16
+ s.rubyforge_project = "zergrush_cf"
17
+
18
+ s.add_development_dependency "bundler", ">= 1.0.0"
19
+ s.add_development_dependency "rake"
20
+ s.add_development_dependency "zergrush", ">= 0.0.7"
21
+
22
+ s.add_dependency "fog", ">=1.20.0"
23
+ s.add_dependency "ruby-progressbar", "1.4.2"
24
+
25
+ s.files = `git ls-files`.split("\n")
26
+ s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
27
+ s.require_path = 'lib'
28
+
29
+ # metadata that marks this as a zergrush plugin
30
+ s.metadata = { "zergrushplugin" => "driver" }
31
+ end
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zergrush_cf
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-03-14 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.0.7
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.0.7
55
+ - !ruby/object:Gem::Dependency
56
+ name: fog
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.20.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: 1.20.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: ruby-progressbar
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 1.4.2
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 1.4.2
83
+ description: Amazon Cloud Formation driver for zergrush
84
+ email:
85
+ - Marat.Garafutdinov@mtnsat.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - .gitignore
91
+ - COPYING
92
+ - LICENSE
93
+ - README.md
94
+ - Rakefile
95
+ - lib/zergrush_cf/init.rb
96
+ - lib/zergrush_cf/renderer.rb
97
+ - lib/zergrush_cf/version.rb
98
+ - resources/defaults.yaml
99
+ - resources/option_schema.template
100
+ - zergrush_cf.gemspec
101
+ homepage: https://github.com/MTNSatelliteComm/zerg
102
+ licenses:
103
+ - MIT
104
+ metadata:
105
+ zergrushplugin: driver
106
+ post_install_message:
107
+ rdoc_options: []
108
+ require_paths:
109
+ - lib
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ! '>='
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: 2.0.0
120
+ requirements: []
121
+ rubyforge_project: zergrush_cf
122
+ rubygems_version: 2.2.2
123
+ signing_key:
124
+ specification_version: 4
125
+ summary: Amazon Cloud Formation driver for zergrush
126
+ test_files: []