prima-twig 0.28.4 → 0.29.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/twig-deploy +1 -25
- data/bin/twig-feature +7 -164
- data/lib/prima_twig.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe3319d7f081fe09c7c00c71ed29695b7c8b5221
|
4
|
+
data.tar.gz: 0f74ca0323984cfb2a65a5fd3506bbdb10ad5752
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dca19435feeaa8acddefd9b83c7827253e04527c98ebac5bbc926e2661cc74b39e622577edd52f7c26541b5529e6d11b0e89c78f12f4626c0c012d2f3fe27eec
|
7
|
+
data.tar.gz: 498129436f2ff62c94d9ec4cdda3f90356d302ef5b68321efff4b2c01ddcf4b371ada8c80774c94b88999b919544be467cb7520ce6829525b8f4a617287c6234
|
data/bin/twig-deploy
CHANGED
@@ -45,6 +45,7 @@ end
|
|
45
45
|
|
46
46
|
class Review
|
47
47
|
include Command
|
48
|
+
include PrimaAwsCommand
|
48
49
|
|
49
50
|
def initialize
|
50
51
|
@prima = Prima.new
|
@@ -196,31 +197,6 @@ class Review
|
|
196
197
|
artifacts.sort_by { |v| v[:created_at] }.reverse
|
197
198
|
end
|
198
199
|
|
199
|
-
def wait_for_stack_ready(stack_name)
|
200
|
-
ready = false
|
201
|
-
sleep_seconds = 5
|
202
|
-
output "Attendo che lo stack #{stack_name} finisca di essere deployato...\n".yellow
|
203
|
-
while !ready
|
204
|
-
ready = true if stack_ready?(stack_name)
|
205
|
-
seconds_elapsed = 0
|
206
|
-
while true
|
207
|
-
break if seconds_elapsed >= sleep_seconds
|
208
|
-
print '.'.yellow; STDOUT.flush
|
209
|
-
sleep 1
|
210
|
-
seconds_elapsed += 1
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
output "\nStack #{stack_name} deployato con successo!\n".green
|
215
|
-
end
|
216
|
-
|
217
|
-
def stack_ready?(stack_name)
|
218
|
-
resp = @cf.describe_stacks({
|
219
|
-
stack_name: stack_name
|
220
|
-
})
|
221
|
-
['CREATE_COMPLETE', 'UPDATE_COMPLETE'].include? resp.stacks[0].stack_status
|
222
|
-
end
|
223
|
-
|
224
200
|
def launch_paparatzinger(job_name)
|
225
201
|
@s3.get_object(
|
226
202
|
response_target: '/tmp/paparatzinger_twig.yml',
|
data/bin/twig-feature
CHANGED
@@ -9,6 +9,7 @@ require 'json'
|
|
9
9
|
|
10
10
|
class Release
|
11
11
|
include Command
|
12
|
+
include PrimaAwsClient
|
12
13
|
|
13
14
|
def initialize
|
14
15
|
@prima = Prima.new
|
@@ -109,7 +110,7 @@ class Release
|
|
109
110
|
|
110
111
|
output "Recupero le informazioni relative al puntamento dei record DNS..."
|
111
112
|
cloudflare = Rubyflare.connect_with(@prima.config['cloudflare_email'], @prima.config['cloudflare_apikey'])
|
112
|
-
dns_records = cloudflare.get("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records", {
|
113
|
+
dns_records = cloudflare.get("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records", {per_page: 100, type: "CNAME", content: get_alb_host(@stack_name_alb)})
|
113
114
|
stop_if dns_records.body[:result].empty?, "I record DNS degli aggregatori non stanno puntando ad un QA".red
|
114
115
|
|
115
116
|
output "Recupero le informazioni sui QA attivi..."
|
@@ -193,19 +194,7 @@ class Release
|
|
193
194
|
stack_list.each do |stack|
|
194
195
|
if stack.stack_name.match(/#{env_hash}$/)
|
195
196
|
stack_name = stack.stack_name
|
196
|
-
|
197
|
-
@cf.update_stack({
|
198
|
-
stack_name: stack_name,
|
199
|
-
tags: tags,
|
200
|
-
parameters: get_stack_parameters(stack_name),
|
201
|
-
template_body: get_stack_template(stack_name),
|
202
|
-
capabilities: ["CAPABILITY_IAM"]
|
203
|
-
})
|
204
|
-
rescue Aws::CloudFormation::Errors::ValidationError => e
|
205
|
-
raise e
|
206
|
-
else
|
207
|
-
output "L'update dello stack #{stack_name} è stato avviato".green
|
208
|
-
end
|
197
|
+
update_stack(stack_name, get_stack_template(stack_name), get_stack_parameters(stack_name), tags)
|
209
198
|
end
|
210
199
|
end
|
211
200
|
|
@@ -232,18 +221,8 @@ class Release
|
|
232
221
|
end
|
233
222
|
end
|
234
223
|
|
235
|
-
|
236
|
-
|
237
|
-
stack_name: stack_name_web,
|
238
|
-
template_body: get_stack_template(stack_name_web),
|
239
|
-
parameters: parameters,
|
240
|
-
capabilities: ["CAPABILITY_IAM"]
|
241
|
-
})
|
242
|
-
rescue Aws::CloudFormation::Errors::ValidationError => e
|
243
|
-
raise e
|
244
|
-
else
|
245
|
-
output "L'update dello stack #{stack_name_web} è stato avviato".green
|
246
|
-
end
|
224
|
+
update_stack(stack_name_web, get_stack_template(stack_name_web), parameters)
|
225
|
+
|
247
226
|
wait_for_stack_ready(stack_name_web) unless stack_ready?(stack_name_web)
|
248
227
|
end
|
249
228
|
|
@@ -331,17 +310,9 @@ class Release
|
|
331
310
|
while stacks_to_delete.length > 0
|
332
311
|
sleep 10
|
333
312
|
stacks_to_delete.each do |stack_name|
|
334
|
-
|
335
|
-
resp = @cf.describe_stacks({stack_name: stack_name})
|
336
|
-
rescue Aws::CloudFormation::Errors::ValidationError => e
|
337
|
-
if e.message.include? 'does not exist'
|
338
|
-
stacks_to_delete = stacks_to_delete - [stack_name]
|
339
|
-
else
|
340
|
-
raise e
|
341
|
-
end
|
342
|
-
end
|
313
|
+
stacks_to_delete = stacks_to_delete - [stack_name] unless stack_exists?(stack_name)
|
343
314
|
end
|
344
|
-
output "Stack ancora attivi
|
315
|
+
output "Stack ancora attivi: #{stacks_to_delete.length.to_s}. Attendo altri 10 secondi per eliminare il cluster ECS"
|
345
316
|
end
|
346
317
|
|
347
318
|
delete_stack(cluster_stack_name)
|
@@ -1646,76 +1617,6 @@ class Release
|
|
1646
1617
|
Dir.chdir "../../"
|
1647
1618
|
end
|
1648
1619
|
|
1649
|
-
def upload_artifact(source_path, destination_path)
|
1650
|
-
output "Upload dell'artifact in corso (#{(File.size(source_path).to_f / 2**20).round(2)} MiB)\n".yellow
|
1651
|
-
s3 = Aws::S3::Resource.new
|
1652
|
-
obj = s3.bucket(@s3_bucket).object(destination_path)
|
1653
|
-
obj.upload_file(source_path)
|
1654
|
-
|
1655
|
-
output "#{@s3_bucket}/#{destination_path} uploadato con successo!\n".green
|
1656
|
-
end
|
1657
|
-
|
1658
|
-
def wait_for_stack_ready(stack_name)
|
1659
|
-
ready = false
|
1660
|
-
sleep_seconds = 10
|
1661
|
-
output "Attendo che lo stack #{stack_name} finisca di essere inizializzato...\n".yellow
|
1662
|
-
while !ready
|
1663
|
-
ready = true if stack_ready?(stack_name)
|
1664
|
-
seconds_elapsed = 0
|
1665
|
-
while true
|
1666
|
-
break if seconds_elapsed >= sleep_seconds
|
1667
|
-
print '.'.yellow; STDOUT.flush
|
1668
|
-
sleep 1
|
1669
|
-
seconds_elapsed += 1
|
1670
|
-
end
|
1671
|
-
end
|
1672
|
-
|
1673
|
-
output "\nStack #{stack_name} pronto!\n".green
|
1674
|
-
end
|
1675
|
-
|
1676
|
-
def get_stack_tags(name)
|
1677
|
-
resp = @cf.describe_stacks({stack_name: name})
|
1678
|
-
resp.stacks[0].tags
|
1679
|
-
end
|
1680
|
-
|
1681
|
-
def get_stack_parameters(name)
|
1682
|
-
resp = @cf.describe_stacks({stack_name: name})
|
1683
|
-
resp.stacks[0].parameters
|
1684
|
-
end
|
1685
|
-
|
1686
|
-
def get_stack_template(name)
|
1687
|
-
resp = @cf.get_template({stack_name: name})
|
1688
|
-
resp.template_body
|
1689
|
-
end
|
1690
|
-
|
1691
|
-
def stack_list
|
1692
|
-
stacks = []
|
1693
|
-
next_token = ""
|
1694
|
-
while true do
|
1695
|
-
print '.'.yellow; STDOUT.flush
|
1696
|
-
options = next_token != "" ? {next_token: next_token} : {}
|
1697
|
-
resp = @cf.describe_stacks(options)
|
1698
|
-
stacks += resp.stacks
|
1699
|
-
break unless resp.next_token
|
1700
|
-
next_token = resp.next_token
|
1701
|
-
end
|
1702
|
-
puts '.'.yellow; STDOUT.flush
|
1703
|
-
stacks.keep_if { |stack| stack.stack_name.include? '-qa-' }
|
1704
|
-
stacks
|
1705
|
-
end
|
1706
|
-
|
1707
|
-
def delete_stack(stack_name)
|
1708
|
-
@cf.delete_stack({stack_name: stack_name})
|
1709
|
-
output "Stack #{stack_name} spenta con successo\n".green
|
1710
|
-
end
|
1711
|
-
|
1712
|
-
def stack_ready?(stack_name)
|
1713
|
-
resp = @cf.describe_stacks({
|
1714
|
-
stack_name: stack_name
|
1715
|
-
})
|
1716
|
-
['CREATE_COMPLETE', 'UPDATE_COMPLETE', 'UPDATE_ROLLBACK_COMPLETE'].include? resp.stacks[0].stack_status
|
1717
|
-
end
|
1718
|
-
|
1719
1620
|
def create_asg_stack(stack_name, tags = [])
|
1720
1621
|
stack_body = IO.read('cloudformation/stacks/asg/ecs-asg-allinone.yml')
|
1721
1622
|
parameters = [
|
@@ -1794,63 +1695,6 @@ class Release
|
|
1794
1695
|
print "\n"
|
1795
1696
|
end
|
1796
1697
|
|
1797
|
-
def stack_exists?(stack_name)
|
1798
|
-
begin
|
1799
|
-
res = @cf.describe_stacks({
|
1800
|
-
stack_name: stack_name
|
1801
|
-
})
|
1802
|
-
rescue Aws::CloudFormation::Errors::ValidationError => e
|
1803
|
-
if e.message.include? 'does not exist'
|
1804
|
-
false
|
1805
|
-
else
|
1806
|
-
raise e
|
1807
|
-
end
|
1808
|
-
else
|
1809
|
-
true
|
1810
|
-
end
|
1811
|
-
end
|
1812
|
-
|
1813
|
-
def create_stack(stack_name, stack_body, parameters = [], tags = [])
|
1814
|
-
@cf.create_stack({
|
1815
|
-
stack_name: stack_name,
|
1816
|
-
template_body: stack_body,
|
1817
|
-
parameters: parameters,
|
1818
|
-
tags: tags,
|
1819
|
-
capabilities: ["CAPABILITY_IAM"],
|
1820
|
-
on_failure: "ROLLBACK"
|
1821
|
-
})
|
1822
|
-
output "La creazione dello stack #{stack_name} è stata avviata".green
|
1823
|
-
end
|
1824
|
-
|
1825
|
-
def update_stack(stack_name, stack_body, parameters = [])
|
1826
|
-
begin
|
1827
|
-
@cf.update_stack({
|
1828
|
-
stack_name: stack_name,
|
1829
|
-
template_body: stack_body,
|
1830
|
-
parameters: parameters,
|
1831
|
-
capabilities: ["CAPABILITY_IAM"]
|
1832
|
-
})
|
1833
|
-
rescue Aws::CloudFormation::Errors::ValidationError => e
|
1834
|
-
# if e.message.include? 'does not exist'
|
1835
|
-
# false
|
1836
|
-
# else
|
1837
|
-
# raise e
|
1838
|
-
# end
|
1839
|
-
raise e
|
1840
|
-
else
|
1841
|
-
output "L'update dello stack #{stack_name} è stato avviato".green
|
1842
|
-
end
|
1843
|
-
end
|
1844
|
-
|
1845
|
-
def artifact_exists?(bucket, path)
|
1846
|
-
resp = @s3.list_objects({
|
1847
|
-
bucket: bucket,
|
1848
|
-
max_keys: 1,
|
1849
|
-
prefix: path
|
1850
|
-
})
|
1851
|
-
!resp.contents.empty?
|
1852
|
-
end
|
1853
|
-
|
1854
1698
|
def choose_branch_to_deploy(project_name, select_master = false)
|
1855
1699
|
Dir.chdir "projects/#{project_name}"
|
1856
1700
|
output "Recupero la lista dei branch del progetto #{project_name}..."
|
@@ -1992,7 +1836,6 @@ class Release
|
|
1992
1836
|
end
|
1993
1837
|
end
|
1994
1838
|
end
|
1995
|
-
|
1996
1839
|
end
|
1997
1840
|
|
1998
1841
|
def help_content
|
data/lib/prima_twig.rb
CHANGED
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.
|
4
|
+
version: 0.29.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matteo Giachino
|
@@ -196,7 +196,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
196
196
|
version: '0'
|
197
197
|
requirements: []
|
198
198
|
rubyforge_project:
|
199
|
-
rubygems_version: 2.6.
|
199
|
+
rubygems_version: 2.6.14
|
200
200
|
signing_key:
|
201
201
|
specification_version: 4
|
202
202
|
summary: The Prima twig toolbelt
|