jackal-cfn 0.2.14 → 0.2.16

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: d1ead03a002146de19a393af5ee2841b7db8bcb7
4
- data.tar.gz: 6731c62c19638361c3fc25ebdf01a355a47fbe53
3
+ metadata.gz: c074ac269a3949f7b1e9554a1d3d301d7656195a
4
+ data.tar.gz: 75fd37b327ca6ee8c562ed0f2bfc4be4fb1e97a6
5
5
  SHA512:
6
- metadata.gz: 9d733f6e773a969bf2c24303c5a496e113a557d7fc335838d8e5f5fac4410f0305cd5a5c21966892c3397681650c42fc216bca23d603defa9ae1c8bc875d8bb8
7
- data.tar.gz: badd616f99027ca1d8ed975fbcf491fb42f7b536b3dfb36a5755c5d1f3ee8123a7c71f6dc4677d47bbad1bcbd9545d4d3e40023d0d73f173bbf0b46a189575d6
6
+ metadata.gz: 4f8d1552c3b1fc950357808137c461f0f21b06db494a9660d9cd9fbc67e69820dc503b8491e9a6d6b6ce3812d6a0274c88453ded523680672a282146764119b2
7
+ data.tar.gz: e6441d30aaaaa8fba8f69b40c157e38499d5c3530ac5f730d2f932d15784c9e33fee47b08534f79f61851d087785987f10f3555ea431fcda332313b6d5f3a950
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # v0.2.16
2
+ * [feature] Allow image re-registration when options provided
3
+ * [enhancement] Add resource scrubber helper
4
+
1
5
  # v0.2.14
2
6
  * [fix] Update variable name used in stack resource name construction
3
7
 
@@ -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 registered: #{result.body['imageId']}"
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
- raise TypeError.new("Expecting `String` value but received `#{value.class}`")
32
- end
33
- value = MultiJson.load(value).to_smash
34
- return_value = value.get(*key)
35
- if(return_value.is_a?(Enumerable))
36
- return_value = MultiJson.dump(return_value)
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
@@ -160,6 +160,7 @@ module Jackal
160
160
  :cfn_resource => data_payload
161
161
  )
162
162
  if(config[:reprocess])
163
+ debug "Reprocessing received message! #{payload}"
163
164
  Carnivore::Supervisor.supervisor[destination(:input, payload)].transmit(payload)
164
165
  message.confirm!
165
166
  else
@@ -1,6 +1,6 @@
1
1
  module Jackal
2
2
  module Cfn
3
3
  # Current version
4
- VERSION = Gem::Version.new('0.2.14')
4
+ VERSION = Gem::Version.new('0.2.16')
5
5
  end
6
6
  end
data/lib/jackal-cfn.rb CHANGED
@@ -13,5 +13,6 @@ module Jackal
13
13
  autoload :AmiManager, 'jackal-cfn/resource/ami_manager'
14
14
  autoload :AmiRegister, 'jackal-cfn/resource/ami_register'
15
15
  autoload :JackalStack, 'jackal-cfn/resource/jackal_stack'
16
+ autoload :Scrubber, 'jackal-cfn/resource/scrubber'
16
17
  end
17
18
  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.2.14
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-09-23 00:00:00.000000000 Z
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.2.2
99
+ rubygems_version: 2.4.8
99
100
  signing_key:
100
101
  specification_version: 4
101
102
  summary: Message processing helper