Module: Jets::AwsServices::StackStatus
- Included in:
- Jets::AwsServices
- Defined in:
- lib/jets/aws_services/stack_status.rb
Instance Method Summary collapse
-
#lookup(outputs, key) ⇒ Object
Lookup output value.
- #stack_exists?(stack_name) ⇒ Boolean
-
#stack_in_progress?(stack_name) ⇒ Boolean
All CloudFormation states listed here: docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-describing-stacks.html.
Instance Method Details
#lookup(outputs, key) ⇒ Object
Lookup output value. Used in Jets::Resource::ApiGateway::RestApi::* andJets::Commands::Url
54 55 56 57 |
# File 'lib/jets/aws_services/stack_status.rb', line 54 def lookup(outputs, key) out = outputs.find { |o| o.output_key == key } out&.output_value end |
#stack_exists?(stack_name) ⇒ Boolean
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/jets/aws_services/stack_status.rb', line 3 def stack_exists?(stack_name) return false if ENV['TEST'] exist = nil begin # When the stack does not exist an exception is raised. Example: # Aws::CloudFormation::Errors::ValidationError: Stack with id blah does not exist resp = cfn.describe_stacks(stack_name: stack_name) exist = true rescue Aws::CloudFormation::Errors::ValidationError => e if e. =~ /does not exist/ exist = false elsif e..include?("'stackName' failed to satisfy constraint") # Example of e.message when describe_stack with invalid stack name # "1 validation error detected: Value 'instance_and_route53' at 'stackName' failed to satisfy constraint: Member must satisfy regular expression pattern: [a-zA-Z][-a-zA-Z0-9]*|arn:[-a-zA-Z0-9:/._+]*" puts "Invalid stack name: #{stack_name}" puts "Full error message: #{e.}" exit 1 else raise # re-raise exception because unsure what other errors can happen end end exist end |
#stack_in_progress?(stack_name) ⇒ Boolean
All CloudFormation states listed here: docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-describing-stacks.html
Returns resp so we can use it to grab data about the stack without calling api again.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/jets/aws_services/stack_status.rb', line 31 def stack_in_progress?(stack_name) return true if !stack_exists?(stack_name) # Assumes stack exists resp = cfn.describe_stacks(stack_name: stack_name) status = resp.stacks[0].stack_status if status =~ /_IN_PROGRESS$/ puts "The '#{stack_name}' stack status is #{status}. " \ "Please wait until the stack is ready and try again.".colorize(:red) exit 0 elsif resp.stacks[0].outputs.empty? && status != 'ROLLBACK_COMPLETE' # This Happens when the miminal stack fails at the very beginning. # There is no s3 bucket at all. User should delete the stack. puts "The minimal stack failed to create. Please delete the stack first and try again. " \ "You can delete the CloudFormation stack or use the `jets delete` command" exit 0 else true end end |