prima-twig 0.45.31 → 0.46.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +5 -5
  2. data/bin/twig-update-ami +22 -104
  3. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 2e641abcc8e23dd41daa334a9763893ce9a97e75696b4d09d89f382a4530cb56
4
- data.tar.gz: 76e43008e59ccc5ca8add77c58bdce2aee5c327e3e1bcb6f05668c9d6d2bdb84
2
+ SHA1:
3
+ metadata.gz: b922b242a735dfdb1ee9b16c3ddc4c908d8f322b
4
+ data.tar.gz: e0e0198426a3dee834e77d3e98e7df84341d93dd
5
5
  SHA512:
6
- metadata.gz: e7b2ec4c2765ef5e75de1b0fac3b7bc7a2efa2c4d6407eca4d9f9f2ce1ca0881d45989f69e99b27a4720e00c085ff2d994f47e8f5e5e9cc358a9bbac703b5c15
7
- data.tar.gz: 223bf5d4fd0cbf0028fc9854ca1fa2d555f2489ff3931221d333a27e3d089efe2512775c04b150e2cec81e9661a23c6c8bb1157d0263073f451238feea975ad4
6
+ metadata.gz: 4d43d94a447b6b10b2f97837bbc21c0df335d2b173c5c49111cb87f9a661df2d5ee5bbd46615f88842a5d19821f502a742879331ad5d6de1ce4c13484e49cfab
7
+ data.tar.gz: 2055c6e4d5d1495aaa84331ab8c0130d01176eaceb87ea96a478425dc48b99ef2b7a265f0f9d0307451a607942235c8a7b72f005f13cfbcb852905d6c1a953c3
@@ -30,6 +30,7 @@ class TwigUpdateAmi
30
30
  update_instance_name(ami_id, ami_name, ami_description, ami_template)
31
31
  output 'running packer update (this could take some time)'.light_green
32
32
  new_ami_id = update_packer(ami_template)
33
+ # new_ami_id = 'ami-000e38f3a919824ae'
33
34
  Dir.chdir '..'
34
35
  stop_if(new_ami_id.to_s.empty?, 'Failed to generate AMI!'.red)
35
36
  output "new ami id: #{new_ami_id}"
@@ -39,7 +40,7 @@ class TwigUpdateAmi
39
40
  old_amis = update_ami_mappings(ami_mappings, ami_template, env, new_ami_id)
40
41
  stop_if(old_amis.empty?, "No ami to update! No #{ami_template} in env #{env}, exiting".yellow)
41
42
 
42
- output 'retrieving stacks that uses old ami ids'
43
+ output "retrieving stacks that uses old ami ids: #{old_amis}"
43
44
  exports = list_exports()
44
45
  stacks = get_stacks_from_exports(exports, old_amis)
45
46
  stop_if(stacks.empty?, "No stack to update found! This means that ami-mapping file is not in sync, please check manually")
@@ -48,26 +49,34 @@ class TwigUpdateAmi
48
49
  output "processing stack #{stack}"
49
50
  if stack.include?('qa')
50
51
  output "skipping stack #{stack} because is a qa"
51
- next
52
+ next
52
53
  elsif stack.include?('batch')
53
- stack_parameters = update_stack_parameters(stack,
54
+ stack_parameters = update_stack_parameters(get_stack_parameters(stack),
54
55
  [
55
56
  { parameter_key: 'AMIID', parameter_value: new_ami_id }
56
57
  ]
57
58
  )
58
- update_batch_compute_environment(stack, get_stack_template(stack), stack_parameters, tags_to_hashes(get_stack_tags(stack)), env, old_amis)
59
- else
60
- stack_parameters = update_stack_parameters(stack,
59
+ update_stack(stack, get_stack_template(stack), stack_parameters)
60
+ elsif stack.include?('fleet')
61
+ stack_tags = tags_to_hashes(get_stack_tags(stack))
62
+ stack_tags['TemplateVersion'] = stack_tags['TemplateVersion'].to_i + 1
63
+
64
+ stack_parameters = update_stack_parameters(get_stack_parameters(stack),
65
+ [
66
+ { parameter_key: 'AMIID', parameter_value: new_ami_id },
67
+ { parameter_key: 'DesiredCapacity', parameter_value: get_desired_capacity(stack).to_s },
68
+ { parameter_key: 'TemplateVersion', parameter_value: stack_tags['TemplateVersion'].to_s }
69
+ ]
70
+ )
71
+ update_stack(stack, get_stack_template(stack), stack_parameters, hashes_to_tags(stack_tags))
72
+ else # autoscaling group normali come ania-tools
73
+ stack_parameters = update_stack_parameters(get_stack_parameters(stack),
61
74
  [
62
75
  { parameter_key: 'AMIID', parameter_value: new_ami_id },
63
76
  { parameter_key: 'DesiredCapacity', parameter_value: get_desired_capacity(stack).to_s }
64
77
  ]
65
78
  )
66
- if stack.include?('spotfleet')
67
- update_spotfleet(stack, get_stack_template(stack), stack_parameters, tags_to_hashes(get_stack_tags(stack)))
68
- else
69
- update_stack(stack, get_stack_template(stack), stack_parameters)
70
- end
79
+ update_stack(stack, get_stack_template(stack), stack_parameters)
71
80
  end
72
81
  end
73
82
 
@@ -111,8 +120,7 @@ class TwigUpdateAmi
111
120
  old_values.uniq
112
121
  end
113
122
 
114
- def update_stack_parameters(stack_name, new_parameters)
115
- stack_parameters = get_stack_parameters(stack_name)
123
+ def update_stack_parameters(stack_parameters, new_parameters)
116
124
  new_parameters.each do |new_param|
117
125
  stack_parameters.reject{ |k| k["parameter_key"] == new_param["parameter_key"] }
118
126
  stack_parameters.push(new_param)
@@ -135,13 +143,10 @@ class TwigUpdateAmi
135
143
  def get_desired_capacity(stack_name)
136
144
  stack_outputs = get_stack_outputs(stack_name)
137
145
  stack_outputs.each do |out|
138
- if out.export_name.include?('ECSAutoScalingGroup')
146
+ if out.export_name.include?('EC2Fleet') or out.export_name.include?('AutoScalingGroup')
139
147
  return get_autoscaling_capacity(out.output_value)
140
- elsif out.export_name.include?('SpotFleet')
141
- return get_spotfleet_capacity(out.output_value)
142
148
  end
143
149
  end
144
- return nil
145
150
  end
146
151
 
147
152
  def update_packer(json_filename)
@@ -149,93 +154,6 @@ class TwigUpdateAmi
149
154
  `grep 'artifact,0,id' build.log | cut -d, -f6 | cut -d: -f2`.sub(/\n/, '')
150
155
  end
151
156
 
152
- def update_body_and_tags(stack_body, stack_tags, old_amis = [])
153
- if stack_tags['ArtemideTemplatePath'].include?('spotfleet')
154
- if stack_tags['ArtemideTemplatePath'].include?('ci')
155
- return
156
- end
157
-
158
- stack_tags['SpotFleetHandleVersion'] = stack_tags['SpotFleetHandleVersion'].to_i + 1
159
- stack_body.gsub!(/InstanceReadyWaitHandleUpdate[0-9]*/, 'InstanceReadyWaitHandleUpdate' + stack_tags['SpotFleetHandleVersion'].to_s)
160
- stack_body.gsub!(/InstanceReadyWaitConditionUpdate[0-9]*/, 'InstanceReadyWaitConditionUpdate' + stack_tags['SpotFleetHandleVersion'].to_s)
161
-
162
- File.open stack_tags['ArtemideTemplatePath'], 'w' do |f|
163
- f.write(stack_body)
164
- @s3.put_object(body: stack_body, bucket: @s3_bucket, key: stack_tags['ArtemideTemplatePath'])
165
- end
166
-
167
- elsif stack_tags['ArtemideTemplatePath'].include?('batch')
168
- stack_body.gsub!(/(\w+:\s+)!(\w+)/i, '\1QuaCeraUnPuntoEsclamativo\2')
169
- stack_body_original = stack_body.clone
170
- ce_name = stack_tags['ComputeEnvironment'].sub(/[0-9]+/, '')
171
- new_ce_version = stack_tags['ComputeEnvironment'].sub(/[a-zA-Z]*/, '').to_i + 1
172
- new_ce_name = ce_name + new_ce_version.to_s
173
- stack_body.gsub!(/#{ce_name}[0-9]*/, new_ce_name)
174
- stack_body_original.gsub!("QuaCeraUnPuntoEsclamativoRef AMIID", old_amis[0])
175
- stack_tags['OldComputeEnvironment'] = stack_tags['ComputeEnvironment']
176
- stack_tags['ComputeEnvironment'] = new_ce_name
177
-
178
- File.open stack_tags['ArtemideTemplatePath'] + 'new', 'w' do |f|
179
- f.write(stack_body)
180
- end
181
-
182
- yaml_stack_body = YAML.load(stack_body_original)
183
- yaml_stack_body_new = YAML.load(stack_body)
184
- yaml_stack_body_merged = (yaml_stack_body.deep_merge(yaml_stack_body_new)).to_yaml.gsub('QuaCeraUnPuntoEsclamativo', '!')
185
-
186
- File.open(stack_tags['ArtemideTemplatePath'], 'w') do |file|
187
- file.write yaml_stack_body_merged
188
- @s3.put_object(body: yaml_stack_body_merged, bucket: @s3_bucket, key: stack_tags['ArtemideTemplatePath'])
189
- end
190
- end
191
- end
192
-
193
- def update_spotfleet(stack_name, stack_template, stack_parameters, stack_tags)
194
- update_body_and_tags(stack_template, stack_tags)
195
- update_stack_url(stack_name, "#{@templates_base_url}/#{@s3_bucket}/#{stack_tags['ArtemideTemplatePath']}", stack_parameters, hashes_to_tags(stack_tags))
196
- end
197
-
198
- def update_batch_compute_environment(stack_name, stack_body, stack_parameters, stack_tags, env, old_amis)
199
- output "updating #{stack_name} to add a new compute environment"
200
- update_body_and_tags(stack_body, stack_tags, old_amis)
201
- output 'updating stack on cloudformation (step 1)'
202
- update_stack_url(stack_name, "#{@templates_base_url}/#{@s3_bucket}/#{stack_tags['ArtemideTemplatePath']}", stack_parameters, hashes_to_tags(stack_tags))
203
- wait_for_stack_ready(stack_name, ['CREATE_FAILED', 'ROLLBACK_IN_PROGRESS', 'ROLLBACK_FAILED', 'DELETE_IN_PROGRESS', 'DELETE_FAILED', 'DELETE_COMPLETE', 'UPDATE_ROLLBACK_FAILED', 'UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS', 'UPDATE_ROLLBACK_COMPLETE', 'ROLLBACK_COMPLETE'])
204
-
205
- output "retrieving the list of stacks that are currently using the stack #{stack_name}"
206
- job_stacks = list_import_stacks(stack_tags['OldComputeEnvironment'] + "-" + env)
207
- job_stacks.each do |job_stack_name|
208
- output "updating the stack #{job_stack_name} to use to the new compute environment"
209
- job_stack_parameters = update_stack_parameters(job_stack_name,
210
- [
211
- {
212
- parameter_key: "ComputeEnvironmentExportName",
213
- parameter_value: stack_tags['ComputeEnvironment']
214
- }
215
- ]
216
- )
217
- update_stack(job_stack_name, get_stack_template(job_stack_name), job_stack_parameters)
218
- end
219
- job_stacks.each do |job_stack_name|
220
- wait_for_stack_ready(job_stack_name, ['CREATE_FAILED', 'ROLLBACK_IN_PROGRESS', 'ROLLBACK_FAILED', 'DELETE_IN_PROGRESS', 'DELETE_FAILED', 'DELETE_COMPLETE', 'UPDATE_ROLLBACK_FAILED', 'UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS', 'UPDATE_ROLLBACK_COMPLETE', 'ROLLBACK_COMPLETE'])
221
- end
222
-
223
- stack_body = File.read(stack_tags['ArtemideTemplatePath'] + 'new').gsub('QuaCeraUnPuntoEsclamativo', '!')
224
- File.open stack_tags['ArtemideTemplatePath'], 'w' do |f|
225
- f.write stack_body
226
- @s3.put_object(body: stack_body, bucket: @s3_bucket, key: stack_tags['ArtemideTemplatePath'])
227
- end
228
- stack_tags.delete('OldComputeEnvironment')
229
-
230
- output "updating stack #{stack_name} on cloudformation to remove the old compute environment"
231
- update_stack_url(stack_name, "#{@templates_base_url}/#{@s3_bucket}/#{stack_tags['ArtemideTemplatePath']}", stack_parameters, hashes_to_tags(stack_tags))
232
- wait_for_stack_ready(stack_name, ['CREATE_FAILED', 'ROLLBACK_IN_PROGRESS', 'ROLLBACK_FAILED', 'DELETE_IN_PROGRESS', 'DELETE_FAILED', 'DELETE_COMPLETE', 'UPDATE_ROLLBACK_FAILED', 'UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS', 'UPDATE_ROLLBACK_COMPLETE', 'ROLLBACK_COMPLETE'])
233
-
234
- File.delete(stack_tags['ArtemideTemplatePath'] + 'new')
235
-
236
- output "cloudformation stack update for #{stack_name} done!"
237
- end
238
-
239
157
  def help_content
240
158
  <<-HELP
241
159
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prima-twig
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.45.31
4
+ version: 0.46.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matteo Giachino
@@ -214,7 +214,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
214
214
  - !ruby/object:Gem::Version
215
215
  version: '0'
216
216
  requirements: []
217
- rubygems_version: 3.0.1
217
+ rubyforge_project:
218
+ rubygems_version: 2.5.2.3
218
219
  signing_key:
219
220
  specification_version: 4
220
221
  summary: The Prima twig toolbelt