Source

Implementation

Provisioner Type

Resource Type

Flavor

Tool

rabbitmq-dapr-pubsub

Generates a Dapr PubSub Component pointing to a RabbitMQ StatefulSet.

type: dapr-pubsub
expected_outputs:
  - name

10-rabbitmq-dapr-pubsub.provisioners.yaml (view on GitHub) :

- uri: template://community-provisioners/rabbitmq-dapr-pubsub
  type: dapr-pubsub
  description: Generates a Dapr PubSub Component pointing to a RabbitMQ StatefulSet.
  init: |
    port: 5672
    managementPort: 15672    
  state: |
    service: rabbitmq-{{ .SourceWorkload }}-{{ substr 0 8 .Guid | lower }}    
  outputs: |
    name: {{ .State.service }}    
  expected_outputs:
    - name
  manifests: |
    - apiVersion: dapr.io/v1alpha1
      kind: Component
      metadata:
        name: {{ .State.service }}
        {{ if ne .Namespace "" }}
        namespace: {{ .Namespace }}
        {{ end }}
      spec:
        type: pubsub.rabbitmq
        version: v1
        metadata:
        - name: host
          value: "amqp://{{ .State.service }}:{{ .Init.port }}"
    - apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: {{ .State.service }}
        {{ if ne .Namespace "" }}
        namespace: {{ .Namespace }}
        {{ end }}
        annotations:
          k8s.score.dev/source-workload: {{ .SourceWorkload }}
          k8s.score.dev/resource-uid: {{ .Uid }}
          k8s.score.dev/resource-guid: {{ .Guid }}
        labels:
          app.kubernetes.io/managed-by: score-k8s
          app.kubernetes.io/name: {{ .State.service }}
          app.kubernetes.io/instance: {{ .State.service }}
      spec:
        serviceName: {{ .State.service }}
        replicas: 1
        selector:
          matchLabels:
            app.kubernetes.io/instance: {{ .State.service }}
        template:
          metadata:
            labels:
              app.kubernetes.io/managed-by: score-k8s
              app.kubernetes.io/name: {{ .State.service }}
              app.kubernetes.io/instance: {{ .State.service }}
          spec:
            containers:
              - name: rabbitmq
                image: mirror.gcr.io/rabbitmq:3-management-alpine
                ports:
                  - name: amqp
                    containerPort: {{ .Init.port }}
                  - name: management
                    containerPort: {{ .Init.managementPort }}
                volumeMounts:
                  - name: data
                    mountPath: /var/lib/rabbitmq
                readinessProbe:
                  exec:
                    command:
                      - rabbitmq-diagnostics
                      - -q
                      - check_port_connectivity
                  periodSeconds: 3
                  initialDelaySeconds: 30
                  timeoutSeconds: 5
        volumeClaimTemplates:
          - metadata:
              name: data
            spec:
              accessModes: ["ReadWriteOnce"]
              resources:
                requests:
                  storage: 3Gi
    - apiVersion: v1
      kind: Service
      metadata:
        name: {{ .State.service }}
        {{ if ne .Namespace "" }}
        namespace: {{ .Namespace }}
        {{ end }}
        annotations:
          k8s.score.dev/source-workload: {{ .SourceWorkload }}
          k8s.score.dev/resource-uid: {{ .Uid }}
          k8s.score.dev/resource-guid: {{ .Guid }}
        labels:
          app.kubernetes.io/managed-by: score-k8s
          app.kubernetes.io/name: {{ .State.service }}
          app.kubernetes.io/instance: {{ .State.service }}
      spec:
        ports:
          - port: {{ .Init.port }}
            targetPort: {{ .Init.port }}
            name: amqp
          - port: {{ .Init.managementPort }}
            targetPort: {{ .Init.managementPort }}
            name: management
        selector:
          app.kubernetes.io/instance: {{ .State.service }}
        type: ClusterIP