From 758ee32aa9a60c74721eaaea65d42531770913b9 Mon Sep 17 00:00:00 2001 From: Vishal Date: Sun, 19 Apr 2020 21:53:27 +0530 Subject: [PATCH] External nats streaming (#1576) Support for external NATS streaming instead of the one deployed with Fission Co-authored-by: Shaun Cutts --- charts/README.md | 4 ++++ charts/fission-all/templates/deployment.yaml | 14 ++++++++++- charts/fission-all/templates/svc.yaml | 2 +- charts/fission-all/values.yaml | 19 +++++++++++++++ pkg/mqtrigger/messageQueue/nats/nats.go | 25 ++++++++++++++++---- 5 files changed, 58 insertions(+), 6 deletions(-) diff --git a/charts/README.md b/charts/README.md index cd66f4b2..e3a73582 100644 --- a/charts/README.md +++ b/charts/README.md @@ -89,8 +89,12 @@ Parameter | Description | Default `logger.fluentdImage` | Logger fluentbit image | `fluent/fluent-bit` `logger.fluentdImageTag` | Logger fluentbit image tag | `1.0.4` `nats.enabled` | Nats streaming enabled | `true` +`nats.external` | Use external Nats installation | `false` +`nats.hostaddress` | Address of NATS cluster | `nats-streaming:4222` `nats.authToken` | Nats streaming auth token | `defaultFissionAuthToken` `nats.clusterID` | Nats streaming clusterID | `fissionMQTrigger` +`nats.clientID` | Client name registered with nats streaming | `fission` +`nats.queueGroup` | Queue group registered with nats streaming | `fission-messageQueueNatsTrigger` `natsStreamingPort` | Nats streaming service port | `31316` `azureStorageQueue.enabled` | Azure storage account name | `false` `azureStorageQueue.key` | Azure storage account name | `""` diff --git a/charts/fission-all/templates/deployment.yaml b/charts/fission-all/templates/deployment.yaml index c2ef8591..f91cd93e 100644 --- a/charts/fission-all/templates/deployment.yaml +++ b/charts/fission-all/templates/deployment.yaml @@ -507,6 +507,7 @@ spec: # serviceAccountName: fission-svc {{- if .Values.nats.enabled }} +{{- if not .Values.nats.external }} --- apiVersion: apps/v1 kind: Deployment @@ -555,6 +556,7 @@ spec: {{- if .Values.extraCoreComponentPodConfig }} {{ toYaml .Values.extraCoreComponentPodConfig | indent 6 -}} {{- end }} +{{- end }} --- apiVersion: apps/v1 kind: Deployment @@ -585,8 +587,18 @@ spec: env: - name: MESSAGE_QUEUE_TYPE value: nats-streaming + - name: MESSAGE_QUEUE_CLUSTER_ID + value: {{ .Values.nats.clusterID }} + - name: MESSAGE_QUEUE_QUEUE_GROUP + value: {{ .Values.nats.queueGroup }} + - name: MESSAGE_QUEUE_CLIENT_ID + value: {{ .Values.nats.clientID }} - name: MESSAGE_QUEUE_URL - value: nats://{{ .Values.nats.authToken }}@nats-streaming:4222 + {{- if .Values.nats.authToken }} + value: nats://{{ .Values.nats.authToken }}@{{ .Values.nats.hostaddress }} + {{- else }} + value: nats://{{ .Values.nats.hostaddress }} + {{- end }} - name: TRACE_JAEGER_COLLECTOR_ENDPOINT value: "{{ .Values.traceCollectorEndpoint }}" - name: TRACING_SAMPLING_RATE diff --git a/charts/fission-all/templates/svc.yaml b/charts/fission-all/templates/svc.yaml index 8fab2cc2..28b1e709 100644 --- a/charts/fission-all/templates/svc.yaml +++ b/charts/fission-all/templates/svc.yaml @@ -41,7 +41,7 @@ spec: selector: svc: controller -{{- if .Values.nats.enabled }} +{{- if and .Values.nats.enabled (not .Values.nats.external) }} --- apiVersion: v1 kind: Service diff --git a/charts/fission-all/values.yaml b/charts/fission-all/values.yaml index ef521a16..e8cd87d0 100644 --- a/charts/fission-all/values.yaml +++ b/charts/fission-all/values.yaml @@ -29,6 +29,7 @@ controllerPort: 31313 routerPort: 31314 ## Port at which NATS streaming service should be exposed +## (only if nats enabled and not external) natsStreamingPort: 31316 ## Set to false if you create the namespaces manually @@ -142,10 +143,28 @@ router: ## Message queue trigger config ### NATS Streaming, enabled by default nats: + # whether or not to use NATS enabled: true + + # if true, don't install NATS, but + external: false + + # Address of NATS server (domain:port) + # change from default for external NATS + hostaddress: 'nats-streaming:4222' + + # Authorization token to use with NATS authToken: "defaultFissionAuthToken" + + # NATS streaming clusterID clusterID: "fissionMQTrigger" + # Client name registered with NATS streaming + clientID: "fission" + + # Queue group registered with NATS streaming + queueGroup: "fission-messageQueueNatsTrigger" + ## Azure-storage-queue: enable and configure the details azureStorageQueue: enabled: false diff --git a/pkg/mqtrigger/messageQueue/nats/nats.go b/pkg/mqtrigger/messageQueue/nats/nats.go index b4cacab9..87d707df 100644 --- a/pkg/mqtrigger/messageQueue/nats/nats.go +++ b/pkg/mqtrigger/messageQueue/nats/nats.go @@ -21,6 +21,7 @@ import ( "fmt" "io/ioutil" "net/http" + "os" "strings" nsUtil "github.com/nats-io/nats-streaming-server/util" @@ -34,16 +35,32 @@ import ( "github.com/fission/fission/pkg/utils" ) +var natsClusterID string +var natsQueueGroup string +var natsClientID string + func init() { + natsClusterID = os.Getenv("MESSAGE_QUEUE_CLUSTER_ID") + if natsClusterID == "" { + natsClusterID = defaultNatsClusterID + } + natsClientID = os.Getenv("MESSAGE_QUEUE_CLIENT_ID") + if natsClientID == "" { + natsClientID = defaultNatsClientID + } + natsQueueGroup = os.Getenv("MESSAGE_QUEUE_QUEUE_GROUP") + if natsQueueGroup == "" { + natsQueueGroup = defaultNatsQueueGroup + } factory.Register(fv1.MessageQueueTypeNats, &Factory{}) validator.Register(fv1.MessageQueueTypeNats, IsTopicValid) } const ( - natsClusterID = "fissionMQTrigger" - natsProtocol = "nats://" - natsClientID = "fission" - natsQueueGroup = "fission-messageQueueNatsTrigger" + natsProtocol = "nats://" + defaultNatsClusterID = "fissionMQTrigger" + defaultNatsClientID = "fission" + defaultNatsQueueGroup = "fission-messageQueueNatsTrigger" ) type (