module CfnStatus::AwsService

Public Instance Methods

cfn() click to toggle source
# File lib/cfn_status/aws_service.rb, line 5
def cfn
  @cfn ||= Aws::CloudFormation::Client.new
end
find_stack(stack_name) click to toggle source
# File lib/cfn_status/aws_service.rb, line 35
def find_stack(stack_name)
  resp = cfn.describe_stacks(stack_name: stack_name)
  resp.stacks.first
rescue Aws::CloudFormation::Errors::ValidationError => e
  # example: Stack with id demo-web does not exist
  if e.message =~ /Stack with/ && e.message =~ /does not exist/
    nil
  else
    raise
  end
end
rollback_complete?(stack) click to toggle source
# File lib/cfn_status/aws_service.rb, line 47
def rollback_complete?(stack)
  stack&.stack_status == 'ROLLBACK_COMPLETE'
end
stack_exists?(stack_name) click to toggle source
# File lib/cfn_status/aws_service.rb, line 9
def stack_exists?(stack_name)
  return true if ENV['TEST']
  return false if @options[:noop]

  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
    cfn.describe_stacks(stack_name: stack_name)
    exist = true
  rescue Aws::CloudFormation::Errors::ValidationError => e
    if e.message =~ /does not exist/
      exist = false
    elsif e.message.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.message}"
      exit 1
    else
      raise # re-raise exception  because unsure what other errors can happen
    end
  end
  exist
end