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 +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/jackal-cfn/event.rb +3 -4
- data/lib/jackal-cfn/formatter/chef_cleanup.rb +48 -0
- data/lib/jackal-cfn/resource/ami_manager.rb +3 -3
- data/lib/jackal-cfn/resource/hash_extractor.rb +4 -4
- data/lib/jackal-cfn/resource.rb +24 -12
- data/lib/jackal-cfn/utils.rb +1 -1
- data/lib/jackal-cfn/version.rb +1 -1
- data/lib/jackal-cfn.rb +1 -3
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a04e966cfce6d4c347d5ff5d227a53fe7a71245
|
4
|
+
data.tar.gz: bf1d3a7f3b402780bd0d4fbe1ff0a86b7f2f35d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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`
|
data/lib/jackal-cfn/event.rb
CHANGED
@@ -109,12 +109,11 @@ module Jackal
|
|
109
109
|
:cfn_event => data_payload
|
110
110
|
)
|
111
111
|
if(config[:reprocess])
|
112
|
-
|
113
|
-
|
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
|
-
|
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
|
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
|
-
|
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
|
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,
|
40
|
-
|
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
|
|
data/lib/jackal-cfn/resource.rb
CHANGED
@@ -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 =
|
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
|
157
|
+
config.fetch(:name, :jackal_cfn),
|
164
158
|
:cfn_resource => data_payload
|
165
159
|
)
|
166
160
|
if(config[:reprocess])
|
167
|
-
|
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
|
data/lib/jackal-cfn/utils.rb
CHANGED
data/lib/jackal-cfn/version.rb
CHANGED
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
|
-
|
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.
|
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:
|
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:
|