zergrush_cf 0.0.5 → 0.0.6

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZTM1NGM0NDdlZjljZmViOTcyOTI3YjJkMTg0OTIyMzViYTVlYjhiOA==
4
+ ZmMyNjgxOTNmNzkwNjVlYzFmYmU5OTU3YTU0MzYwNDFhMjJlMjRjZA==
5
5
  data.tar.gz: !binary |-
6
- Zjg3ZmIyODgxYzUyOTgzNmNjZDJkOGIyYWU5MTQ0OGJlYTJjMTI1NQ==
6
+ OWJkNmJjZDg4NTNiZTQ5ZTZhM2QxNzgzODc2MzdmMjk0YjJlMTk4ZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NzJiODUyYmI5YWZhZDFmM2FjYjdlODkyZDYzZGFkOGI4YzVmMTEyY2M0ZDkx
10
- MTU2ZjliMGExYmZhZDgwZTgwOWIzZDhiZDYzOGI2ZmZjNWVlZThmN2QwMjNk
11
- N2UyZTZmNjQ4OGQ0NzA1MTQwODcwNTA3OTRhYTkxODAzODBkZTE=
9
+ ZGQ2YzJmYThhZjc5YjRmMTlkZDg1M2QzZmUzNTU3OWE1OTI4Njg0ZTFjNWUy
10
+ MzQ2MThiNDRjN2Q2OTc2OGQzNTNmZmJhNGVmYWQ4ZjZiY2YxZmJhMzdmMGE3
11
+ MDRhZGE1ODBjMjg4MTdlZjQxNTIyMjI2NjRiOWEzZDMyNTNlNGY=
12
12
  data.tar.gz: !binary |-
13
- ZDc1MzY5NzI1YmQ2ZmU2OTIzMWJjYzQ2MzMwZDExZjg3YjQ3MjJkYWJjYWYz
14
- YzJhNWYwOTkyYzkyZmIyNjcyODlmMzRhMjI0MDU1MDYxYWY4Y2ZlNzExZGIz
15
- MTk2Yjg4ZDE5MDNkYzA0OTJiMTQyZDQ0Nzc4OTIxOGMzZWI1YTU=
13
+ NjNiZjYwNWI4ZDYzMGQxYmQwZTRiNTBlZGQzOGUwMTlmNzA4OWUxNzdjNWY3
14
+ ZjYxOGU5OTAxYTI5NmZkYjdhYTk3OWUzZjYwNzRhMDA4N2FhYzE5OWVjMDQ2
15
+ Y2FmZWFiM2E0OGRjNWEyMGU2ZGNlOWI2MDAxYmU1NWI1ZTczZDk=
data/README.md CHANGED
@@ -16,6 +16,8 @@ Additional properties defined
16
16
  - template - body of a AWS CloudFormation template (use this OR template_file)
17
17
  - template_file - file containing the CloudFormation template. Path is relative to location of .ke task file in .hive (use this OR template)
18
18
  - template_parameters - parameter values for the cloudformation template
19
+ - rabbit - optional information on a rabbitmq server to publish event log to
20
+ - storage - optional information on an S3 bucket to upload files from "additional_files_section" of zerg to.
19
21
 
20
22
  Example use:
21
23
  ```
@@ -33,6 +35,40 @@ Example use:
33
35
  "template_parameters": {
34
36
  "Param1": "value",
35
37
  "Param2": "ENV['SOME_VARIABLE']"
38
+ },
39
+ "rabbit": {
40
+ "bunny_params": {
41
+ ...
42
+ },
43
+ "queue": {
44
+ "name": "your rabbit queue",
45
+ "params": {
46
+ "durable": true,
47
+ <other bunny queue parameters>
48
+ }
49
+ },
50
+ "exchange": {
51
+ "name": "your rabbit exchange",
52
+ "params": {
53
+ "durable": true,
54
+ <other bunny exchange parameters>
55
+ }
56
+ },
57
+ "event_timestamp_name": "happened at:",
58
+ "event_resource_id_name": "CF Resource ID:",
59
+ "event_resource_type_name": "CF Resource Type:",
60
+ "event_resource_status_name": "CF Resource Status:",
61
+ "event_resource_reason_name": "What up?"
62
+ },
63
+ "storage": {
64
+ "s3_bucket": {
65
+ "name": "my_task_storage",
66
+ "public": false,
67
+ "files": [
68
+ "first_to_file_from_additional_files_section.extension",
69
+ "second_to_file_from_additional_files_section.extension"
70
+ ]
71
+ }
36
72
  }
37
73
  }
38
74
  }
@@ -27,6 +27,8 @@ require 'excon'
27
27
  require 'rbconfig'
28
28
  require 'awesome_print'
29
29
  require 'securerandom'
30
+ require 'bunny'
31
+ require 'time'
30
32
  require_relative 'renderer'
31
33
 
32
34
  class CloudFormation < ZergGemPlugin::Plugin "/driver"
@@ -46,6 +48,8 @@ class CloudFormation < ZergGemPlugin::Plugin "/driver"
46
48
  abort("AWS key id is not specified in task") unless aws_key_id != nil
47
49
  abort("AWS secret is not specified in task") unless aws_secret != nil
48
50
 
51
+ rabbit_objects = initRabbitConnection(task_hash["vm"]["driver"]["driveroptions"][0]["rabbit"])
52
+
49
53
  renderer = ZergrushCF::Renderer.new(
50
54
  hive_location,
51
55
  task_name,
@@ -113,6 +117,7 @@ class CloudFormation < ZergGemPlugin::Plugin "/driver"
113
117
  event_counter = 0
114
118
  while outputs_info.body["Stacks"][0]["StackStatus"] == "CREATE_IN_PROGRESS" do
115
119
  logEvents(events.first(events.length - event_counter))
120
+ logRabbitEvents(events.first(events.length - event_counter), rabbit_objects, eval_params(task_hash["vm"]["driver"]["driveroptions"][0]["rabbit"]))
116
121
  event_counter = events.length
117
122
 
118
123
  events = cf.describe_stack_events(stack_name).body['StackEvents']
@@ -121,13 +126,16 @@ class CloudFormation < ZergGemPlugin::Plugin "/driver"
121
126
  logEvents(events.first(events.length - event_counter))
122
127
  puts("Stack outputs:")
123
128
  ap outputs_info.body["Stacks"][0]["Outputs"]
129
+ rabbit_objects[:connection].close unless rabbit_objects == nil
124
130
  return 0
125
131
  end
126
132
  end
127
133
 
134
+ rabbit_objects[:connection].close unless rabbit_objects == nil
128
135
  abort("ERROR: Failed with stack status: #{outputs_info.body["Stacks"][0]["StackStatus"]}")
129
136
 
130
137
  rescue Fog::Errors::Error => fog_cf_error
138
+ rabbit_objects[:connection].close unless rabbit_objects == nil
131
139
  abort ("ERROR: AWS error: #{fog_cf_error.message}")
132
140
  end
133
141
 
@@ -148,6 +156,8 @@ class CloudFormation < ZergGemPlugin::Plugin "/driver"
148
156
  abort("AWS key id is not specified in task") unless aws_key_id != nil
149
157
  abort("AWS secret is not specified in task") unless aws_secret != nil
150
158
 
159
+ rabbit_objects = initRabbitConnection(task_hash["vm"]["driver"]["driveroptions"][0]["rabbit"])
160
+
151
161
  puts("Cleaning task #{task_name} ...")
152
162
 
153
163
  # run fog cleanup on the stack.
@@ -168,6 +178,7 @@ class CloudFormation < ZergGemPlugin::Plugin "/driver"
168
178
  begin
169
179
  outputs_info = cf.describe_stacks({ 'StackName' => stack_name })
170
180
  rescue Fog::AWS::CloudFormation::NotFound
181
+ rabbit_objects[:connection].close unless rabbit_objects == nil
171
182
  return 0
172
183
  end
173
184
  end
@@ -178,6 +189,7 @@ class CloudFormation < ZergGemPlugin::Plugin "/driver"
178
189
  begin
179
190
  events = cf.describe_stack_events(stack_name).body['StackEvents']
180
191
  rescue Fog::AWS::CloudFormation::NotFound
192
+ rabbit_objects[:connection].close unless rabbit_objects == nil
181
193
  return 0
182
194
  end
183
195
  end
@@ -185,25 +197,30 @@ class CloudFormation < ZergGemPlugin::Plugin "/driver"
185
197
  event_counter = 0
186
198
  while outputs_info.body["Stacks"][0]["StackStatus"] == "DELETE_IN_PROGRESS" do
187
199
  logEvents(events.first(events.length - event_counter))
200
+ logRabbitEvents(events.first(events.length - event_counter), rabbit_objects, eval_params(task_hash["vm"]["driver"]["driveroptions"][0]["rabbit"]))
201
+
188
202
  event_counter = events.length
189
203
  begin
190
204
  events = cf.describe_stack_events(stack_name).body['StackEvents']
191
205
  outputs_info = cf.describe_stacks({ 'StackName' => stack_name })
192
206
  rescue Fog::AWS::CloudFormation::NotFound
193
207
  logEvents(events.first(events.length - event_counter))
208
+ rabbit_objects[:connection].close unless rabbit_objects == nil
194
209
  return 0
195
210
  end
196
211
  end
197
212
 
213
+ rabbit_objects[:connection].close unless rabbit_objects == nil
198
214
  abort("ERROR: Failed with stack status: #{outputs_info.body["Stacks"][0]["StackStatus"]}")
199
215
 
200
216
  rescue Fog::Errors::Error => fog_cf_error
217
+ rabbit_objects[:connection].close unless rabbit_objects == nil
201
218
  abort ("ERROR: AWS error: #{fog_cf_error.ai}")
202
219
  end
203
220
 
204
221
  def logEvents events
205
222
  events.each do |event|
206
- puts "Timestamp: #{event['Timestamp']}"
223
+ puts "Timestamp: #{Time.parse(event['Timestamp'].to_s).iso8601}"
207
224
  puts "LogicalResourceId: #{event['LogicalResourceId']}"
208
225
  puts "ResourceType: #{event['ResourceType']}"
209
226
  puts "ResourceStatus: #{event['ResourceStatus']}"
@@ -212,6 +229,40 @@ class CloudFormation < ZergGemPlugin::Plugin "/driver"
212
229
  end
213
230
  end
214
231
 
232
+ def initRabbitConnection rabbitInfo
233
+ return nil unless rabbitInfo != nil
234
+ params = eval_params(rabbitInfo)
235
+ conn = Bunny.new(Hash[params["bunny_params"].map{ |k, v| [k.to_sym, v] }])
236
+ conn.start
237
+
238
+ channel = conn.create_channel
239
+ exch = (params["exchange"] == nil) ? channel.default_echange : channel.direct(params["exchange"]["name"], Hash[params["exchange"]["params"].map{ |k, v| [k.to_sym, v] }])
240
+ channel.queue(params["queue"]["name"], Hash[params["queue"]["params"].map{ |k, v| [k.to_sym, v] }]).bind(exch)
241
+
242
+ return { :connection => conn, :channel => channel, :exchange => exch }
243
+ end
244
+
245
+ def logRabbitEvents events, rabbit_objects, rabbit_properties
246
+ timestamp = (rabbit_properties["event_timestamp_name"] == nil) ? "timestamp" : rabbit_properties["event_timestamp_name"]
247
+ res_id_name = (rabbit_properties["event_resource_id_name"] == nil) ? "resource_id" : rabbit_properties["event_resource_id_name"]
248
+ res_type_name = (rabbit_properties["event_resource_type_name"] == nil) ? "resource_type" : rabbit_properties["event_resource_type_name"]
249
+ res_status = (rabbit_properties["event_resource_status_name"] == nil) ? "resource_status" : rabbit_properties["event_resource_status_name"]
250
+ reason = (rabbit_properties["event_resource_reason_name"] == nil) ? "reason" : rabbit_properties["event_resource_reason_name"]
251
+
252
+
253
+ events.each do |event|
254
+ event_info = {
255
+ timestamp.to_sym => "#{Time.parse(event['Timestamp'].to_s).iso8601}",
256
+ res_id_name.to_sym => "#{event['LogicalResourceId']}",
257
+ res_type_name.to_sym => "#{event['ResourceType']}",
258
+ res_status.to_sym => "#{event['ResourceStatus']}",
259
+ reason.to_sym => "#{event['ResourceStatusReason']}"
260
+ }
261
+
262
+ rabbit_objects[:exchange].publish(event_info.to_json, :routing_key => rabbit_properties["queue"]["name"])
263
+ end
264
+ end
265
+
215
266
  def halt hive_location, task_name, task_hash, debug
216
267
  puts("Halt is not implemented for CloudFormation.")
217
268
  return
@@ -22,5 +22,5 @@
22
22
  #++
23
23
 
24
24
  module ZergrushCF
25
- VERSION = "0.0.5"
25
+ VERSION = "0.0.6"
26
26
  end
@@ -13,6 +13,65 @@
13
13
  "template_parameters": {
14
14
  "type": "object"
15
15
  },
16
+ "rabbit": {
17
+ "type": "object",
18
+ "properties": {
19
+ "bunny_params": {
20
+ "type": "object"
21
+ },
22
+ "queue": {
23
+ "type": "object",
24
+ "properties": {
25
+ "name": {
26
+ "type": "string"
27
+ },
28
+ "params": {
29
+ "type": "object"
30
+ }
31
+ },
32
+ "required": [
33
+ "name"
34
+ ],
35
+ "additionalProperties": false
36
+
37
+ },
38
+ "exchange": {
39
+ "type": "object",
40
+ "properties": {
41
+ "name": {
42
+ "type": "string"
43
+ },
44
+ "params": {
45
+ "type": "object"
46
+ }
47
+ },
48
+ "required": [
49
+ "name"
50
+ ],
51
+ "additionalProperties": false
52
+ },
53
+ "event_timestamp_name": {
54
+ "type": "string"
55
+ },
56
+ "event_resource_id_name": {
57
+ "type": "string"
58
+ },
59
+ "event_resource_type_name": {
60
+ "type": "string"
61
+ },
62
+ "event_resource_status_name": {
63
+ "type": "string"
64
+ },
65
+ "event_resource_reason_name": {
66
+ "type": "string"
67
+ }
68
+ },
69
+ "required": [
70
+ "bunny_params",
71
+ "queue"
72
+ ],
73
+ "additionalProperties": false
74
+ },
16
75
  "storage": {
17
76
  "type": "object",
18
77
  "properties": {
data/zergrush_cf.gemspec CHANGED
@@ -17,9 +17,10 @@ Gem::Specification.new do |s|
17
17
 
18
18
  s.add_development_dependency "bundler", ">= 1.0.0"
19
19
  s.add_development_dependency "rake"
20
- s.add_development_dependency "zergrush", ">= 0.0.11"
20
+ s.add_development_dependency "zergrush", ">= 0.0.13"
21
21
 
22
22
  s.add_dependency "fog", ">=1.20.0"
23
+ s.add_dependency "bunny", ">=1.2.1"
23
24
 
24
25
  s.files = `git ls-files`.split("\n")
25
26
  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_cf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
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-04-15 00:00:00.000000000 Z
11
+ date: 2014-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ! '>='
46
46
  - !ruby/object:Gem::Version
47
- version: 0.0.11
47
+ version: 0.0.13
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
- version: 0.0.11
54
+ version: 0.0.13
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: fog
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ! '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: 1.20.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: bunny
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: 1.2.1
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: 1.2.1
69
83
  description: Amazon Cloud Formation driver for zergrush
70
84
  email:
71
85
  - Marat.Garafutdinov@mtnsat.com