Sha256: 2dcdfef1bcc87e39a4069be0ebd5ea6476b7c76db4c09a611f688165723f9ee7

Contents?: true

Size: 1.31 KB

Versions: 2

Compression:

Stored size: 1.31 KB

Contents

# frozen_string_literal: true
module AwsAsCode
  module Task
    class Update < Base
      include AwsAsCode::Concerns::AwsTaskHelpers

      def execute
        semaphore.wait(stack) do
          cloud_formation
            .update_stack stack_name: config.stack,
                          template_url: template_object.public_url,
                          parameters: parameters
        end
        exit_code_for_stack_state stack.reload
      end

      private

      def parameters
        existing_parameters + overridden_parameters
      end

      def existing_parameters
        keys = stack.parameters.map(&:parameter_key)
        (keys - removed_keys - overridden_keys).map do |key|
          {
            parameter_key: key,
            use_previous_value: true
          }
        end
      end

      def removed_keys
        config.stack_params.to_a.map do |pair|
          k, v = pair
          v.empty? ? k.to_s : nil
        end.compact
      end

      def overridden_keys
        overridden_parameters.map { |p| p[:parameter_key] }
      end

      def overridden_parameters
        config.stack_params.to_a.map do |pair|
          k, v = pair

          next nil if v.empty?

          {
            parameter_key: k.to_s,
            parameter_value: v
          }
        end.compact
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
aws_as_code-1.0.4 lib/aws_as_code/task/update.rb
aws_as_code-1.0.3 lib/aws_as_code/task/update.rb