mirror of
https://github.com/wekan/wekan.git
synced 2025-12-16 15:30:13 +01:00
Merge pull request #1765 from adyachok/devel
Wekan integration with OpenShift
This commit is contained in:
commit
5f345e851a
2 changed files with 360 additions and 0 deletions
19
wekan-openshift/README.md
Normal file
19
wekan-openshift/README.md
Normal file
|
|
@ -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
wekan-openshift/wekan.yml
Normal file
341
wekan-openshift/wekan.yml
Normal file
|
|
@ -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
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue