jackal-cfn 0.2.14 → 0.2.16
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 +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/jackal-cfn/resource/ami_register.rb +36 -5
- data/lib/jackal-cfn/resource/hash_extractor.rb +10 -6
- data/lib/jackal-cfn/resource/scrubber.rb +28 -0
- data/lib/jackal-cfn/resource.rb +1 -0
- data/lib/jackal-cfn/version.rb +1 -1
- data/lib/jackal-cfn.rb +1 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c074ac269a3949f7b1e9554a1d3d301d7656195a
|
4
|
+
data.tar.gz: 75fd37b327ca6ee8c562ed0f2bfc4be4fb1e97a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f8d1552c3b1fc950357808137c461f0f21b06db494a9660d9cd9fbc67e69820dc503b8491e9a6d6b6ce3812d6a0274c88453ded523680672a282146764119b2
|
7
|
+
data.tar.gz: e6441d30aaaaa8fba8f69b40c157e38499d5c3530ac5f730d2f932d15784c9e33fee47b08534f79f61851d087785987f10f3555ea431fcda332313b6d5f3a950
|
data/CHANGELOG.md
CHANGED
@@ -15,7 +15,10 @@ module Jackal
|
|
15
15
|
# "NoReboot": Boolean,
|
16
16
|
# "BlockDeviceMappings": Array,
|
17
17
|
# "HaltInstance": Boolean,
|
18
|
-
# "Region": String
|
18
|
+
# "Region": String,
|
19
|
+
# "Register" : {
|
20
|
+
# REGISTER_OPTIONS
|
21
|
+
# }
|
19
22
|
# }
|
20
23
|
# }
|
21
24
|
# }
|
@@ -58,12 +61,12 @@ module Jackal
|
|
58
61
|
poll_for_available = false
|
59
62
|
case cfn_resource[:request_type].to_sym
|
60
63
|
when :create
|
61
|
-
generate_ami(cfn_response, parameters)
|
64
|
+
generate_ami(message, cfn_response, parameters)
|
62
65
|
poll_for_available = true
|
63
66
|
when :update
|
64
67
|
destroy_ami(cfn_response, cfn_resource, parameters)
|
65
68
|
unless(cfn_response['Status'] == 'FAILED')
|
66
|
-
generate_ami(cfn_response, parameters)
|
69
|
+
generate_ami(message, cfn_response, parameters)
|
67
70
|
poll_for_available = true
|
68
71
|
end
|
69
72
|
when :delete
|
@@ -99,6 +102,7 @@ module Jackal
|
|
99
102
|
def poll_ami_available(message, region, ami_id)
|
100
103
|
available = false
|
101
104
|
pause_interval = config.fetch(:ami_register_interval, 5).to_i
|
105
|
+
|
102
106
|
if(ami_id)
|
103
107
|
until(available)
|
104
108
|
debug "Pausing for AMI to become available: #{ami_id} (wait time: #{pause_interval})"
|
@@ -137,10 +141,11 @@ module Jackal
|
|
137
141
|
|
138
142
|
# Create new AMI using provided EC2 instance
|
139
143
|
#
|
144
|
+
# @param message [Carnivore::Message]
|
140
145
|
# @param response [Hash] cfn response
|
141
146
|
# @param parameters [Hash] resource parameters
|
142
147
|
# @return [Hash] updated response hash
|
143
|
-
def generate_ami(response, parameters)
|
148
|
+
def generate_ami(message, response, parameters)
|
144
149
|
begin
|
145
150
|
result = compute_api(parameters[:region]).create_image(
|
146
151
|
parameters[:instance_id],
|
@@ -149,7 +154,33 @@ module Jackal
|
|
149
154
|
parameters[:no_reboot],
|
150
155
|
:block_device_mappings => parameters.fetch(:block_device_mappings, [])
|
151
156
|
)
|
152
|
-
info "New AMI
|
157
|
+
info "New AMI created: #{result.body['imageId']}"
|
158
|
+
if(parameters[:register])
|
159
|
+
poll_ami_available(message, parameters[:region], result.body['imageId'])
|
160
|
+
register_parameters = Hash[
|
161
|
+
parameters[:register].map do |k,v|
|
162
|
+
[Bogo::Utility.camel(k), v]
|
163
|
+
end
|
164
|
+
]
|
165
|
+
image_info = compute_api(parameters[:region]).describe_images('ImageId' => result.body['imageId']).body['imagesSet'].first
|
166
|
+
register_result = compute_api(parameters[:region]).register_image(
|
167
|
+
"#{image_info['name']}-reregister",
|
168
|
+
"Re-register of AMI #{result.body['imageId']} for #{image_info['name']}",
|
169
|
+
image_info['rootDeviceName'],
|
170
|
+
image_info['blockDeviceMapping'].map{|i|
|
171
|
+
Hash[i.map{|k,v|[Bogo::Utility.camel(k), v]}]
|
172
|
+
},
|
173
|
+
{
|
174
|
+
'Architecture' => image_info['architecture'],
|
175
|
+
'VirtualizationType' => image_info['virtualizationType'],
|
176
|
+
}.merge(register_parameters)
|
177
|
+
)
|
178
|
+
unless(result.body['imageId'] == register_result.body['imageId'])
|
179
|
+
info "New AMI registered: #{register_result.body['imageId']} - Destroying created image: #{result.body['imageId']}"
|
180
|
+
compute_api(parameters[:region]).deregister_image(result.body['imageId'])
|
181
|
+
end
|
182
|
+
result = register_result
|
183
|
+
end
|
153
184
|
response['Data']['AmiId'] = result.body['imageId']
|
154
185
|
response['PhysicalResourceId'] = [
|
155
186
|
physical_resource_id,
|
@@ -28,12 +28,16 @@ module Jackal
|
|
28
28
|
key = parameters[:key].split('.')
|
29
29
|
value = parameters[:value]
|
30
30
|
unless(value.is_a?(String))
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
31
|
+
unless(cfn_resource[:request_type].to_sym == :delete)
|
32
|
+
raise TypeError.new("Expecting `String` value but received `#{value.class}`")
|
33
|
+
end
|
34
|
+
return_value = nil
|
35
|
+
else
|
36
|
+
value = MultiJson.load(value).to_smash
|
37
|
+
return_value = value.get(*key)
|
38
|
+
if(return_value.is_a?(Enumerable))
|
39
|
+
return_value = MultiJson.dump(return_value)
|
40
|
+
end
|
37
41
|
end
|
38
42
|
cfn_response['Data']['Payload'] = return_value
|
39
43
|
respond_to_stack(cfn_response, cfn_resource[:response_url])
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'jackal-cfn'
|
2
|
+
|
3
|
+
module Jackal
|
4
|
+
module Cfn
|
5
|
+
class Scrubber < Jackal::Cfn::Resource
|
6
|
+
|
7
|
+
def valid?(message)
|
8
|
+
payload = unpack(message)
|
9
|
+
payload.get(:data, :cfn_resource)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Scrub resource
|
13
|
+
#
|
14
|
+
# @param message [Carnivore::Message]
|
15
|
+
def execute(message)
|
16
|
+
failure_wrap(message) do |payload|
|
17
|
+
cfn_resource = rekey_hash(payload.get(:data, :cfn_resource))
|
18
|
+
properties = rekey_hash(cfn_resource[:resource_properties])
|
19
|
+
parameters = rekey_hash(properties[:parameters])
|
20
|
+
cfn_response = build_response(cfn_resource)
|
21
|
+
respond_to_stack(cfn_response, cfn_resource[:response_url])
|
22
|
+
job_completed(:jackal_cfn, payload, message)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/jackal-cfn/resource.rb
CHANGED
data/lib/jackal-cfn/version.rb
CHANGED
data/lib/jackal-cfn.rb
CHANGED
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.2.
|
4
|
+
version: 0.2.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Roberts
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jackal
|
@@ -71,6 +71,7 @@ files:
|
|
71
71
|
- lib/jackal-cfn/resource/ami_register.rb
|
72
72
|
- lib/jackal-cfn/resource/hash_extractor.rb
|
73
73
|
- lib/jackal-cfn/resource/jackal_stack.rb
|
74
|
+
- lib/jackal-cfn/resource/scrubber.rb
|
74
75
|
- lib/jackal-cfn/utils.rb
|
75
76
|
- lib/jackal-cfn/utils/fog.rb
|
76
77
|
- lib/jackal-cfn/utils/http.rb
|
@@ -95,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
95
96
|
version: '0'
|
96
97
|
requirements: []
|
97
98
|
rubyforge_project:
|
98
|
-
rubygems_version: 2.
|
99
|
+
rubygems_version: 2.4.8
|
99
100
|
signing_key:
|
100
101
|
specification_version: 4
|
101
102
|
summary: Message processing helper
|