Class: ChangesetUtil

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

Instance Method Summary collapse

Instance Method Details

#changes_that_modify_or_remove(stack_name:, template_body:, parameters: []) ⇒ Object

hmmmm how to handle parameters? if it uses the previous value…?



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/changeset_util.rb', line 28

def changes_that_modify_or_remove(stack_name:,
                                  template_body:,
                                  parameters: [])

  change_set_name = "changeSet#{Time.now.to_i}"
  client_token = "clientToken#{Time.now.to_i}"

  create_change_set_response = cloudformation_client.create_change_set stack_name: stack_name,
                                                                       template_body: template_body,
                                                                       capabilities: %w(CAPABILITY_IAM),
                                                                       change_set_name: change_set_name,
                                                                       client_token: client_token,
                                                                       parameters: convert_parameters(parameters)

  change_set_id = create_change_set_response.id

  describe_change_set_response = describe_change_set change_set_id: change_set_id

  STDERR.puts describe_change_set_response.changes
  describe_change_set_response.changes.select { |change| %w(Modify Remove).include? change.resource_change.action }
end

#immutable_resources_that_would_change(stack_name:, template_body:) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/changeset_util.rb', line 6

def immutable_resources_that_would_change(stack_name:,
                                          template_body:)

  potentially_unsafe_changes = changes_that_modify_or_remove stack_name: stack_name,
                                                             template_body: template_body

  logical_resource_ids = potentially_unsafe_changes.map { |change| change.resource_change.logical_resource_id }

  logical_resource_ids.each do |logical_resource_id|
    tags = CloudFormationTagParser.new.tags cloudformation_json: template_body,
                                            logical_resource_id: logical_resource_id
    if tags.find { |tag| tag['Key'] == 'immutable' and tag['Value'] == 'true' }
      return logical_resource_id
    end
  end
  nil
end