jackal-cfn 0.1.6 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4082d5d4a5132d52521ed5904e2f94aa18602848
4
- data.tar.gz: d04357c2f76bf711546f6013dac469f2961842f9
3
+ metadata.gz: 2a04e966cfce6d4c347d5ff5d227a53fe7a71245
4
+ data.tar.gz: bf1d3a7f3b402780bd0d4fbe1ff0a86b7f2f35d0
5
5
  SHA512:
6
- metadata.gz: 9b2206efcf53158bc40e26ab9ddb86152d815c2981f6a3fbed99a4b0ed5df2b965879652d0f069dec0b2b1c7dfa1f2b1fa6acf08e552a673599981957f952bb8
7
- data.tar.gz: c209041a994159fa81d27be044178fa6ee90b2dc52de92d808652bf1670fcebb8cdb1a258dd2a38769793c04bf2c8819940c722bebdf41e97d74b6f570731e31
6
+ metadata.gz: 820460a2f614387d2237923f7bbafa28854ef7e325f461a5ff167de3a70a048c91733d859571ecb9865f462d535570cefdb048798668db935d74f3aa2e47679d
7
+ data.tar.gz: 1ead2a327e6c07abf88038b234721ab5f4eaba20bd07531fd7891ec2c4443bf14bec4319616c925ec684ba01e87126029a853bb92cf9b1fcbdfc28693a6d95e9
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # v0.2.0
2
+ * Move builtin resources under single namespace
3
+ * Add custom failure wrap to resource to provide auto failure notification
4
+ * Fix endpoint url response in extractor resource
5
+
1
6
  # v0.1.6
2
7
  * Isolate event and resource to simple handle format and forward
3
8
  * Move builtin custom resources within new module `CfnTools`
@@ -109,12 +109,11 @@ module Jackal
109
109
  :cfn_event => data_payload
110
110
  )
111
111
  if(config[:reprocess])
112
- my_input = "#{source_prefix}_input"
113
- debug "Reprocessing payload through current source (#{my_input})"
114
- Carnivore::Supervisor.supervisor[my_input].transmit(payload)
112
+ debug "Reprocessing payload through current source (#{destination(:input)})"
113
+ Carnivore::Supervisor.supervisor[destination(:input)].transmit(payload)
115
114
  message.confirm!
116
115
  else
117
- completed(payload, message)
116
+ job_completed(:jackal_cfn, payload, message)
118
117
  end
119
118
  end
120
119
 
@@ -0,0 +1,48 @@
1
+ require 'jackal'
2
+
3
+ module Jackal
4
+ module Cfn
5
+ module Formatter
6
+
7
+ # Add cleanup information for chef instances
8
+ class ChefCleanup < Jackal::Formatter
9
+
10
+ # Source service
11
+ SOURCE = :cfn
12
+ # Destination service
13
+ DESTINATION = :commander
14
+
15
+ # Format payload to enable knife scrubbing via
16
+ # commander
17
+ #
18
+ # @param payload [Smash]
19
+ def format(payload)
20
+ event = payload.get(:data, :cfn_event)
21
+ if(valid_event?(event))
22
+ stack_id = payload.get(:data, :cfn_event, :stack_id)
23
+ if(stack_id)
24
+ debug "Found stack ID information. Setting commander scrub commands. (Stack ID: #{stack_id})"
25
+ actions = payload.fetch(:data, :commander, :actions, [])
26
+ actions << Smash.new(
27
+ :name => app_config.fetch(:cfn, :formatter, :chef_cleanup_command, :chef_cleanup),
28
+ :arguments => stack_id
29
+ )
30
+ payload.set(:data, :commander, :actions, actions)
31
+ end
32
+ end
33
+ end
34
+
35
+ # Determine validity of event
36
+ #
37
+ # @param event [Smash]
38
+ # @return [Truthy, Falsey]
39
+ def valid_event?(event)
40
+ event[:resource_status] == 'DELETE_COMPLETE' &&
41
+ event[:resource_type] == app_config.fetch(:cfn, :formatter, :stack_resource_type, 'AWS::CloudFormation::Stack')
42
+ end
43
+
44
+ end
45
+
46
+ end
47
+ end
48
+ end
@@ -1,7 +1,7 @@
1
1
  require 'jackal-cfn'
2
2
 
3
3
  module Jackal
4
- module CfnTools
4
+ module Cfn
5
5
  # Manage AMI Resources
6
6
  #
7
7
  # Expected resource:
@@ -37,7 +37,7 @@ module Jackal
37
37
  #
38
38
  # @param message [Carnivore::Message]
39
39
  def execute(message)
40
- failure_wrap do |payload|
40
+ failure_wrap(message) do |payload|
41
41
  cfn_resource = rekey_hash(payload.get(:data, :cfn_resource))
42
42
  properties = rekey_hash(cfn_resource[:resource_properties])
43
43
  parameters = rekey_hash(properties[:parameters])
@@ -54,7 +54,7 @@ module Jackal
54
54
  response['Reason'] = 'Unknown request type received'
55
55
  end
56
56
  respond_to_stack(cfn_response, cfn_resource[:response_url])
57
- completed(payload, message)
57
+ job_completed(:jackal_cfn, payload, message)
58
58
  end
59
59
  end
60
60
 
@@ -1,7 +1,7 @@
1
1
  require 'jackal-cfn'
2
2
 
3
3
  module Jackal
4
- module CfnTools
4
+ module Cfn
5
5
  # Extract value from hash
6
6
  #
7
7
  # Expected resource:
@@ -20,7 +20,7 @@ module Jackal
20
20
  #
21
21
  # @param message [Carnivore::Message]
22
22
  def execute(message)
23
- failure_wrap do |payload|
23
+ failure_wrap(message) do |payload|
24
24
  cfn_resource = rekey_hash(payload.get(:data, :cfn_resource))
25
25
  properties = rekey_hash(cfn_resource[:resource_properties])
26
26
  parameters = rekey_hash(properties[:parameters])
@@ -36,8 +36,8 @@ module Jackal
36
36
  return_value = MultiJson.dump(return_value)
37
37
  end
38
38
  cfn_response['Data']['Payload'] = return_value
39
- respond_to_stack(cfn_response, payload[:response_url])
40
- completed(payload, message)
39
+ respond_to_stack(cfn_response, cfn_resource[:response_url])
40
+ job_completed(:jackal_cfn, payload, message)
41
41
  end
42
42
  end
43
43
 
@@ -87,9 +87,7 @@ module Jackal
87
87
  'StackId' => cfn_resource[:stack_id],
88
88
  'RequestId' => cfn_resource[:request_id],
89
89
  'Status' => 'SUCCESS',
90
- 'Data' => Smash.new(
91
- 'Reason' => 'None'
92
- )
90
+ 'Data' => Smash.new
93
91
  )
94
92
  end
95
93
 
@@ -133,12 +131,8 @@ module Jackal
133
131
  payload = super
134
132
  if(self.class == Jackal::Cfn::Resource)
135
133
  begin
136
- if(payload['Body'])
137
- payload = Smash.new(
138
- MultiJson.load(
139
- payload.fetch('Body', 'Message', payload)
140
- )
141
- )
134
+ if(payload['Body'] && payload['Body']['Message'])
135
+ payload = MultiJson.load(payload.get('Body', 'Message')).to_smash
142
136
  payload = transform_parameters(payload)
143
137
  payload[:origin_type] = message[:message].get('Body', 'Type')
144
138
  payload[:origin_subject] = message[:message].get('Body', 'Subject')
@@ -160,18 +154,36 @@ module Jackal
160
154
  def execute(message)
161
155
  data_payload = unpack(message)
162
156
  payload = new_payload(
163
- config[:name],
157
+ config.fetch(:name, :jackal_cfn),
164
158
  :cfn_resource => data_payload
165
159
  )
166
160
  if(config[:reprocess])
167
- my_input = "#{source_prefix}_input"
168
- Carnivore::Supervisor.supervisor[my_input].transmit(payload)
161
+ Carnivore::Supervisor.supervisor[destination(:input)].transmit(payload)
169
162
  message.confirm!
170
163
  else
171
164
  completed(payload, message)
172
165
  end
173
166
  end
174
167
 
168
+ # Custom wrap to send resource failure
169
+ #
170
+ # @param message [Carnivore::Message]
171
+ def failure_wrap(message)
172
+ begin
173
+ payload = unpack(message)
174
+ yield payload
175
+ rescue => e
176
+ error "Unexpected error encountered processing custom resource - #{e.class}: #{e}"
177
+ debug "#{e.class}: #{e}\n#{e.backtrace.join("\n")}"
178
+ cfn_resource = payload.get(:data, :cfn_resource)
179
+ cfn_response = build_response(cfn_resource)
180
+ cfn_response['Status'] = 'FAILED'
181
+ cfn_response['Reason'] = "Unexpected error encountered [#{e}]"
182
+ respond_to_stack(cfn_response, cfn_resource[:response_url])
183
+ message.confirm!
184
+ end
185
+ end
186
+
175
187
  end
176
188
  end
177
189
  end
@@ -25,7 +25,7 @@ module Jackal
25
25
  # @param v [String]
26
26
  # @return [Symbol]
27
27
  def snakecase(v)
28
- v.to_s.gsub(/(?<![A-Z])([A-Z])/, '_\1').sub(/^_/, '').downcase.to_sym
28
+ Bogo::Utility.snake(v)
29
29
  end
30
30
 
31
31
  end
@@ -1,6 +1,6 @@
1
1
  module Jackal
2
2
  module Cfn
3
3
  # Current version
4
- VERSION = Gem::Version.new('0.1.6')
4
+ VERSION = Gem::Version.new('0.2.0')
5
5
  end
6
6
  end
data/lib/jackal-cfn.rb CHANGED
@@ -7,10 +7,8 @@ module Jackal
7
7
  autoload :Event, 'jackal-cfn/event'
8
8
  autoload :Resource, 'jackal-cfn/resource'
9
9
  autoload :Utils, 'jackal-cfn/utils'
10
- end
11
10
 
12
- # Tools
13
- module CfnTools
11
+ # Provided custom resources
14
12
  autoload :HashExtractor, 'jackal-cfn/resource/hash_extractor'
15
13
  autoload :AmiManager, 'jackal-cfn/resource/ami_manager'
16
14
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jackal-cfn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Roberts
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-14 00:00:00.000000000 Z
11
+ date: 2015-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jackal
@@ -51,6 +51,7 @@ files:
51
51
  - jackal-cfn.gemspec
52
52
  - lib/jackal-cfn.rb
53
53
  - lib/jackal-cfn/event.rb
54
+ - lib/jackal-cfn/formatter/chef_cleanup.rb
54
55
  - lib/jackal-cfn/resource.rb
55
56
  - lib/jackal-cfn/resource/ami_manager.rb
56
57
  - lib/jackal-cfn/resource/hash_extractor.rb
@@ -83,4 +84,3 @@ signing_key:
83
84
  specification_version: 4
84
85
  summary: Message processing helper
85
86
  test_files: []
86
- has_rdoc: