prima-twig 0.28.4 → 0.29.0
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-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
|