Class: StackMaster::ChangeSet

Inherits:
Object
  • Object
show all
Defined in:
lib/stack_master/change_set.rb

Constant Summary collapse

END_STATES =
[
  'CREATE_COMPLETE',
  'DELETE_COMPLETE',
  'FAILED'
]

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(describe_change_set_response) ⇒ ChangeSet

Returns a new instance of ChangeSet.



40
41
42
# File 'lib/stack_master/change_set.rb', line 40

def initialize(describe_change_set_response)
  @response = describe_change_set_response
end

Class Method Details

.cfObject



36
37
38
# File 'lib/stack_master/change_set.rb', line 36

def self.cf
  StackMaster.cloud_formation_driver
end

.create(create_options) ⇒ Object



13
14
15
16
17
18
# File 'lib/stack_master/change_set.rb', line 13

def self.create(create_options)
  cf = StackMaster.cloud_formation_driver
  change_set_name = generate_change_set_name(create_options.fetch(:stack_name))
  change_set_id = cf.create_change_set(create_options.merge(change_set_name: change_set_name)).id
  find(change_set_id)
end

.delete(id) ⇒ Object



27
28
29
# File 'lib/stack_master/change_set.rb', line 27

def self.delete(id)
  cf.delete_change_set(change_set_name: id)
end

.execute(id, stack_name) ⇒ Object



31
32
33
34
# File 'lib/stack_master/change_set.rb', line 31

def self.execute(id, stack_name)
  cf.execute_change_set(change_set_name: id,
                        stack_name: stack_name)
end

.find(id) ⇒ Object



20
21
22
23
24
25
# File 'lib/stack_master/change_set.rb', line 20

def self.find(id)
  begin
    response = PagedResponseAccumulator.call(cf, :describe_change_set, { change_set_name: id }, :changes)
  end while !END_STATES.include?(response.status)
  new(response)
end

.generate_change_set_name(stack_name) ⇒ Object



9
10
11
# File 'lib/stack_master/change_set.rb', line 9

def self.generate_change_set_name(stack_name)
  stack_name + '-StackMaster' + Time.now.strftime('%Y-%m-%d-%H%M-%s')
end

Instance Method Details

#display(io) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
# File 'lib/stack_master/change_set.rb', line 44

def display(io)
  io.puts <<-EOL

========================================
Proposed change set:
EOL
  @response.changes.each do |change|
    display_resource_change(io, change.resource_change)
  end
io.puts "========================================"
end

#failed?Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/stack_master/change_set.rb', line 56

def failed?
  @response.status == 'FAILED'
end

#idObject



64
65
66
# File 'lib/stack_master/change_set.rb', line 64

def id
  @response.change_set_id
end

#status_reasonObject



60
61
62
# File 'lib/stack_master/change_set.rb', line 60

def status_reason
  @response.status_reason
end