You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by GitBox <gi...@apache.org> on 2018/12/26 10:03:55 UTC

[GitHub] adyachok closed pull request #4369: Airflow OpenShift cluster

adyachok closed pull request #4369: Airflow OpenShift cluster 
URL: https://github.com/apache/incubator-airflow/pull/4369
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/openshift/README.md b/openshift/README.md
new file mode 100644
index 0000000000..9083bc144e
--- /dev/null
+++ b/openshift/README.md
@@ -0,0 +1,48 @@
+### Installation
+
+This folder provides OpenShift template for Airflow cluster installation.
+The next cluster structure will be provided:
+  - Webserver and Scheduler same pod. Shared volume attached to **/usr/local/airflow/dags**. This way dags are synchronized between this webserver and scheduler containers.
+  - PostgresSQL (if it is already present in your project please comment it in the template, and update secret values)
+  - Redis
+  - Worker (1)
+  - Flower
+
+#### Creation
+
+To create cluster run next command:
+
+        oc process -f airflow.template.yml  | oc create -f - 
+
+#### Important Template Variables
+Before an installation start, please, put your variables into the template or you have to point them as CMD args.
+  1. PROJECT_NAME
+  2. APPLICATION_NAME A project can have multiple applications.
+
+
+#### Deletion
+
+Delete cluster with the next command:
+
+        oc delete secret fernet flower-auth postgresql redis && oc delete is airflow-base-image && oc delete all -l app=seism
+
+#### Caveats
+
+Fernet-key is a base64 encoded password required by scheduler. If you would like to change password, use next command to generate it:
+
+        import base64
+        from cryptography.fernet import Fernet
+
+
+        FERNET_KEY = Fernet.generate_key().decode()
+        FERNET_KEY = base64.b64decode(FERNET_KEY)
+
+Accordingly to the template OpenShift will generate scheduler and flower on different pods. You have to update airflow.cfg file to set proper flower uri:
+
+        # Celery Flower is a sweet UI for Celery. Airflow has a shortcut to start
+        # it `airflow flower`. This defines the IP that Celery Flower runs on
+        flower_host = flower
+
+
+#### Nice To See. TODO.
+airflow.cfg needs to be patched automatically.
diff --git a/openshift/airflow.template.yml b/openshift/airflow.template.yml
new file mode 100644
index 0000000000..ae36e9cc5b
--- /dev/null
+++ b/openshift/airflow.template.yml
@@ -0,0 +1,921 @@
+apiVersion: v1
+kind: Template
+metadata:
+  creationTimestamp: null
+  name: airflow-ephemeral-template
+objects:
+- apiVersion: v1
+  kind: DeploymentConfig
+  metadata:
+    annotations:
+      openshift.io/generated-by: OpenShiftNewApp
+    creationTimestamp: null
+    generation: 1
+    labels:
+      app: ${APPLICATION_NAME}
+    name: flower
+  spec:
+    replicas: 1
+    revisionHistoryLimit: 10
+    selector:
+      app: ${APPLICATION_NAME}
+      deploymentconfig: flower
+    strategy:
+      activeDeadlineSeconds: 21600
+      resources: {}
+      rollingParams:
+        intervalSeconds: 1
+        maxSurge: 25%
+        maxUnavailable: 25%
+        timeoutSeconds: 600
+        updatePeriodSeconds: 1
+      type: Rolling
+    template:
+      metadata:
+        annotations:
+          openshift.io/generated-by: OpenShiftNewApp
+        creationTimestamp: null
+        labels:
+          app: ${APPLICATION_NAME}
+          deploymentconfig: flower
+      spec:
+        containers:
+        - env:
+          - name: EXECUTOR
+            value: Celery
+          - name: FERNET_KEY
+            valueFrom:
+              secretKeyRef:
+                key: fernet-key
+                name: fernet
+          - name: REDIS_SERVICE_PASSWORD
+            valueFrom:
+              secretKeyRef:
+                key: database-password
+                name: redis
+          - name: POSTGRESQL_SERVICE_DB
+            valueFrom:
+              secretKeyRef:
+                key: database-name
+                name: postgresql
+          - name: POSTGRESQL_SERVICE_USER
+            valueFrom:
+              secretKeyRef:
+                key: database-user
+                name: postgresql
+          - name: POSTGRESQL_SERVICE_PASSWORD
+            valueFrom:
+              secretKeyRef:
+                key: database-password
+                name: postgresql
+          - name: FLOWER_BASIC_AUTH
+            valueFrom:
+              secretKeyRef:
+                key: flower_basic_auth
+                name: flower-auth
+          image: ${AIRFLOW_IMAGE}
+          args:
+          - flower
+          imagePullPolicy: Always
+          name: flower
+          ports:
+          - containerPort: 8080
+            protocol: TCP
+          - containerPort: 8793
+            protocol: TCP
+          - containerPort: 5555
+            protocol: TCP
+          resources: {}
+          terminationMessagePath: /dev/termination-log
+          terminationMessagePolicy: File
+        dnsPolicy: ClusterFirst
+        restartPolicy: Always
+        schedulerName: default-scheduler
+        securityContext: {}
+        terminationGracePeriodSeconds: 30
+    test: false
+    triggers:
+    - type: ConfigChange
+    - imageChangeParams:
+        automatic: true
+        containerNames:
+        - flower
+        from:
+          kind: ImageStreamTag
+          name: ${AIRFLOW_IMAGE_STREAM_NANE}:latest
+          namespace: ${PROJECT_NAME}
+      type: ImageChange
+  status:
+    availableReplicas: 0
+    latestVersion: 0
+    observedGeneration: 0
+    replicas: 0
+    unavailableReplicas: 0
+    updatedReplicas: 0
+- apiVersion: v1
+  kind: DeploymentConfig
+  metadata:
+    annotations:
+      template.alpha.openshift.io/wait-for-ready: "true"
+    creationTimestamp: null
+    generation: 1
+    labels:
+      app: ${APPLICATION_NAME}
+      template: postgresql-ephemeral-template
+    name: postgresql
+  spec:
+    replicas: 1
+    selector:
+      name: postgresql
+    strategy:
+      activeDeadlineSeconds: 21600
+      recreateParams:
+        timeoutSeconds: 600
+      resources: {}
+      type: Recreate
+    template:
+      metadata:
+        creationTimestamp: null
+        labels:
+          name: postgresql
+      spec:
+        containers:
+        - env:
+          - name: POSTGRESQL_USER
+            valueFrom:
+              secretKeyRef:
+                key: database-user
+                name: postgresql
+          - name: POSTGRESQL_PASSWORD
+            valueFrom:
+              secretKeyRef:
+                key: database-password
+                name: postgresql
+          - name: POSTGRESQL_DATABASE
+            valueFrom:
+              secretKeyRef:
+                key: database-name
+                name: postgresql
+          image: registry.access.redhat.com/rhscl/postgresql-95-rhel7@sha256:de66da4812f0de42cee0bef65899d75f8b1a7440858271f133c8f73c80be663d
+          imagePullPolicy: IfNotPresent
+          livenessProbe:
+            failureThreshold: 3
+            initialDelaySeconds: 30
+            periodSeconds: 10
+            successThreshold: 1
+            tcpSocket:
+              port: 5432
+            timeoutSeconds: 1
+          name: postgresql
+          ports:
+          - containerPort: 5432
+            protocol: TCP
+          readinessProbe:
+            exec:
+              command:
+              - /bin/sh
+              - -i
+              - -c
+              - psql -h 127.0.0.1 -U $POSTGRESQL_USER -q -d $POSTGRESQL_DATABASE -c
+                'SELECT 1'
+            failureThreshold: 3
+            initialDelaySeconds: 5
+            periodSeconds: 10
+            successThreshold: 1
+            timeoutSeconds: 1
+          resources:
+            limits:
+              memory: 1Gi
+          securityContext:
+            capabilities: {}
+            privileged: false
+          terminationMessagePath: /dev/termination-log
+          terminationMessagePolicy: File
+          volumeMounts:
+          - mountPath: /var/lib/pgsql/data
+            name: postgresql-data
+        dnsPolicy: ClusterFirst
+        restartPolicy: Always
+        schedulerName: default-scheduler
+        securityContext: {}
+        terminationGracePeriodSeconds: 30
+        volumes:
+        - emptyDir: {}
+          name: postgresql-data
+    test: false
+    triggers:
+    - imageChangeParams:
+        automatic: true
+        containerNames:
+        - postgresql
+        from:
+          kind: ImageStreamTag
+          name: postgresql:9.5
+          namespace: openshift
+      type: ImageChange
+    - type: ConfigChange
+  status:
+    availableReplicas: 0
+    latestVersion: 0
+    observedGeneration: 0
+    replicas: 0
+    unavailableReplicas: 0
+    updatedReplicas: 0
+- apiVersion: v1
+  kind: DeploymentConfig
+  metadata:
+    annotations:
+      template.alpha.openshift.io/wait-for-ready: "true"
+    creationTimestamp: null
+    generation: 1
+    labels:
+      app: ${APPLICATION_NAME}
+      template: redis-ephemeral-template
+    name: redis
+  spec:
+    replicas: 1
+    selector:
+      name: redis
+    strategy:
+      activeDeadlineSeconds: 21600
+      recreateParams:
+        timeoutSeconds: 600
+      resources: {}
+      type: Recreate
+    template:
+      metadata:
+        creationTimestamp: null
+        labels:
+          name: redis
+      spec:
+        containers:
+        - env:
+          - name: REDIS_PASSWORD
+            valueFrom:
+              secretKeyRef:
+                key: database-password
+                name: redis
+          image: registry.access.redhat.com/rhscl/redis-32-rhel7@sha256:50605070421172c6c41e03bcb4391f418240085f8e03f0f82190da75e51df9e3
+          imagePullPolicy: IfNotPresent
+          livenessProbe:
+            failureThreshold: 3
+            initialDelaySeconds: 30
+            periodSeconds: 10
+            successThreshold: 1
+            tcpSocket:
+              port: 6379
+            timeoutSeconds: 1
+          name: redis
+          ports:
+          - containerPort: 6379
+            protocol: TCP
+          readinessProbe:
+            exec:
+              command:
+              - /bin/sh
+              - -i
+              - -c
+              - test "$(redis-cli -h 127.0.0.1 -a $REDIS_PASSWORD ping)" == "PONG"
+            failureThreshold: 3
+            initialDelaySeconds: 5
+            periodSeconds: 10
+            successThreshold: 1
+            timeoutSeconds: 1
+          resources:
+            limits:
+              memory: 1Gi
+          securityContext:
+            capabilities: {}
+            privileged: false
+          terminationMessagePath: /dev/termination-log
+          terminationMessagePolicy: File
+          volumeMounts:
+          - mountPath: /var/lib/redis/data
+            name: redis-data
+        dnsPolicy: ClusterFirst
+        restartPolicy: Always
+        schedulerName: default-scheduler
+        securityContext: {}
+        terminationGracePeriodSeconds: 30
+        volumes:
+        - emptyDir: {}
+          name: redis-data
+    test: false
+    triggers:
+    - imageChangeParams:
+        automatic: true
+        containerNames:
+        - redis
+        from:
+          kind: ImageStreamTag
+          name: redis:3.2
+          namespace: openshift
+      type: ImageChange
+    - type: ConfigChange
+  status:
+    availableReplicas: 0
+    latestVersion: 0
+    observedGeneration: 0
+    replicas: 0
+    unavailableReplicas: 0
+    updatedReplicas: 0
+- apiVersion: v1
+  kind: DeploymentConfig
+  metadata:
+    annotations:
+      openshift.io/generated-by: OpenShiftNewApp
+    creationTimestamp: null
+    generation: 1
+    labels:
+      app: ${APPLICATION_NAME}
+    name: webserver
+  spec:
+    replicas: 1
+    revisionHistoryLimit: 10
+    selector:
+      app: ${APPLICATION_NAME}
+      deploymentconfig: webserver
+    strategy:
+      activeDeadlineSeconds: 21600
+      resources: {}
+      rollingParams:
+        intervalSeconds: 1
+        maxSurge: 25%
+        maxUnavailable: 25%
+        timeoutSeconds: 600
+        updatePeriodSeconds: 1
+      type: Rolling
+    template:
+      metadata:
+        annotations:
+          openshift.io/generated-by: OpenShiftNewApp
+        creationTimestamp: null
+        labels:
+          app: ${APPLICATION_NAME}
+          deploymentconfig: webserver
+      spec:
+        containers:
+        - name: webserver
+          env:
+          - name: EXECUTOR
+            value: Celery
+          - name: POSTGRESQL_SERVICE_DB
+            valueFrom:
+              secretKeyRef:
+                key: database-name
+                name: postgresql
+          - name: POSTGRESQL_SERVICE_USER
+            valueFrom:
+              secretKeyRef:
+                key: database-user
+                name: postgresql
+          - name: POSTGRESQL_SERVICE_PASSWORD
+            valueFrom:
+              secretKeyRef:
+                key: database-password
+                name: postgresql
+          - name: REDIS_SERVICE_PASSWORD
+            valueFrom:
+              secretKeyRef:
+                key: database-password
+                name: redis
+          - name: FERNET_KEY
+            valueFrom:
+              secretKeyRef:
+                key: fernet-key
+                name: fernet
+          image: ${AIRFLOW_IMAGE}
+          args:
+          - webserver
+          imagePullPolicy: Always
+          ports:
+          - containerPort: 5555
+            protocol: TCP
+          - containerPort: 8080
+            protocol: TCP
+          - containerPort: 8793
+            protocol: TCP
+          resources: {}
+          terminationMessagePath: /dev/termination-log
+          terminationMessagePolicy: File
+          volumeMounts:
+          - mountPath: "/usr/local/airflow/dags"
+            name: ${VOLUME_NAME}
+        - name: scheduler
+          env:
+          - name: EXECUTOR
+            value: Celery
+          - name: POSTGRESQL_SERVICE_DB
+            valueFrom:
+              secretKeyRef:
+                key: database-name
+                name: postgresql
+          - name: POSTGRESQL_SERVICE_USER
+            valueFrom:
+              secretKeyRef:
+                key: database-user
+                name: postgresql
+          - name: POSTGRESQL_SERVICE_PASSWORD
+            valueFrom:
+              secretKeyRef:
+                key: database-password
+                name: postgresql
+          - name: REDIS_SERVICE_PASSWORD
+            valueFrom:
+              secretKeyRef:
+                key: database-password
+                name: redis
+          - name: FERNET_KEY
+            valueFrom:
+              secretKeyRef:
+                key: fernet-key
+                name: fernet
+          image: ${AIRFLOW_IMAGE}
+          args:
+          - scheduler
+          imagePullPolicy: Always
+          ports:
+          - containerPort: 5555
+            protocol: TCP
+          - containerPort: 8080
+            protocol: TCP
+          - containerPort: 8793
+            protocol: TCP
+          resources: {}
+          terminationMessagePath: /dev/termination-log
+          terminationMessagePolicy: File
+          volumeMounts:
+          - mountPath: "/usr/local/airflow/dags"
+            name: ${VOLUME_NAME}
+        dnsPolicy: ClusterFirst
+        restartPolicy: Always
+        schedulerName: default-scheduler
+        securityContext: {}
+        terminationGracePeriodSeconds: 30
+        volumes:
+        - name: ${VOLUME_NAME}
+          persistentVolumeClaim:
+            claimName: ${PERSISTANT_VOLUME_CLAIM}
+    test: false
+    triggers:
+    - type: ConfigChange
+    - imageChangeParams:
+        automatic: true
+        containerNames:
+        - webserver
+        - scheduler
+        from:
+          kind: ImageStreamTag
+          name: ${AIRFLOW_IMAGE_STREAM_NANE}:latest
+          namespace: ${PROJECT_NAME}
+      type: ImageChange
+  status:
+    availableReplicas: 0
+    latestVersion: 0
+    observedGeneration: 0
+    replicas: 0
+    unavailableReplicas: 0
+    updatedReplicas: 0
+- apiVersion: v1
+  kind: DeploymentConfig
+  metadata:
+    annotations:
+      openshift.io/generated-by: OpenShiftNewApp
+    creationTimestamp: null
+    generation: 1
+    labels:
+      app: ${APPLICATION_NAME}
+    name: worker
+  spec:
+    replicas: 1
+    revisionHistoryLimit: 10
+    selector:
+      app: ${APPLICATION_NAME}
+      deploymentconfig: worker
+    strategy:
+      activeDeadlineSeconds: 21600
+      resources: {}
+      rollingParams:
+        intervalSeconds: 1
+        maxSurge: 25%
+        maxUnavailable: 25%
+        timeoutSeconds: 600
+        updatePeriodSeconds: 1
+      type: Rolling
+    template:
+      metadata:
+        annotations:
+          openshift.io/generated-by: OpenShiftNewApp
+        creationTimestamp: null
+        labels:
+          app: ${APPLICATION_NAME}
+          deploymentconfig: worker
+      spec:
+        containers:
+        - env:
+          - name: EXECUTOR
+            value: Celery
+          - name: REDIS_SERVICE_PASSWORD
+            valueFrom:
+              secretKeyRef:
+                key: database-password
+                name: redis
+          - name: POSTGRESQL_SERVICE_DB
+            valueFrom:
+              secretKeyRef:
+                key: database-name
+                name: postgresql
+          - name: POSTGRESQL_SERVICE_USER
+            valueFrom:
+              secretKeyRef:
+                key: database-user
+                name: postgresql
+          - name: POSTGRESQL_SERVICE_PASSWORD
+            valueFrom:
+              secretKeyRef:
+                key: database-password
+                name: postgresql
+          - name: FERNET_KEY
+            valueFrom:
+              secretKeyRef:
+                key: fernet-key
+                name: fernet
+          - name: C_FORCE_ROOT
+            value: 'true'
+          image: ${AIRFLOW_IMAGE}
+          args:
+          - worker
+          imagePullPolicy: Always
+          name: worker
+          ports:
+          - containerPort: 5555
+            protocol: TCP
+          - containerPort: 8080
+            protocol: TCP
+          - containerPort: 8793
+            protocol: TCP
+          resources:
+            requests:
+              cpu: "1"
+              memory: 1Gi
+          terminationMessagePath: /dev/termination-log
+          terminationMessagePolicy: File
+        dnsPolicy: ClusterFirst
+        restartPolicy: Always
+        schedulerName: default-scheduler
+        securityContext: {}
+        terminationGracePeriodSeconds: 30
+    test: false
+    triggers:
+    - type: ConfigChange
+    - imageChangeParams:
+        automatic: true
+        containerNames:
+        - worker
+        from:
+          kind: ImageStreamTag
+          name: ${AIRFLOW_IMAGE_STREAM_NANE}:latest
+          namespace: ${PROJECT_NAME}
+      type: ImageChange
+  status:
+    availableReplicas: 0
+    latestVersion: 0
+    observedGeneration: 0
+    replicas: 0
+    unavailableReplicas: 0
+    updatedReplicas: 0
+- apiVersion: v1
+  data:
+    fernet-key: RGxNbHRGd0Z3WGx2cDlTR2gyN1ZRX25Da0NtNi0wd3VnQTJUYi1ZVmdyOD0=
+  kind: Secret
+  metadata:
+    annotations:
+      template.openshift.io/expose-fernet-key: '{.data[''fernet-key'']}'
+    creationTimestamp: null
+    name: fernet
+  type: Opaque
+- apiVersion: v1
+  data:
+    flower_basic_auth: ${FLOWER_BASIC_AUTH}
+  kind: Secret
+  metadata:
+    annotations:
+      template.openshift.io/expose-flower_basic_auth: '{.data[''flower_basic_auth'']}'
+    creationTimestamp: null
+    name: flower-auth
+  type: Opaque
+- apiVersion: v1
+  stringData:
+    database-name: ${POSTGRESQL_DATABASE}
+    database-password: ${POSTGRESQL_PASSWORD}
+    database-user: ${POSTGRESQL_USER}
+  kind: Secret
+  metadata:
+    annotations:
+      template.openshift.io/expose-database_name: '{.data[''database-name'']}'
+      template.openshift.io/expose-password: '{.data[''database-password'']}'
+      template.openshift.io/expose-username: '{.data[''database-user'']}'
+    creationTimestamp: null
+    labels:
+      app: ${APPLICATION_NAME}
+      template: postgresql-ephemeral-template
+    name: postgresql
+  type: Opaque
+- apiVersion: v1
+  stringData:
+    database-password: ${REDIS_PASSWORD}
+  kind: Secret
+  metadata:
+    annotations:
+      template.openshift.io/expose-password: '{.data[''database-password'']}'
+    creationTimestamp: null
+    labels:
+      app: ${APPLICATION_NAME}
+      template: redis-ephemeral-template
+    name: redis
+  type: Opaque
+- apiVersion: v1
+  kind: Service
+  metadata:
+    annotations:
+      openshift.io/generated-by: OpenShiftNewApp
+    creationTimestamp: null
+    labels:
+      app: ${APPLICATION_NAME}
+    name: flower
+  spec:
+    ports:
+    - name: 5555-tcp
+      port: 5555
+      protocol: TCP
+      targetPort: 5555
+    - name: 8080-tcp
+      port: 8080
+      protocol: TCP
+      targetPort: 8080
+    - name: 8793-tcp
+      port: 8793
+      protocol: TCP
+      targetPort: 8793
+    selector:
+      app: ${APPLICATION_NAME}
+      deploymentconfig: flower
+    sessionAffinity: None
+    type: ClusterIP
+  status:
+    loadBalancer: {}
+- apiVersion: v1
+  kind: Service
+  metadata:
+    annotations:
+      template.openshift.io/expose-uri: postgres://{.spec.clusterIP}:{.spec.ports[?(.name=="postgresql")].port}
+    creationTimestamp: null
+    labels:
+      app: ${APPLICATION_NAME}
+      template: postgresql-ephemeral-template
+    name: postgresql
+  spec:
+    ports:
+    - name: postgresql
+      port: 5432
+      protocol: TCP
+      targetPort: 5432
+    selector:
+      name: postgresql
+    sessionAffinity: None
+    type: ClusterIP
+  status:
+    loadBalancer: {}
+- apiVersion: v1
+  kind: Service
+  metadata:
+    annotations:
+      template.openshift.io/expose-uri: redis://{.spec.clusterIP}:{.spec.ports[?(.name=="redis")].port}
+    creationTimestamp: null
+    labels:
+      app: ${APPLICATION_NAME}
+      template: redis-ephemeral-template
+    name: redis
+  spec:
+    ports:
+    - name: redis
+      port: 6379
+      protocol: TCP
+      targetPort: 6379
+    selector:
+      name: redis
+    sessionAffinity: None
+    type: ClusterIP
+  status:
+    loadBalancer: {}
+- apiVersion: v1
+  kind: Service
+  metadata:
+    annotations:
+      openshift.io/generated-by: OpenShiftNewApp
+    creationTimestamp: null
+    labels:
+      app: ${APPLICATION_NAME}
+    name: scheduler
+  spec:
+    ports:
+    - name: 5555-tcp
+      port: 5555
+      protocol: TCP
+      targetPort: 5555
+    - name: 8080-tcp
+      port: 8080
+      protocol: TCP
+      targetPort: 8080
+    - name: 8793-tcp
+      port: 8793
+      protocol: TCP
+      targetPort: 8793
+    selector:
+      app: ${APPLICATION_NAME}
+      deploymentconfig: scheduler
+    sessionAffinity: None
+    type: ClusterIP
+  status:
+    loadBalancer: {}
+- apiVersion: v1
+  kind: Service
+  metadata:
+    annotations:
+      openshift.io/generated-by: OpenShiftNewApp
+    creationTimestamp: null
+    labels:
+      app: ${APPLICATION_NAME}
+    name: webserver
+  spec:
+    ports:
+    - name: 5555-tcp
+      port: 5555
+      protocol: TCP
+      targetPort: 5555
+    - name: 8080-tcp
+      port: 8080
+      protocol: TCP
+      targetPort: 8080
+    - name: 8793-tcp
+      port: 8793
+      protocol: TCP
+      targetPort: 8793
+    selector:
+      app: ${APPLICATION_NAME}
+      deploymentconfig: webserver
+    sessionAffinity: None
+    type: ClusterIP
+  status:
+    loadBalancer: {}
+- apiVersion: v1
+  kind: Service
+  metadata:
+    annotations:
+      openshift.io/generated-by: OpenShiftNewApp
+    creationTimestamp: null
+    labels:
+      app: ${APPLICATION_NAME}
+    name: worker
+  spec:
+    ports:
+    - name: 5555-tcp
+      port: 5555
+      protocol: TCP
+      targetPort: 5555
+    - name: 8080-tcp
+      port: 8080
+      protocol: TCP
+      targetPort: 8080
+    - name: 8793-tcp
+      port: 8793
+      protocol: TCP
+      targetPort: 8793
+    selector:
+      app: ${APPLICATION_NAME}
+      deploymentconfig: worker
+    sessionAffinity: None
+    type: ClusterIP
+  status:
+    loadBalancer: {}
+- apiVersion: v1
+  kind: ImageStream
+  metadata:
+    annotations:
+      openshift.io/generated-by: OpenShiftNewBuild
+    creationTimestamp: null
+    generation: 1
+    labels:
+      app: ${APPLICATION_NAME}
+      build: ${AIRFLOW_IMAGE_STREAM_NANE}
+    name: ${AIRFLOW_IMAGE_STREAM_NANE}
+  spec:
+    lookupPolicy:
+      local: false
+    tags:
+    - annotations: null
+      from:
+        kind: DockerImage
+        name: ${AIRFLOW_IMAGE}:latest
+      generation: null
+      importPolicy: {}
+      name: latest
+      referencePolicy:
+        type: ""
+  status:
+    dockerImageRepository: ""
+- apiVersion: v1
+  kind: Route
+  metadata:
+    annotations:
+      openshift.io/host.generated: "true"
+    creationTimestamp: null
+    labels:
+      app: seism
+    name: airi
+  spec:
+    port:
+      targetPort: 8080-tcp
+    tls:
+      insecureEdgeTerminationPolicy: Redirect
+      termination: edge
+    to:
+      kind: Service
+      name: webserver
+      weight: 100
+    wildcardPolicy: None
+  status:
+    ingress:
+    - conditions:
+      - lastTransitionTime: 2018-08-07T07:09:48Z
+        status: "True"
+        type: Admitted
+      routerName: router
+      wildcardPolicy: None
+- apiVersion: "v1"
+  kind: "PersistentVolumeClaim"
+  metadata:
+    name: ${PERSISTANT_VOLUME_CLAIM}
+  spec:
+    accessModes:
+      - "ReadWriteOnce"
+    resources:
+      requests:
+        storage: "50Mi"
+parameters:
+- description: Flower basic authentication
+  from: '[A-Z0-9]{12}'
+  generate: expression
+  name: FLOWER_BASIC_AUTH
+- description: Username for PostgreSQL user that will be used for accessing the database.
+  displayName: PostgreSQL Connection Username
+  from: 'user[A-Z0-9]{5}'
+  generate: expression
+  name: POSTGRESQL_USER
+  required: true
+- description: Password for the PostgreSQL connection user.
+  displayName: PostgreSQL Connection Password
+  from: '[a-zA-Z0-9]{16}'
+  generate: expression
+  name: POSTGRESQL_PASSWORD
+  required: true
+- description: Database name for PostgreSQL database.
+  displayName: PostgreSQL Connection Database
+  from: 'airflow[A-Z0-9]{5}'
+  generate: expression
+  name: POSTGRESQL_DATABASE
+  required: true
+- description: Password for Redis database.
+  displayName: Redis Connection Password
+  from: '[A-Z0-9]{15}'
+  generate: expression
+  name: REDIS_PASSWORD
+  required: true
+- description: Application name.
+  displayName: Airflow Application Name.
+  name: APPLICATION_NAME
+  value: seism
+  required: true
+- description: Airflow image link.
+  displayName: Airflow Image Link.
+  name: AIRFLOW_IMAGE
+  value: 172.30.21.196:5000/bix-airflow-cluster/bix-airflow-base-image
+  required: true
+- description: Airflow base image stream name.
+  displayName: Airflow Base Image Stream Name.
+  name: AIRFLOW_IMAGE_STREAM_NANE
+  value: airflow-base-image
+  required: true
+- description: Namespace
+  displayName: Project Name.
+  name: PROJECT_NAME
+  value: seism
+- description: Attached volume name
+  displayName: Volume Name
+  name: VOLUME_NAME
+  value: airo
+- description: Attached persistant volume claim
+  displayName: Persistant volume claim
+  name: PERSISTANT_VOLUME_CLAIM
+  value: airoc
+


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services