class Terraforming::Resource::SNSTopicSubscription

Public Class Methods

new(client) click to toggle source
# File lib/terraforming/resource/sns_topic_subscription.rb, line 14
def initialize(client)
  @client = client
end
tf(client: Aws::SNS::Client.new) click to toggle source
# File lib/terraforming/resource/sns_topic_subscription.rb, line 6
def self.tf(client: Aws::SNS::Client.new)
  self.new(client).tf
end
tfstate(client: Aws::SNS::Client.new) click to toggle source
# File lib/terraforming/resource/sns_topic_subscription.rb, line 10
def self.tfstate(client: Aws::SNS::Client.new)
  self.new(client).tfstate
end

Public Instance Methods

tf() click to toggle source
# File lib/terraforming/resource/sns_topic_subscription.rb, line 18
def tf
  apply_template(@client, "tf/sns_topic_subscription")
end
tfstate() click to toggle source
# File lib/terraforming/resource/sns_topic_subscription.rb, line 22
def tfstate
  subscriptions.reject { |x| x["Protocol"].include?("email") }
               .inject({}) do |resources, subscription|
    attributes = {
      "id"                              => subscription["SubscriptionArn"],
      "topic_arn"                       => subscription["TopicArn"],
      "protocol"                        => subscription["Protocol"],
      "endpoint"                        => subscription["Endpoint"],
      "raw_message_delivery"            =>
        subscription.key?("RawMessageDelivery") ? subscription["RawMessageDelivery"] : "false",
      "confirmation_timeout_in_minutes" =>
        subscription.key?("ConfirmationTimeoutInMinutes") ? subscription["ConfirmationTimeoutInMinutes"] : "1",
      "endpoint_auto_confirms"          =>
        subscription.key?("EndpointAutoConfirms") ? subscription["EndpointAutoConfirms"] : "false"
    }
    resources["aws_sns_topic_subscription.#{module_name_of(subscription)}"] = {
      "type" => "aws_sns_topic_subscription",
      "primary" => {
        "id"         => subscription["SubscriptionArn"],
        "attributes" => attributes
      }
    }

    resources
  end
end

Private Instance Methods

module_name_of(subscription) click to toggle source
# File lib/terraforming/resource/sns_topic_subscription.rb, line 78
def module_name_of(subscription)
  normalize_module_name(subscription["SubscriptionArn"].split(":").last)
end
subscription_arns() click to toggle source
# File lib/terraforming/resource/sns_topic_subscription.rb, line 64
def subscription_arns
  token = ""
  arns = []

  loop do
    resp = @client.list_subscriptions(next_token: token)
    arns += resp.subscriptions.map(&:subscription_arn).flatten
    token = resp.next_token
    break if token.nil?
  end

  arns
end
subscriptions() click to toggle source
# File lib/terraforming/resource/sns_topic_subscription.rb, line 51
def subscriptions
  subscription_arns.map do |subscription_arn|
    # check explicitly for an issue with some subscriptions that returns ARN=PendingConfirmation
    next if subscription_arn == "PendingConfirmation"

    attributes = @client.get_subscription_attributes({
      subscription_arn: subscription_arn,
    }).attributes
    attributes["SubscriptionArn"] = subscription_arn
    attributes
  end.compact
end