class OpenStax::Aws::ChangeSet

Attributes

client[R]

Public Class Methods

new(client:) click to toggle source
# File lib/openstax/aws/change_set.rb, line 6
def initialize(client:)
  @client = client
end

Public Instance Methods

create(options:) click to toggle source
# File lib/openstax/aws/change_set.rb, line 10
def create(options:)
  create_change_set_output = client.create_change_set(options)
  @id = create_change_set_output.id

  wait_message = OpenStax::Aws::WaitMessage.new(
    message: "Waiting for change set #{id} to be ready"
  )

  begin
    client.wait_until(:change_set_create_complete, change_set_name: id) do |w|
      w.delay = OpenStax::Aws.configuration.stack_waiter_delay
      w.before_attempt do |attempts, response|
        wait_message.say_it
      end
    end
  rescue Aws::Waiters::Errors::FailureStateError => ee
    if ee.response&.status_reason =~ /didn't contain changes/
      logger.info("No changes detected, deleting change set")
      delete
      return self
    else
      logger.error(ee.response.status_reason)
      raise
    end
  rescue Aws::Waiters::Errors::WaiterFailed => ee
    logger.error("An error occurred: #{ee.message}")
    raise
  end

  @description = client.describe_change_set(change_set_name: id)

  self
end
created?() click to toggle source
# File lib/openstax/aws/change_set.rb, line 44
def created?
  @description.present?
end
delete() click to toggle source
# File lib/openstax/aws/change_set.rb, line 48
def delete
  client.delete_change_set(change_set_name: id)
end
description() click to toggle source
# File lib/openstax/aws/change_set.rb, line 60
def description
  @description || raise("Description not set; create failed?")
end
execute() click to toggle source
# File lib/openstax/aws/change_set.rb, line 52
def execute
  client.execute_change_set(change_set_name: id)
end
has_change_caused_by?(entity_name) click to toggle source
# File lib/openstax/aws/change_set.rb, line 64
def has_change_caused_by?(entity_name)
  description.changes.any? do |change|
    change.resource_change.details.any? do |detail|
      detail.causing_entity == entity_name
    end
  end
end
id() click to toggle source
# File lib/openstax/aws/change_set.rb, line 56
def id
  @id || raise("ID isn't yet known!")
end
parameter_value(parameter_name) click to toggle source
# File lib/openstax/aws/change_set.rb, line 72
def parameter_value(parameter_name)
  description.parameters.select do |parameter|
    parameter.parameter_key == parameter_name
  end.first.parameter_value
end
resource_change_summaries() click to toggle source
# File lib/openstax/aws/change_set.rb, line 78
def resource_change_summaries
  summaries = description.changes.flat_map(&:resource_change).map do |change|
    summary = "#{change.action} '#{change.logical_resource_id}' (#{change.resource_type})"

    case change.action
    when "Modify"
      causes = change.details.map{|detail| [detail.change_source, detail.causing_entity].compact.join(":")}.join(", ")

      summary = "#{summary}: Replacement=#{change.replacement}; Due to change in #{change.scope}; Causes: #{causes}"
    end

    summary
  end
end

Protected Instance Methods

logger() click to toggle source
# File lib/openstax/aws/change_set.rb, line 95
def logger
  OpenStax::Aws.configuration.logger
end