zergrush_cf 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []