Class: LonoCfn::Preview

Inherits:
Base
  • Object
show all
Includes:
AwsServices
Defined in:
lib/lono-cfn/preview.rb

Overview

Inherit from Base because the initializer is the same

Instance Method Summary collapse

Methods included from AwsServices

#cfn, #stack_exists?, #testing_update?

Methods inherited from Base

#check_files, #check_for_errors, #convention_path, #detect_format, #exist_unless_updatable, #generate_all, #generate_params, #generate_templates, #get_source_path, #initialize, #quit, #stack_status

Methods included from Util

#are_you_sure?

Constructor Details

This class inherits a constructor from LonoCfn::Base

Instance Method Details

#change_set_nameObject

generates a change set name



88
89
90
# File 'lib/lono-cfn/preview.rb', line 88

def change_set_name
  @change_set_name ||= "changeset-#{Time.now.strftime("%Y%d%m%H%M%S")}"
end

#create_change_set(params) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/lono-cfn/preview.rb', line 22

def create_change_set(params)
  unless stack_exists?(@stack_name)
    puts "Cannot create a change set for the stack because the #{@stack_name} does not exists."
    return
  end
  exist_unless_updatable(stack_status(@stack_name))

  template_body = IO.read(@template_path)
  # begin
    cfn.create_change_set(
      change_set_name: change_set_name,
      stack_name: @stack_name,
      template_body: template_body,
      parameters: params
    )
  # rescue Aws::CloudFormation::Errors::ValidationError => e
  #   if e.message =~ /^Parameters: /
  #     puts "Error creating CloudFormation preview because invalid CloudFormation parameters. Full error message:".colorize(:red)
  #     puts e.message
  #     quit(1)
  #   else
  #     raise
  #   end
  # end
end

#delete_change_setObject



73
74
75
76
77
78
# File 'lib/lono-cfn/preview.rb', line 73

def delete_change_set
  cfn.delete_change_set(
    change_set_name: change_set_name,
    stack_name: @stack_name
  )
end

#display_change_setObject



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/lono-cfn/preview.rb', line 48

def display_change_set
  print "Generating CloudFormation Change Set for preview.."
  change_set = describe_change_set
  until change_set_finished?(change_set) do
    change_set = describe_change_set
    sleep 1
    print '.'
  end
  puts

  case change_set.status
  when "CREATE_COMPLETE"
    puts "CloudFormation preview for '#{@stack_name}' stack update. Changes:"
    change_set.changes.each do |change|
      display_change(change)
    end
  when "FAILED"
    puts "Fail to create a CloudFormation preview for '#{@stack_name}' stack update. Reason:".colorize(:red)
    puts change_set.status_reason
    quit(1)
  else
    raise "hell: never come here"
  end
end

#execute_change_setObject



80
81
82
83
84
85
# File 'lib/lono-cfn/preview.rb', line 80

def execute_change_set
  cfn.execute_change_set(
    change_set_name: change_set_name,
    stack_name: @stack_name
  )
end

#preview_change_set(params) ⇒ Object



17
18
19
20
# File 'lib/lono-cfn/preview.rb', line 17

def preview_change_set(params)
  create_change_set(params)
  display_change_set
end

#runObject

Override run from Base superclass, the run method is different enough with Preview



7
8
9
10
11
12
13
14
15
# File 'lib/lono-cfn/preview.rb', line 7

def run
  if @options[:noop]
    puts "NOOP CloudFormation preview for #{@stack_name} update"
  else
    params = generate_all
    preview_change_set(params)
    delete_change_set unless @options[:keep] # Clean up and delete the change set
  end
end