ufo 6.3.9 → 6.3.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 58373df3fe5245cc8c487d83eaa62a958ab71bb9a6173b674944ddca94207901
4
- data.tar.gz: 4a1bcee32eecc7fbfa36d596ca6d53817cab81536f4abb03a005c0d5e691536a
3
+ metadata.gz: 96dbe1f1087d3b65bc76c0cc1372429ea662eb75d91d9b3942c0e27a49809531
4
+ data.tar.gz: e427dd248adee498f897614b5dace90fa5b61ddda04a86ad7ef6990ab87c790c
5
5
  SHA512:
6
- metadata.gz: f93554b98a650697c44f96f612610d48156048ef804cede7fdb9b26da8ef60f761a5a44e7cad3e4695ddbebda98398f187bd465a5e230d3e291c6f6aa84b84cd
7
- data.tar.gz: 88083854a58d89275af4d3de81d9b1a906dc57d56760fe5c28e953487c17bfb22f54a226ea6abf3197acbc57854d07ef65855915bc9e5614ff2c0897f17ac41b
6
+ metadata.gz: 32763a18f438116170d9a3d2f7b7e45c6eb3f50ceeb2f714a49412eaf9aa236870c36d0e81b9c8242ef2f35ba01db429b0d12930613e65c093abd4b7ad15a35a
7
+ data.tar.gz: 3f9aa0e0724e55d4eb79432c7752ddb70d98081bcaea516761652afae0d6ce2b90385f6fa8515acd07335f179498a026e7b7bb990a4d29d11b030325d0d7687f
@@ -0,0 +1 @@
1
+ github: boltops-tools
data/CHANGELOG.md CHANGED
@@ -3,6 +3,15 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
5
5
 
6
+ ## [6.3.12] - 2022-07-11
7
+ - [#179](https://github.com/tongueroo/ufo/pull/179) auto continue_update_rollback and retry once
8
+
9
+ ## [6.3.11] - 2022-07-09
10
+ - [#178](https://github.com/tongueroo/ufo/pull/178) use .ufo/tmp folder instead of /tmp/ufo
11
+
12
+ ## [6.3.10] - 2022-06-23
13
+ - [#177](https://github.com/tongueroo/ufo/pull/177) Enabled support for gRPC
14
+
6
15
  ## [6.3.9] - 2022-05-09
7
16
  - [#175](https://github.com/tongueroo/ufo/pull/175) Secrets autofix and add missing trailing ::
8
17
  - new env_file
@@ -6,11 +6,16 @@ class Ufo::Cfn::Stack::Builder::Resources
6
6
  Properties: properties
7
7
  }
8
8
 
9
- attrs[:DependsOn] = "Listener" if vars[:create_elb]
9
+ attrs[:DependsOn] = depends_on
10
10
 
11
11
  attrs
12
12
  end
13
13
 
14
+ def depends_on
15
+ return unless vars[:create_elb]
16
+ vars[:create_listener] ? "Listener" : "ListenerSsl"
17
+ end
18
+
14
19
  def properties
15
20
  props = {
16
21
  Cluster: @cluster,
@@ -14,7 +14,7 @@ class Ufo::Cfn::Stack::Builder::Resources
14
14
  Tags: [
15
15
  {Key: "Name", Value: @stack_name}
16
16
  ],
17
- Scheme: "internet-facing"
17
+ Scheme: Ufo.config.elb.scheme
18
18
  }
19
19
 
20
20
  props[:SecurityGroups] = security_groups(:elb) if vars[:elb_type] == "application"
@@ -1,6 +1,7 @@
1
1
  class Ufo::Cfn::Stack::Builder::Resources
2
2
  class Listener < Base
3
3
  def build
4
+ return unless vars[:create_listener]
4
5
  {
5
6
  Type: "AWS::ElasticLoadBalancingV2::Listener",
6
7
  Condition: "CreateElbIsTrue",
@@ -18,11 +19,11 @@ class Ufo::Cfn::Stack::Builder::Resources
18
19
  end
19
20
 
20
21
  def protocol
21
- vars[:default_listener_protocol]
22
+ Ufo.config.elb.protocol || vars[:default_listener_protocol]
22
23
  end
23
24
 
24
25
  def port
25
- 80
26
+ Ufo.config.elb.port
26
27
  end
27
28
 
28
29
  def default_actions
@@ -2,7 +2,11 @@ class Ufo::Cfn::Stack::Builder::Resources
2
2
  class ListenerSsl < Listener
3
3
  def build
4
4
  return unless vars[:create_listener_ssl]
5
- super
5
+ {
6
+ Type: "AWS::ElasticLoadBalancingV2::Listener",
7
+ Condition: "CreateElbIsTrue",
8
+ Properties: properties,
9
+ }
6
10
  end
7
11
 
8
12
  def properties
@@ -18,7 +18,6 @@ class Ufo::Cfn::Stack::Builder::Resources
18
18
  }
19
19
  ],
20
20
  Protocol: vars[:default_target_group_protocol],
21
- Port: 80,
22
21
  HealthCheckIntervalSeconds: 10,
23
22
  HealthyThresholdCount: 2,
24
23
  UnhealthyThresholdCount: 2,
@@ -36,6 +35,9 @@ class Ufo::Cfn::Stack::Builder::Resources
36
35
  props[:HealthCheckIntervalSeconds] = health_check_interval_seconds
37
36
  props[:HealthyThresholdCount] = healthy_threshold_count
38
37
  props[:UnhealthyThresholdCount] = unhealthy_threshold_count
38
+ props[:Matcher] = matcher
39
+ props[:ProtocolVersion] = protocol_version
40
+ props[:Port] = port
39
41
 
40
42
  props
41
43
  end
@@ -45,6 +47,9 @@ class Ufo::Cfn::Stack::Builder::Resources
45
47
  health_check_path
46
48
  healthy_threshold_count
47
49
  unhealthy_threshold_count
50
+ matcher
51
+ protocol_version
52
+ port
48
53
  ]
49
54
  delegate *meths, to: :elb
50
55
  def elb
@@ -8,6 +8,7 @@ class Ufo::Cfn::Stack
8
8
  cluster: @cluster,
9
9
  container: container,
10
10
  create_elb: create_elb?, # helps set Ecs DependsOn
11
+ create_listener: create_listener?,
11
12
  create_listener_ssl: create_listener_ssl?,
12
13
  create_route53: create_route53?,
13
14
  default_listener_protocol: default_listener_protocol,
@@ -58,6 +59,10 @@ class Ufo::Cfn::Stack
58
59
  elb_type == 'network' ? 'TCP' : 'HTTP'
59
60
  end
60
61
 
62
+ def create_listener?
63
+ Ufo.config.elb.listener.enabled
64
+ end
65
+
61
66
  # if the configuration is set to anything then enable it
62
67
  def create_listener_ssl?
63
68
  elb = Ufo.config.elb
data/lib/ufo/cfn/stack.rb CHANGED
@@ -55,9 +55,32 @@ module Ufo::Cfn
55
55
  logger.info "#{action[0..-2].capitalize}ing stack #{@stack_name.color(:green)}"
56
56
  cfn.send("#{action}_stack", stack_options) # Example: cfn.send("update_stack", stack_options)
57
57
  rescue Aws::CloudFormation::Errors::ValidationError => e
58
+ try_continue_update_rollback = continue_update_rollback(e)
59
+ try_continue_update_rollback && retry
58
60
  handle_stack_error(e)
59
61
  end
60
62
 
63
+ # Super edge case where stack is in UPDATE_ROLLBACK_FAILED. Can reproduce by:
64
+ #
65
+ # 1. spinning ECS cluster down to 0 and deploying with ufo ship
66
+ # 2. after 3h will timeout and fail and goes into UPDATE_ROLLBACK_FAILED
67
+ #
68
+ # Screenshot: https://capture.dropbox.com/Pdr8gijnaQvoMp2y
69
+ #
70
+ # Will auto-retry once
71
+ #
72
+ def continue_update_rollback(e)
73
+ if e.message.include?('UPDATE_ROLLBACK_FAILED') && !@continue_update_rollback_tried
74
+ logger.info "Stack in UPDATE_ROLLBACK_FAILED"
75
+ logger.info "Trying a continue_update_rollback and will retry again once"
76
+ cfn.continue_update_rollback(stack_name: @stack_name)
77
+ status.wait
78
+ @continue_update_rollback_tried ||= true
79
+ else
80
+ false
81
+ end
82
+ end
83
+
61
84
  def stack_options
62
85
  options = {
63
86
  capabilities: ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
data/lib/ufo/config.rb CHANGED
@@ -72,12 +72,18 @@ module Ufo
72
72
  config.elb.healthy_threshold_count = 3 # The AWS usual default is 5
73
73
  config.elb.unhealthy_threshold_count = 3
74
74
 
75
+ config.elb.listener = ActiveSupport::OrderedOptions.new
76
+ config.elb.listener.enabled = true
77
+ config.elb.matcher = nil
75
78
  config.elb.port = 80 # default listener port
79
+ config.elb.protocol = nil
80
+ config.elb.protocol_version = nil
76
81
  config.elb.redirect = ActiveSupport::OrderedOptions.new
77
82
  config.elb.redirect.code = 302 # IE: 302 or 301
78
83
  config.elb.redirect.enabled = false
79
84
  config.elb.redirect.port = 443
80
85
  config.elb.redirect.protocol = "HTTPS"
86
+ config.elb.scheme = "internet-facing"
81
87
  config.elb.ssl = ActiveSupport::OrderedOptions.new
82
88
  config.elb.ssl.certificates = nil
83
89
  config.elb.ssl.enabled = false
@@ -41,7 +41,7 @@ class Ufo::TaskDefinition
41
41
  def evaluate_code
42
42
  path = @task_definition.path
43
43
  text = RenderMePretty.result(path, context: self)
44
- rendered_path = "/tmp/ufo/task_definition#{File.extname(path)}"
44
+ rendered_path = "#{Ufo.root}/.ufo/tmp/task_definition#{File.extname(path)}"
45
45
  FileUtils.mkdir_p(File.dirname(rendered_path))
46
46
  IO.write(rendered_path, text)
47
47
 
@@ -2,6 +2,7 @@ module Ufo::TaskDefinition::Helpers
2
2
  module StackOutput
3
3
  include Ufo::AwsServices
4
4
  include Ufo::Concerns::Names
5
+ include Ufo::Utils::Logging
5
6
 
6
7
  def stack_output(name)
7
8
  stack_name, output_key = name.split(".")
data/lib/ufo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ufo
2
- VERSION = "6.3.9"
2
+ VERSION = "6.3.12"
3
3
  end
data/lib/ufo/yaml.rb CHANGED
@@ -2,7 +2,7 @@ module Ufo
2
2
  class Yaml
3
3
  class << self
4
4
  def load(text)
5
- path = "/tmp/ufo/temp.yml"
5
+ path = "#{Ufo.root}/.ufo/tmp/temp.yml"
6
6
  FileUtils.mkdir_p(File.dirname(path))
7
7
  IO.write(path, text)
8
8
  Validator.new(path).validate!
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ufo
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.3.9
4
+ version: 6.3.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-05-09 00:00:00.000000000 Z
11
+ date: 2022-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-logs
@@ -460,6 +460,7 @@ files:
460
460
  - ".cody/acceptance/project.rb"
461
461
  - ".cody/shared/script/install.sh"
462
462
  - ".cody/shared/script/install/ufo.sh"
463
+ - ".github/FUNDING.yml"
463
464
  - ".github/ISSUE_TEMPLATE.md"
464
465
  - ".github/ISSUE_TEMPLATE/bug_report.md"
465
466
  - ".github/ISSUE_TEMPLATE/documentation.md"