Przeglądaj źródła

Wekan integration with OpenShift

Added OpenShift template to run WeCan in OpenShift.
Tested on OpensShift 3.7 Dedicated.
Andras Gyacsok 7 lat temu
rodzic
commit
687c7923e7
2 zmienionych plików z 360 dodań i 0 usunięć
  1. 19 0
      wekan-openshift/README.md
  2. 341 0
      wekan-openshift/wekan.yml

+ 19 - 0
wekan-openshift/README.md

@@ -0,0 +1,19 @@
+# WeKan on OpenShift
+ 
+Openshift Template for WeKan backed by MongoDB
+ 
+#### Create Template
+```sh
+oc create -f wekan.yml
+```
+ 
+#### Delete Instance Resources
+Clean up all resources created. Note label filters assume single instance of template deployed in the current namespace.
+ 
+```sh
+oc delete all -l app=wekan
+oc delete pods -l app=wekan
+oc delete persistentvolumeclaim -l app=wekan
+oc delete serviceaccount -l app=wekan
+oc delete secret -l app=wekan
+```

+ 341 - 0
wekan-openshift/wekan.yml

@@ -0,0 +1,341 @@
+---
+apiVersion: v1
+kind: Template
+labels:
+  template: wekan-mongodb-persistent-template
+message: |-
+  The following service(s) have been created in your project: ${WEKAN_SERVICE_NAME}.
+metadata:
+  annotations:
+    description: |-
+      This template provides a WeKan instance backed by a standalone MongoDB
+      server. The database is stored on persistent storage.
+    iconClass: pficon-trend-up
+    openshift.io/display-name: WEKAN backed by MongoDB
+    openshift.io/documentation-url: https://wekan.github.io/
+    openshift.io/long-description: This template provides a WeKan platphorm
+      with a MongoDB database created.  The database is stored on persistent storage.  The
+      database name, username, and password are chosen via parameters when provisioning
+      this service.
+    tags: wekan,kanban,mongodb
+  name: wekan-mongodb-persistent
+objects:
+- apiVersion: v1
+  kind: ServiceAccount
+  metadata:
+    name: ${WEKAN_SERVICE_NAME}
+    labels:
+      app: wekan
+      service: ${WEKAN_SERVICE_NAME}
+- apiVersion: v1
+  kind: Secret
+  metadata:
+    annotations:
+      template.openshift.io/expose-admin_password: "{.data['database-admin-password']}"
+      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']}"
+    name: "${DATABASE_SERVICE_NAME}"
+    labels:
+      app: wekan
+      service: ${WEKAN_SERVICE_NAME}
+  stringData:
+    database-admin-password: "${MONGODB_ADMIN_PASSWORD}"
+    database-name: "${MONGODB_DATABASE}"
+    database-password: "${MONGODB_PASSWORD}"
+    database-user: "${MONGODB_USER}"
+- apiVersion: v1
+  kind: Service
+  metadata:
+    annotations:
+      template.openshift.io/expose-uri: http://{.spec.clusterIP}:{.spec.ports[?(.name=="wekan")].port}
+    name: "${WEKAN_SERVICE_NAME}"
+    labels:
+      app: wekan
+      service: ${WEKAN_SERVICE_NAME}
+  spec:
+    ports:
+    - name: wekan
+      nodePort: 0
+      port: 8080
+      protocol: TCP
+      targetPort: 8080
+    selector:
+      name: "${WEKAN_SERVICE_NAME}"
+    sessionAffinity: None
+    type: ClusterIP
+  status:
+    loadBalancer: {}
+- apiVersion: v1
+  kind: Service
+  metadata:
+    annotations:
+      template.openshift.io/expose-uri: mongodb://{.spec.clusterIP}:{.spec.ports[?(.name=="mongo")].port}
+    name: "${DATABASE_SERVICE_NAME}"
+    labels:
+      app: wekan
+      service: ${WEKAN_SERVICE_NAME}
+  spec:
+    ports:
+    - name: mongo
+      nodePort: 0
+      port: 27017
+      protocol: TCP
+      targetPort: 27017
+    selector:
+      name: "${DATABASE_SERVICE_NAME}"
+    sessionAffinity: None
+    type: ClusterIP
+  status:
+    loadBalancer: {}
+- apiVersion: v1
+  kind: PersistentVolumeClaim
+  metadata:
+    name: "${DATABASE_SERVICE_NAME}"
+    labels:
+      app: wekan
+      service: ${WEKAN_SERVICE_NAME}
+  spec:
+    accessModes:
+    - ReadWriteOnce
+    resources:
+      requests:
+        storage: "${VOLUME_CAPACITY}"
+- apiVersion: image.openshift.io/v1
+  kind: ImageStream
+  metadata:
+    labels:
+      app: wekan
+    name: ${WEKAN_SERVICE_NAME}
+  spec:
+    tags:
+    - from:
+        kind: DockerImage
+        name: ${WEKAN_IMAGE}
+      generation: 2
+      name: latest
+      referencePolicy:
+        type: Source
+- apiVersion: v1
+  kind: DeploymentConfig
+  metadata:
+    name: ${WEKAN_SERVICE_NAME}
+    labels:
+      app: wekan
+      service: ${WEKAN_SERVICE_NAME}
+  spec:
+    replicas: 1
+    selector:
+      app: wekan
+      deploymentconfig: ${WEKAN_SERVICE_NAME}
+    strategy:
+      type: Recreate
+    template:
+      metadata:
+        labels:
+          app: wekan
+          service: ${WEKAN_SERVICE_NAME}
+          deploymentconfig: ${WEKAN_SERVICE_NAME}
+          template: wekan
+          name: ${WEKAN_SERVICE_NAME}
+      spec:
+        containers:
+        - name: ${WEKAN_SERVICE_NAME}
+          image: ${WEKAN_IMAGE}
+          imagePullPolicy: Always
+          env:
+          - name: MONGO_URL
+            value: mongodb://${MONGODB_USER}:${MONGODB_PASSWORD}@${DATABASE_SERVICE_NAME}:27017/${MONGODB_DATABASE}
+          - name: ROOT_URL
+            value: http://localhost
+          - name: PORT
+            value: "8080"
+          ports:
+          - containerPort: 8080
+            name: ${WEKAN_SERVICE_NAME}
+            protocol: TCP
+          terminationMessagePath: /dev/termination-log
+          livenessProbe:
+            failureThreshold: 30
+            httpGet:
+              path: /
+              port: 8080
+            initialDelaySeconds: 240
+            timeoutSeconds: 3
+          readinessProbe:
+            httpGet:
+              path: /
+              port: 8080
+            initialDelaySeconds: 3
+            timeoutSeconds: 3
+        dnsPolicy: ClusterFirst
+        restartPolicy: Always
+        serviceAccount: ${WEKAN_SERVICE_NAME}
+        serviceAccountName: ${WEKAN_SERVICE_NAME}
+        terminationGracePeriodSeconds: 30
+    triggers:
+    - type: ConfigChange
+    - type: ImageChange
+      imageChangeParams:
+        automatic: true
+        containerNames:
+        - ${WEKAN_SERVICE_NAME}
+        from:
+          kind: ImageStreamTag
+          name: ${WEKAN_SERVICE_NAME}:latest
+        lastTriggeredImage: ""
+- apiVersion: v1
+  kind: DeploymentConfig
+  metadata:
+    annotations:
+      template.alpha.openshift.io/wait-for-ready: 'true'
+    name: "${DATABASE_SERVICE_NAME}"
+    labels:
+      app: wekan
+      service: ${WEKAN_SERVICE_NAME}
+  spec:
+    replicas: 1
+    selector:
+      name: "${DATABASE_SERVICE_NAME}"
+    strategy:
+      type: Recreate
+    template:
+      metadata:
+        labels:
+          name: "${DATABASE_SERVICE_NAME}"
+      spec:
+        containers:
+        - capabilities: {}
+          env:
+          - name: MONGODB_USER
+            valueFrom:
+              secretKeyRef:
+                key: database-user
+                name: "${DATABASE_SERVICE_NAME}"
+          - name: MONGODB_PASSWORD
+            valueFrom:
+              secretKeyRef:
+                key: database-password
+                name: "${DATABASE_SERVICE_NAME}"
+          - name: MONGODB_ADMIN_PASSWORD
+            valueFrom:
+              secretKeyRef:
+                key: database-admin-password
+                name: "${DATABASE_SERVICE_NAME}"
+          - name: MONGODB_DATABASE
+            valueFrom:
+              secretKeyRef:
+                key: database-name
+                name: "${DATABASE_SERVICE_NAME}"
+          image: " "
+          imagePullPolicy: IfNotPresent
+          livenessProbe:
+            initialDelaySeconds: 30
+            tcpSocket:
+              port: 27017
+            timeoutSeconds: 1
+          name: mongodb
+          ports:
+          - containerPort: 27017
+            protocol: TCP
+          readinessProbe:
+            exec:
+              command:
+              - "/bin/sh"
+              - "-i"
+              - "-c"
+              - mongo 127.0.0.1:27017/$MONGODB_DATABASE -u $MONGODB_USER -p $MONGODB_PASSWORD
+                --eval="quit()"
+            initialDelaySeconds: 3
+            timeoutSeconds: 1
+          resources:
+            limits:
+              memory: "${MEMORY_LIMIT}"
+          securityContext:
+            capabilities: {}
+            privileged: false
+          terminationMessagePath: "/dev/termination-log"
+          volumeMounts:
+          - mountPath: "/var/lib/mongodb/data"
+            name: "${DATABASE_SERVICE_NAME}-data"
+        dnsPolicy: ClusterFirst
+        restartPolicy: Always
+        volumes:
+        - name: "${DATABASE_SERVICE_NAME}-data"
+          persistentVolumeClaim:
+            claimName: "${DATABASE_SERVICE_NAME}"
+    triggers:
+    - imageChangeParams:
+        automatic: true
+        containerNames:
+        - mongodb
+        from:
+          kind: ImageStreamTag
+          name: mongodb:${MONGODB_VERSION}
+          namespace: "${NAMESPACE}"
+        lastTriggeredImage: ''
+      type: ImageChange
+    - type: ConfigChange
+  status: {}
+parameters:
+- description: Maximum amount of memory the container can use.
+  displayName: Memory Limit
+  name: MEMORY_LIMIT
+  required: true
+  value: 512Mi
+- description: The OpenShift Namespace where the ImageStream resides.
+  displayName: Namespace
+  name: NAMESPACE
+  value: openshift
+- description: The name of the OpenShift Service exposed for the database.
+  displayName: Database Service Name
+  name: DATABASE_SERVICE_NAME
+  required: true
+  value: mongodb
+- description: Username for MongoDB user that will be used for accessing the database.
+  displayName: MongoDB Connection Username
+  from: user[A-Z0-9]{3}
+  generate: expression
+  name: MONGODB_USER
+  required: true
+- description: Password for the MongoDB connection user.
+  displayName: MongoDB Connection Password
+  from: "[a-zA-Z0-9]{16}"
+  generate: expression
+  name: MONGODB_PASSWORD
+  required: true
+- description: Name of the MongoDB database accessed.
+  displayName: MongoDB Database Name
+  name: MONGODB_DATABASE
+  required: true
+  value: wekan
+- description: Password for the database admin user.
+  displayName: MongoDB Admin Password
+  from: "[a-zA-Z0-9]{16}"
+  generate: expression
+  name: MONGODB_ADMIN_PASSWORD
+  required: true
+- description: Volume space available for data, e.g. 512Mi, 2Gi.
+  displayName: Volume Capacity
+  name: VOLUME_CAPACITY
+  required: true
+  value: 1Gi
+- description: Version of MongoDB image to be used (2.4, 2.6, 3.2 or latest).
+  displayName: Version of MongoDB Image
+  name: MONGODB_VERSION
+  required: true
+  value: '3.2'
+- name: WEKAN_SERVICE_NAME
+  displayName: WeKan Service Name
+  value: wekan
+  required: true
+- name: WEKAN_IMAGE
+  displayName: WeKan Docker Image
+  value: quay.io/wekan/wekan:latest
+  description: The metabase docker image to use
+  required: true
+- name: WEKAN_SERVICE_NAME
+  displayName: WeKan Service Name
+  value: wekan
+  required: true
+