prima-twig 0.31.1 → 0.31.2

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/twig-update-ami +131 -0
  3. metadata +3 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 101de521a31bf054b2642be15b80adafb4fb998e
4
- data.tar.gz: d851a7a0c8e8aedb8807ad93896126bca5b4dd7d
3
+ metadata.gz: c6f7a49c077da9462b2283d2e4cd246c3d0af86e
4
+ data.tar.gz: 7ad946b20bc7c0b742ae6e99efa021686b49f047
5
5
  SHA512:
6
- metadata.gz: 6757dfb7c78f1df2703d9ea9d35fa08684533d0934536b9ac2227297d32081d28df49a03388e8ddfd846086c5e09cf3879d06c4537b3484f6b8f0385a88f21b2
7
- data.tar.gz: 938a531398ea60012ede9d4a41e6065ce03bbe053d6858007aaeafe5af661b2d2d8a2e8514219414222cc667da8436c4b8ef35ea09f37a06aa1ecfdcf3cfdca6
6
+ metadata.gz: e53e291ecc59c2916c5935a46c9260f17f7fc10fdac268dac0376b1fd4cd320d7864533cb2ef94ae315784696ce9d26b883bed7eec5a02d5f4c6de73ea7246f1
7
+ data.tar.gz: b960e4d770f769191b3a4d8b9f5baf47db8c051929c2f387f4745e7993cff1385125fcc30ed01f80dc90a463f6546eb93c32806d91d15fca3949ec4451036d55
@@ -0,0 +1,131 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require_relative '../lib/prima_twig.rb'
5
+ require_relative '../lib/prima_aws_client.rb'
6
+ require 'launchy'
7
+ require 'json'
8
+ require 'aws-sdk'
9
+
10
+ #
11
+ class TwigUpdateAmi
12
+ include Command
13
+ include PrimaAwsClient
14
+ def initialize
15
+ @s3 = Aws::S3::Client.new
16
+ @s3_bucket = 'prima-deploy'
17
+ @instances = JSON.parse File.read('../twig-binaries/cloudformation.json')
18
+ end
19
+
20
+ def execute!(args)
21
+ update_amis args[0], args[1], args[2]
22
+ end
23
+
24
+ private
25
+
26
+ def update_amis(ami_id, ami_name, ami_description)
27
+ @instances['instances'].each do |instance|
28
+ output 'updating instance definition'.light_green
29
+ Dir.chdir 'ami'
30
+ update_instance_name(ami_id, ami_name, ami_description, instance['json'])
31
+ output 'running packer update (this could take some time)'.light_green
32
+ new_ami_id = update_packer instance['json']
33
+ Dir.chdir '..'
34
+ output 'new ami id: ' + new_ami_id
35
+ instance['stacks'].each do |stack|
36
+ output 'updating ' + stack['yaml_filename'] + ' and copying onto s3'
37
+ update_yml_files(new_ami_id, stack['yaml_filename'])
38
+ copy_yml_files_to_s3(stack['yaml_filename'], stack['s3_key'])
39
+ output 'updating stack on cloudformation'
40
+ update_stack_url(stack['stack_name'], stack['template_url'], stack['parameters']) if stack['stack_name']
41
+ end
42
+ end
43
+ end
44
+
45
+ def update_instance_name(ami_id, ami_name, ami_description, ecs_json_path)
46
+ ecs_json = JSON.parse File.read(ecs_json_path)
47
+
48
+ ecs_json['builders'][0]['source_ami'] = ami_id
49
+ ecs_json['builders'][0]['ami_name'] = ami_name
50
+ ecs_json['builders'][0]['ami_description'] = ami_description
51
+
52
+ File.open ecs_json_path, 'w' do |f|
53
+ f.write(JSON.pretty_generate(ecs_json))
54
+ end
55
+ end
56
+
57
+ def update_packer(json_filename)
58
+ `packer build -machine-readable ./#{json_filename} | tee build.log`
59
+ `grep 'artifact,0,id' build.log | cut -d, -f6 | cut -d: -f2`.sub(/\n/, '')
60
+ end
61
+
62
+ def update_yml_files(ami_id, yaml_filename)
63
+ yaml_file = File.read yaml_filename
64
+
65
+ yaml_file.sub!(/ami-[0-9a-z]{8}/, ami_id)
66
+
67
+ File.open yaml_filename, 'w' do |f|
68
+ f.write yaml_file
69
+ end
70
+
71
+ if yaml_filename.include? 'spotfleet' do
72
+ old_handle = (File.read yaml_filename)[/InstanceReadyWaitHandleUpdate[0-9]+/]
73
+ handle_version = old_handle.sub('InstanceReadyWaitHandleUpdate', '').to_i + 1
74
+
75
+ old_condition = (File.read yaml_filename)[/InstanceReadyWaitConditionUpdate[0-9]+/]
76
+ condition_version = old_condition.sub('InstanceReadyWaitConditionUpdate', '').to_i + 1
77
+
78
+ file_content = File.read yaml_filename
79
+ file_content.gsub!(old_handle, 'InstanceReadyWaitHandleUpdate' + handle_version.to_s)
80
+ file_content.gsub!(old_condition, 'InstanceReadyWaitConditionUpdate' + condition_version.to_s)
81
+
82
+ File.open yaml_filename, 'w' do |f|
83
+ f.write file_content
84
+ end
85
+ end
86
+ end
87
+ end
88
+
89
+ def copy_yml_files_to_s3(source, s3_key)
90
+ body = File.read source
91
+ @s3.put_object(
92
+ body: body,
93
+ bucket: @s3_bucket,
94
+ key: s3_key
95
+ )
96
+ end
97
+
98
+ def help_content
99
+ <<-HELP
100
+
101
+ twig-update-ami
102
+ ===========
103
+
104
+ Updates ami version and applies it to stacks on cloudformation
105
+
106
+ Synopsis
107
+ --------
108
+
109
+ twig-update-ami
110
+
111
+ Description
112
+ -----------
113
+
114
+ from artemide main folder run
115
+ `../twig-binaries/bin/twig-update-ami ${AMI_ID} ${AMI_NAME} ${AMI_DESCRIPTION}`
116
+
117
+ Subcommand for Twig: <http://rondevera.github.io/twig/>
118
+ Author: Eugenio Laghi <https://github.com/eugeniolaghi>
119
+
120
+ HELP
121
+ end
122
+
123
+ args = ARGV.dup
124
+
125
+ if args.include?('--help')
126
+ puts help_content
127
+ exit
128
+ end
129
+
130
+ TwigUpdateAmi.new.execute!(args)
131
+ end
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.31.1
4
+ version: 0.31.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matteo Giachino
@@ -179,6 +179,7 @@ executables:
179
179
  - twig-open-pr
180
180
  - twig-pick-issue
181
181
  - twig-review
182
+ - twig-update-ami
182
183
  extensions: []
183
184
  extra_rdoc_files: []
184
185
  files:
@@ -189,6 +190,7 @@ files:
189
190
  - bin/twig-open-pr
190
191
  - bin/twig-pick-issue
191
192
  - bin/twig-review
193
+ - bin/twig-update-ami
192
194
  - lib/command.rb
193
195
  - lib/prima_aws_client.rb
194
196
  - lib/prima_twig.rb