From 312116c10103a8f09e2cba9038af5a73857ffa49 Mon Sep 17 00:00:00 2001
From: Mike Gent <gent@vexpanse.net>
Date: Sun, 3 Jun 2018 17:52:59 -0500
Subject: [PATCH] Add passive mode exchange declaration option to amqp consumer
 input (#3995)

---
 etc/telegraf.conf                             |  2 ++
 plugins/inputs/amqp_consumer/README.md        |  2 ++
 plugins/inputs/amqp_consumer/amqp_consumer.go | 34 ++++++++++++++-----
 3 files changed, 29 insertions(+), 9 deletions(-)

diff --git a/etc/telegraf.conf b/etc/telegraf.conf
index 12baeb98..41f244ec 100644
--- a/etc/telegraf.conf
+++ b/etc/telegraf.conf
@@ -3036,6 +3036,8 @@
 #   url = "amqp://localhost:5672/influxdb"
 #   ## AMQP exchange
 #   exchange = "telegraf"
+#   ## Exchange passive mode
+#   exchange_passive = false
 #   ## AMQP queue name
 #   queue = "telegraf"
 #   ## Binding Key
diff --git a/plugins/inputs/amqp_consumer/README.md b/plugins/inputs/amqp_consumer/README.md
index a14e2c8b..c10a4410 100644
--- a/plugins/inputs/amqp_consumer/README.md
+++ b/plugins/inputs/amqp_consumer/README.md
@@ -19,6 +19,8 @@ The following defaults are known to work with RabbitMQ:
   url = "amqp://localhost:5672/influxdb"
   ## AMQP exchange
   exchange = "telegraf"
+  ## Exchange passive mode
+  exchange_passive = false
   ## AMQP queue name
   queue = "telegraf"
   ## Binding Key
diff --git a/plugins/inputs/amqp_consumer/amqp_consumer.go b/plugins/inputs/amqp_consumer/amqp_consumer.go
index 48458a0b..6ed79f6c 100644
--- a/plugins/inputs/amqp_consumer/amqp_consumer.go
+++ b/plugins/inputs/amqp_consumer/amqp_consumer.go
@@ -20,6 +20,8 @@ type AMQPConsumer struct {
 	URL string
 	// AMQP exchange
 	Exchange string
+	// Exchange passive mode
+	ExchangePassive bool
 	// Queue Name
 	Queue string
 	// Binding Key
@@ -58,6 +60,8 @@ func (a *AMQPConsumer) SampleConfig() string {
   url = "amqp://localhost:5672/influxdb"
   ## AMQP exchange
   exchange = "telegraf"
+  ## Exchange passive mode
+  exchange_passive = false
   ## AMQP queue name
   queue = "telegraf"
   ## Binding Key
@@ -174,15 +178,27 @@ func (a *AMQPConsumer) connect(amqpConf *amqp.Config) (<-chan amqp.Delivery, err
 		return nil, fmt.Errorf("Failed to open a channel: %s", err)
 	}
 
-	err = ch.ExchangeDeclare(
-		a.Exchange, // name
-		"topic",    // type
-		true,       // durable
-		false,      // auto-deleted
-		false,      // internal
-		false,      // no-wait
-		nil,        // arguments
-	)
+	if a.ExchangePassive == true {
+		err = ch.ExchangeDeclarePassive(
+			a.Exchange, // name
+			"topic",    // type
+			true,       // durable
+			false,      // auto-deleted
+			false,      // internal
+			false,      // no-wait
+			nil,        // arguments
+		)
+	} else {
+		err = ch.ExchangeDeclare(
+			a.Exchange, // name
+			"topic",    // type
+			true,       // durable
+			false,      // auto-deleted
+			false,      // internal
+			false,      // no-wait
+			nil,        // arguments
+		)
+	}
 	if err != nil {
 		return nil, fmt.Errorf("Failed to declare an exchange: %s", err)
 	}
-- 
GitLab