From 0bb56a30fca1731b31b21486e9865248c8eee3ed Mon Sep 17 00:00:00 2001 From: Modular Magician Date: Mon, 30 Mar 2020 18:42:31 +0000 Subject: [PATCH] Add deadLetterPolicy to Pub/Sub Subscription resource (#3305) * Add deadLetterPolicy to Pub/Sub subscription resource * fix: disable allow_empty_objects, fix docstring, add example * fix: set max_delivery_attempts * fix: block and topic name Signed-off-by: Modular Magician --- docs/resources/google_pubsub_subscription.md | 6 +++ docs/resources/google_pubsub_subscriptions.md | 1 + .../subscription_dead_letter_policy.rb | 37 +++++++++++++++++++ libraries/google_pubsub_subscription.rb | 3 ++ libraries/google_pubsub_subscriptions.rb | 2 + 5 files changed, 49 insertions(+) create mode 100644 libraries/google/pubsub/property/subscription_dead_letter_policy.rb diff --git a/docs/resources/google_pubsub_subscription.md b/docs/resources/google_pubsub_subscription.md index 783017891..de1c1aab6 100644 --- a/docs/resources/google_pubsub_subscription.md +++ b/docs/resources/google_pubsub_subscription.md @@ -49,6 +49,12 @@ Properties that can be accessed from the `google_pubsub_subscription` resource: * `ttl`: Specifies the "time-to-live" duration for an associated resource. The resource expires if it is not active for a period of ttl. If ttl is not set, the associated resource never expires. A duration in seconds with up to nine fractional digits, terminated by 's'. Example - "3.5s". + * `dead_letter_policy`: A policy that specifies the conditions for dead lettering messages in this subscription. If dead_letter_policy is not set, dead lettering is disabled. The Cloud Pub/Sub service account associated with this subscriptions's parent project (i.e., service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have permission to Acknowledge() messages on this subscription. + + * `dead_letter_topic`: The name of the topic to which dead letter messages should be published. Format is `projects/{project}/topics/{topic}`. The Cloud Pub/Sub service\naccount associated with the enclosing subscription's parent project (i.e., service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have permission to Publish() to this topic. The operation will fail if the topic does not exist. Users should ensure that there is a subscription attached to this topic since messages published to a topic with no subscriptions are lost. + + * `max_delivery_attempts`: The maximum number of delivery attempts for any message. The value must be between 5 and 100. The number of delivery attempts is defined as 1 + (the sum of number of NACKs and number of times the acknowledgement deadline has been exceeded for the message). A NACK is any call to ModifyAckDeadline with a 0 deadline. Note that client libraries may automatically extend ack_deadlines. This field will be honored on a best effort basis. If this parameter is 0, a default value of 5 is used. + ## GCP Permissions diff --git a/docs/resources/google_pubsub_subscriptions.md b/docs/resources/google_pubsub_subscriptions.md index d95d60dd4..b2171e346 100644 --- a/docs/resources/google_pubsub_subscriptions.md +++ b/docs/resources/google_pubsub_subscriptions.md @@ -31,6 +31,7 @@ See [google_pubsub_subscription.md](google_pubsub_subscription.md) for more deta * `message_retention_durations`: an array of `google_pubsub_subscription` message_retention_duration * `retain_acked_messages`: an array of `google_pubsub_subscription` retain_acked_messages * `expiration_policies`: an array of `google_pubsub_subscription` expiration_policy + * `dead_letter_policies`: an array of `google_pubsub_subscription` dead_letter_policy ## Filter Criteria This resource supports all of the above properties as filter criteria, which can be used diff --git a/libraries/google/pubsub/property/subscription_dead_letter_policy.rb b/libraries/google/pubsub/property/subscription_dead_letter_policy.rb new file mode 100644 index 000000000..23fd1820e --- /dev/null +++ b/libraries/google/pubsub/property/subscription_dead_letter_policy.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: false + +# ---------------------------------------------------------------------------- +# +# *** AUTO GENERATED CODE *** AUTO GENERATED CODE *** +# +# ---------------------------------------------------------------------------- +# +# This file is automatically generated by Magic Modules and manual +# changes will be clobbered when the file is regenerated. +# +# Please read more about how to change this file in README.md and +# CONTRIBUTING.md located at the root of this package. +# +# ---------------------------------------------------------------------------- +module GoogleInSpec + module Pubsub + module Property + class SubscriptionDeadLetterPolicy + attr_reader :dead_letter_topic + + attr_reader :max_delivery_attempts + + def initialize(args = nil, parent_identifier = nil) + return if args.nil? + @parent_identifier = parent_identifier + @dead_letter_topic = args['deadLetterTopic'] + @max_delivery_attempts = args['maxDeliveryAttempts'] + end + + def to_s + "#{@parent_identifier} SubscriptionDeadLetterPolicy" + end + end + end + end +end diff --git a/libraries/google_pubsub_subscription.rb b/libraries/google_pubsub_subscription.rb index 15b08f9cd..1b3147395 100644 --- a/libraries/google_pubsub_subscription.rb +++ b/libraries/google_pubsub_subscription.rb @@ -14,6 +14,7 @@ # # ---------------------------------------------------------------------------- require 'gcp_backend' +require 'google/pubsub/property/subscription_dead_letter_policy' require 'google/pubsub/property/subscription_expiration_policy' require 'google/pubsub/property/subscription_push_config' require 'google/pubsub/property/subscription_push_config_oidc_token' @@ -33,6 +34,7 @@ class PubsubSubscription < GcpResourceBase attr_reader :message_retention_duration attr_reader :retain_acked_messages attr_reader :expiration_policy + attr_reader :dead_letter_policy def initialize(params) super(params.merge({ use_http_transport: true })) @@ -50,6 +52,7 @@ def parse @message_retention_duration = @fetched['messageRetentionDuration'] @retain_acked_messages = @fetched['retainAckedMessages'] @expiration_policy = GoogleInSpec::Pubsub::Property::SubscriptionExpirationPolicy.new(@fetched['expirationPolicy'], to_s) + @dead_letter_policy = GoogleInSpec::Pubsub::Property::SubscriptionDeadLetterPolicy.new(@fetched['deadLetterPolicy'], to_s) end def exists? diff --git a/libraries/google_pubsub_subscriptions.rb b/libraries/google_pubsub_subscriptions.rb index d3c35ebb8..e3800e0c0 100644 --- a/libraries/google_pubsub_subscriptions.rb +++ b/libraries/google_pubsub_subscriptions.rb @@ -31,6 +31,7 @@ class PubsubSubscriptions < GcpResourceBase filter_table_config.add(:message_retention_durations, field: :message_retention_duration) filter_table_config.add(:retain_acked_messages, field: :retain_acked_messages) filter_table_config.add(:expiration_policies, field: :expiration_policy) + filter_table_config.add(:dead_letter_policies, field: :dead_letter_policy) filter_table_config.connect(self, :table) @@ -78,6 +79,7 @@ def transformers 'messageRetentionDuration' => ->(obj) { return :message_retention_duration, obj['messageRetentionDuration'] }, 'retainAckedMessages' => ->(obj) { return :retain_acked_messages, obj['retainAckedMessages'] }, 'expirationPolicy' => ->(obj) { return :expiration_policy, GoogleInSpec::Pubsub::Property::SubscriptionExpirationPolicy.new(obj['expirationPolicy'], to_s) }, + 'deadLetterPolicy' => ->(obj) { return :dead_letter_policy, GoogleInSpec::Pubsub::Property::SubscriptionDeadLetterPolicy.new(obj['deadLetterPolicy'], to_s) }, } end