from:
  - gravitee-io/oss/am/mongodb
  - elastic/elasticsearch/standalone
vars:
  clusterName:
    default: "gravitee"
    description: "Name of the Kind cluster"
  imagePrefix:
    default: "graviteeio"
    description: "Docker image prefix for all Gamma and APIM components"
  imageTag:
    default: "latest"
    description: "Docker image tag for all Gamma and APIM components"
  helmVersion:
    default: ""
    description: "Helm chart version constraint"
  apiUrl:
    default: "http://apim-api.gravitee.gck.local"
    description: "Management API base URL used by all UIs"
  consoleUrl:
    default: "http://apim-console.gravitee.gck.local"
    description: "APIM Console URL"
  portalUrl:
    default: "http://apim-portal.gravitee.gck.local"
    description: "APIM Portal URL"
  gammaConsoleUrl:
    default: "http://gamma-console.gravitee.gck.local"
    description: "Gamma Console URL"
  gravitee-io:
    oss:
      am:
        base:
          imageTag:
            default: "latest"
  elastic:
    elasticsearch:
      standalone:
        imageTag:
          default: "9.3.1"
        imageRepository:
          default: "docker.elastic.co/elasticsearch/elasticsearch"
features:
  gateway:
    enabled: true
  dns:
    enabled: true
images:
  preload:
    refs:
      - "{{ .imagePrefix }}/apim-gateway:{{ .imageTag }}-debian"
      - "{{ .imagePrefix }}/apim-management-api:{{ .imageTag }}-debian"
      - "{{ .imagePrefix }}/apim-management-ui:{{ .imageTag }}"
      - "{{ .imagePrefix }}/apim-portal-ui:{{ .imageTag }}"
      - "{{ .imagePrefix }}/gamma-ui:{{ .imageTag }}"
kind:
  name: "{{ .clusterName }}"
  nodes:
    - role: control-plane
      extraPortMappings:
        - containerPort: 30080
          hostPort: 30080
        - containerPort: 30081
          hostPort: 30081
        - containerPort: 30082
          hostPort: 30082
        - containerPort: 30083
          hostPort: 30083
        - containerPort: 30084
          hostPort: 30084
        - containerPort: 30085
          hostPort: 30085
        - containerPort: 30086
          hostPort: 30086
components:
  - name: license
    type: k8s
    namespace: gravitee
    k8s:
      secrets:
        - name: gravitee-license
          fromFile: '{{ env "HOME" }}/opt/gravitee/license.key'
          onMissing: ignore
  - name: edge-gateway
    type: k8s
    namespace: gravitee
    k8s:
      manifests:
        - apiVersion: v1
          kind: Service
          metadata:
            name: edge-gateway
          spec:
            type: NodePort
            ports:
              - port: 18093
                targetPort: 18093
                nodePort: 30086
                name: edge
            selector:
              app.kubernetes.io/instance: gamma
              app.kubernetes.io/component: gateway
  - name: gateway-routes
    type: k8s
    namespace: gravitee
    requires:
      - component: am
      - component: gamma
    k8s:
      manifests:
        - apiVersion: gateway.networking.k8s.io/v1
          kind: HTTPRoute
          metadata:
            name: gamma-console
          spec:
            parentRefs:
              - name: gck-gateway
                namespace: default
            hostnames:
              - gamma-console.gravitee.gck.local
            rules:
              - backendRefs:
                  - name: gamma-apim-gamma
                    port: 8005
        - apiVersion: gateway.networking.k8s.io/v1
          kind: HTTPRoute
          metadata:
            name: apim-console
          spec:
            parentRefs:
              - name: gck-gateway
                namespace: default
            hostnames:
              - apim-console.gravitee.gck.local
            rules:
              - backendRefs:
                  - name: gamma-apim-ui
                    port: 8002
        - apiVersion: gateway.networking.k8s.io/v1
          kind: HTTPRoute
          metadata:
            name: apim-portal
          spec:
            parentRefs:
              - name: gck-gateway
                namespace: default
            hostnames:
              - apim-portal.gravitee.gck.local
            rules:
              - backendRefs:
                  - name: gamma-apim-portal
                    port: 8003
        - apiVersion: gateway.networking.k8s.io/v1
          kind: HTTPRoute
          metadata:
            name: apim-api
          spec:
            parentRefs:
              - name: gck-gateway
                namespace: default
            hostnames:
              - apim-api.gravitee.gck.local
            rules:
              - backendRefs:
                  - name: gamma-apim-api
                    port: 83
        - apiVersion: gateway.networking.k8s.io/v1
          kind: HTTPRoute
          metadata:
            name: apim-gateway
          spec:
            parentRefs:
              - name: gck-gateway
                namespace: default
            hostnames:
              - apim-gateway.gravitee.gck.local
            rules:
              - backendRefs:
                  - name: gamma-apim-gateway
                    port: 82
        - apiVersion: gateway.networking.k8s.io/v1
          kind: HTTPRoute
          metadata:
            name: edge-gateway
          spec:
            parentRefs:
              - name: gck-gateway
                namespace: default
            hostnames:
              - edge.gravitee.gck.local
            rules:
              - backendRefs:
                  - name: edge-gateway
                    port: 18093
        - apiVersion: gateway.networking.k8s.io/v1
          kind: HTTPRoute
          metadata:
            name: am-gateway
          spec:
            parentRefs:
              - name: gck-gateway
                namespace: default
            hostnames:
              - am-gateway.gravitee.gck.local
            rules:
              - backendRefs:
                  - name: am-gateway
                    port: 82
        - apiVersion: gateway.networking.k8s.io/v1
          kind: HTTPRoute
          metadata:
            name: am-console
          spec:
            parentRefs:
              - name: gck-gateway
                namespace: default
            hostnames:
              - am-console.gravitee.gck.local
            rules:
              - backendRefs:
                  - name: am-management-ui
                    port: 8002
        - apiVersion: gateway.networking.k8s.io/v1
          kind: HTTPRoute
          metadata:
            name: am-api
          spec:
            parentRefs:
              - name: gck-gateway
                namespace: default
            hostnames:
              - am-api.gravitee.gck.local
            rules:
              - backendRefs:
                  - name: am-management-api
                    port: 83
  - name: am
    helm:
      values:
        ui:
          baseURL: http://am-api.gravitee.gck.local/management
        api:
          gateway:
            url: http://am-gateway.gravitee.gck.local
  - name: elasticsearch
    namespace: gravitee
    helm:
      values:
        service:
          type: ClusterIP
          nodePort: null
  - name: gamma
    type: helm
    namespace: gravitee
    conditions:
      ready: true
    timeout: 15m
    selector:
      matchLabels:
        app.kubernetes.io/instance: gamma
    requires:
      - component: tls-server
      - component: am
        conditions:
          ready: true
        selector:
          matchLabels:
            app.kubernetes.io/instance: am
        timeout: 15m
      - component: elasticsearch
        conditions:
          ready: true
        selector:
          matchLabels:
            app: elasticsearch-master
        timeout: 15m
    helm:
      chart: graviteeio/apim
      version: "{{ .helmVersion }}"
      values:
        license:
          name: gravitee-license
        secrets:
          kubernetes:
            enabled: true
        gamma:
          enabled: true
        gammaUi:
          enabled: true
          image:
            repository: "{{ .imagePrefix }}/gamma-ui"
            tag: "{{ .imageTag }}"
          app:
            gammaBaseURL: "{{ .apiUrl }}/gamma"
          ingress:
            enabled: false
          env:
            - name: GAMMA_API_URL
              value: "{{ .apiUrl }}/gamma/"
            - name: GAMMA_BASE_HREF
              value: "/"
          service:
            type: NodePort
            nodePort: 30085
        es:
          endpoints:
            - http://elasticsearch-master:9200
        mongo:
          uri: mongodb://mongodb:27017/apim?connectTimeoutMS=30000
        ui:
          image:
            repository: "{{ .imagePrefix }}/apim-management-ui"
            tag: "{{ .imageTag }}"
          ingress:
            enabled: false
          service:
            type: NodePort
            nodePort: 30080
          baseURL: "{{ .apiUrl }}/management"
          env:
            - name: CONSOLE_BASE_HREF
              value: /
        portal:
          image:
            repository: "{{ .imagePrefix }}/apim-portal-ui"
            tag: "{{ .imageTag }}"
          enabled: true
          ingress:
            enabled: false
          service:
            type: NodePort
            nodePort: 30081
          baseURL: "{{ .apiUrl }}/portal"
        gateway:
          image:
            repository: "{{ .imagePrefix }}/apim-gateway"
            tag: "{{ .imageTag }}-debian"
          ingress:
            enabled: false
          ingressController:
            enabled: true
          servers:
            - type: http
              port: 8082
              service:
                type: NodePort
                nodePort: 30082
                externalPort: 82
              ingress:
                enabled: false
            - type: http
              port: 8084
              service:
                type: NodePort
                nodePort: 30084
                externalPort: 84
              ingress:
                enabled: false
              ssl:
                keystore:
                  type: pem
                  secret: secret://kubernetes/tls-server
                clientAuth: request
          service:
            type: NodePort
          edge:
            enabled: true
            server:
              port: 18093
          services:
            sync:
              kubernetes:
                enabled: true
            edge:
              enabled: true
              service:
                externalPort: 18093
                internalPort: 18093
              ingress:
                enabled: false
          reporters:
            elasticsearch:
              enabled: true
          extraVolumes: |
            - name: graviteeio-license
              secret:
                secretName: gravitee-license
          extraVolumeMounts: |
            - name: graviteeio-license
              mountPath: /opt/graviteeio-gateway/license
              readOnly: true
        api:
          image:
            repository: "{{ .imagePrefix }}/apim-management-api"
            tag: "{{ .imageTag }}-debian"
          ingress:
            enabled: false
          service:
            type: NodePort
            nodePort: 30083
          gamma:
            enabled: true
          env:
            - name: MANAGEMENT_MONGODB_TRANSACTIONAL
              value: "false"
            - name: gravitee_gamma_enabled
              value: "true"
            - name: portal.entrypoint
              value: "http://apim-gateway.gravitee.gck.local/"
          extraVolumes: |
            - name: graviteeio-license
              secret:
                secretName: gravitee-license
          extraVolumeMounts: |
            - name: graviteeio-license
              mountPath: /opt/graviteeio-management-api/license
              readOnly: true
        installation:
          api:
            url: "{{ .apiUrl }}"
            proxyPath:
              management: /management
              portal: /portal
              gamma: /gamma
          standalone:
            console:
              url: "{{ .consoleUrl }}"
            portal:
              url: "{{ .portalUrl }}"
            gamma-console:
              url: "{{ .gammaConsoleUrl }}"
