prima-twig 0.29.0 → 0.29.1
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/bin/twig-feature +3 -0
- data/lib/prima_aws_client.rb +125 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bbcf2e49fd1c8061a9afdd6475df1edcc1b17002
|
4
|
+
data.tar.gz: 838ea9352b0d2476ef1e1280e464b1bf55556aac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f6a18b00a13bb9a620ce6649abe11647a09abbd99433f20a0b0037786a82cfc422455672b66331a10edd2866ca63b31910bfd5d65b065b36f3deadf865e0516
|
7
|
+
data.tar.gz: e4e59057d62b4345c7364aae5e2556d60b1983ac40e254e4f61f6a90e352b2b6625b67f8bd901d20d2b1144b690cfa9cc2ea53229279e655e92d411d331a481e
|
data/bin/twig-feature
CHANGED
@@ -26,6 +26,7 @@ class Release
|
|
26
26
|
@s3_bucket = 'prima-artifacts'
|
27
27
|
@artifact_path = '/tmp/prima-artifact.zip'
|
28
28
|
@import_db_task = 'arn:aws:ecs:eu-west-1:001575623345:task-definition/ecs-task-db-restore-TaskDefinitionDbRestore-19XD5OHZGOTI3:1'
|
29
|
+
@built_projects = {}
|
29
30
|
@prima_built = false
|
30
31
|
@urania_built = false
|
31
32
|
@ermes_built = false
|
@@ -1046,6 +1047,8 @@ class Release
|
|
1046
1047
|
host = "assange-#{@dns_record_identifier}.qa.colaster.com"
|
1047
1048
|
when stack_name.include?('borat')
|
1048
1049
|
host = "backoffice-#{@dns_record_identifier}.qa.colaster.com"
|
1050
|
+
when stack_name.include?('crash')
|
1051
|
+
host = "crash-#{@dns_record_identifier}.qa.colaster.com"
|
1049
1052
|
end
|
1050
1053
|
host
|
1051
1054
|
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'aws-sdk'
|
2
|
+
require 'colorize'
|
3
|
+
#
|
4
|
+
module PrimaAwsClient
|
5
|
+
def s3_client
|
6
|
+
@s3 ||= Aws::S3::Client.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def stack_list
|
10
|
+
stacks = []
|
11
|
+
next_token = ''
|
12
|
+
loop do
|
13
|
+
print '.'.yellow; STDOUT.flush
|
14
|
+
options = next_token != '' ? { next_token: next_token } : {}
|
15
|
+
resp = @cf.describe_stacks(options)
|
16
|
+
stacks += resp.stacks
|
17
|
+
break unless resp.next_token
|
18
|
+
next_token = resp.next_token
|
19
|
+
end
|
20
|
+
puts '.'.yellow; STDOUT.flush
|
21
|
+
stacks.keep_if { |stack| stack.stack_name.include? '-qa-' }
|
22
|
+
stacks
|
23
|
+
end
|
24
|
+
|
25
|
+
def cf_client
|
26
|
+
@cf ||= Aws::CloudFormation::Client.new
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_stack(stack_name, stack_body, parameters = [], tags = [])
|
30
|
+
cf_client.create_stack(
|
31
|
+
stack_name: stack_name,
|
32
|
+
template_body: stack_body,
|
33
|
+
parameters: parameters,
|
34
|
+
tags: tags,
|
35
|
+
capabilities: ['CAPABILITY_IAM'],
|
36
|
+
on_failure: 'ROLLBACK'
|
37
|
+
)
|
38
|
+
output "La creazione dello stack #{stack_name} è stata avviata".green
|
39
|
+
end
|
40
|
+
|
41
|
+
def update_stack(stack_name, template_url, parameters = [], tags = [])
|
42
|
+
cf_client.update_stack(
|
43
|
+
stack_name: stack_name,
|
44
|
+
template_url: template_url,
|
45
|
+
parameters: parameters,
|
46
|
+
tags: tags,
|
47
|
+
capabilities: ['CAPABILITY_IAM']
|
48
|
+
)
|
49
|
+
rescue Aws::CloudFormation::Errors::ValidationError => e
|
50
|
+
raise e
|
51
|
+
else
|
52
|
+
output "L'update dello stack #{stack_name} è stato avviato".green
|
53
|
+
end
|
54
|
+
|
55
|
+
def stack_exists?(stack_name)
|
56
|
+
cf_client.describe_stacks(stack_name: stack_name)
|
57
|
+
rescue Aws::CloudFormation::Errors::ValidationError => e
|
58
|
+
return false if e.message.include? 'does not exist'
|
59
|
+
raise e
|
60
|
+
else
|
61
|
+
true
|
62
|
+
end
|
63
|
+
|
64
|
+
def delete_stack(stack_name)
|
65
|
+
cf_client.delete_stack(stack_name: stack_name)
|
66
|
+
output "Stack #{stack_name} spenta con successo\n".green
|
67
|
+
end
|
68
|
+
|
69
|
+
def wait_for_stack_ready(stack_name)
|
70
|
+
ready = false
|
71
|
+
sleep_seconds = 10
|
72
|
+
output "Attendo che lo stack #{stack_name} finisca di essere inizializzato...\n".yellow
|
73
|
+
while !ready
|
74
|
+
ready = true if stack_ready?(stack_name)
|
75
|
+
seconds_elapsed = 0
|
76
|
+
loop do
|
77
|
+
break if seconds_elapsed >= sleep_seconds
|
78
|
+
print '.'.yellow; STDOUT.flush
|
79
|
+
sleep 1
|
80
|
+
seconds_elapsed += 1
|
81
|
+
end
|
82
|
+
end
|
83
|
+
output "\nStack #{stack_name} pronto!\n".green
|
84
|
+
end
|
85
|
+
|
86
|
+
def get_stack_tags(name)
|
87
|
+
resp = cf_client.describe_stacks(stack_name: name)
|
88
|
+
resp.stacks[0].tags
|
89
|
+
end
|
90
|
+
|
91
|
+
def get_stack_parameters(name)
|
92
|
+
resp = cf_client.describe_stacks(stack_name: name)
|
93
|
+
resp.stacks[0].parameters
|
94
|
+
end
|
95
|
+
|
96
|
+
def get_stack_template(name)
|
97
|
+
resp = cf_client.get_template(stack_name: name)
|
98
|
+
resp.template_body
|
99
|
+
end
|
100
|
+
|
101
|
+
def stack_ready?(stack_name)
|
102
|
+
resp = cf_client.describe_stacks(
|
103
|
+
stack_name: stack_name
|
104
|
+
)
|
105
|
+
['CREATE_COMPLETE', 'UPDATE_COMPLETE', 'UPDATE_ROLLBACK_COMPLETE'].include? resp.stacks[0].stack_status
|
106
|
+
end
|
107
|
+
|
108
|
+
def artifact_exists?(bucket, path)
|
109
|
+
resp = s3_client.list_objects(
|
110
|
+
bucket: bucket,
|
111
|
+
max_keys: 1,
|
112
|
+
prefix: path
|
113
|
+
)
|
114
|
+
!resp.contents.empty?
|
115
|
+
end
|
116
|
+
|
117
|
+
def upload_artifact(source_path, destination_path)
|
118
|
+
output "Upload dell'artifact in corso (#{(File.size(source_path).to_f / 2**20).round(2)} MiB)\n".yellow
|
119
|
+
s3 = Aws::S3::Resource.new
|
120
|
+
obj = s3.bucket(@s3_bucket).object(destination_path)
|
121
|
+
obj.upload_file(source_path)
|
122
|
+
|
123
|
+
output "#{@s3_bucket}/#{destination_path} uploadato con successo!\n".green
|
124
|
+
end
|
125
|
+
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.29.
|
4
|
+
version: 0.29.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matteo Giachino
|
@@ -175,6 +175,7 @@ files:
|
|
175
175
|
- bin/twig-pick-issue
|
176
176
|
- bin/twig-review
|
177
177
|
- lib/command.rb
|
178
|
+
- lib/prima_aws_client.rb
|
178
179
|
- lib/prima_twig.rb
|
179
180
|
homepage: http://rubygems.org/gems/prima-twig
|
180
181
|
licenses:
|