diff --git a/helm/README.md b/helm/README.md new file mode 100644 index 000000000..a7271266f --- /dev/null +++ b/helm/README.md @@ -0,0 +1,37 @@ +## Creating new versions of this chart +1. Update the `version` property in `helm/Chart.yaml` to the desired version number. +2. From the `helm/` directory, run the command `helm package ./` to create a `.tgz` package for the new version. +3. Move the new `.tgz` file to the `docs/` directory (`mv notify-bc-[version].tgz ../docs/helm`). +4. Update `docs/helm/index.yaml` to list the new package (`helm repo index ../docs/helm`). + +## Deploying to OpenShift +1. In this example we will be deploying to `dev`, so a file named `values.dev.local.yaml` should exist and contain values specific to the `dev` instance. +1. Run `helm install dev -f platform-specific/openshift.yaml -f values.yaml -f values.dev.local.yaml ./` + - If a deployment already exists, run `helm uninstall dev` to remove it, then repeat the command above. +1. To deploy to `test`, replace `dev` with `test` in the above example. + +## Deploying BuildConfig and ImageStream for NotifyBC application +```bash +# Step 1 - Go to helm/ directory of repo +cd helm +# Step 2 - Login to OpenShift oc command line +oc login --token=secret-token --server=https://myopnshift.com +# Step 3 - Choose the tools folder +oc project 12345-tools +# step 4 - Apply deployment file +oc apply -f deployments/openshift/notify-build.yaml +``` + +## Restoring from database backups +If database backups are enabled (`notify-bc.cronJob.enabled: true`), backups will be created automatically on a schedule set in `notify-bc.cronJob.schedule`. Backups are saved as date-stamped .gz (gzip) files to a PersistentVolumeClaim `...notify-bc-cronjob-mongodb-backup`. +To restore from a backup: +1. Copy your OpenShift login command and paste into a terminal. Switch to the desired project (`oc project ...`). +2. Find the `RELEASE_NAME` of the app you want to restore to. This should match the name of the PersistentVolumeClaim that contains the database backups, for example if your PVC is called `example-notifybc-dev-notify-bc-cronjob-mongodb-backup`, the `RELEASE_NAME` should be `example-notifybc-dev`. +3. Determine the `BACKUP_DATE`, the date of the backup you want to restore from. For example if you want to restore from a backup created on January 25th, 2024, the `BACKUP_DATE` should be `20240125`. + - Depending on the backup schedule there may be multiple backups performed per day in which case the latest backup from the given `BACKUP_DATE` will be used. +4. From the root of this project, run the command: + ```bash + oc process -f helm/deployments/openshift/backup-restore.yaml -p RELEASE_NAME="{RELEASE_NAME}" -p BACKUP_DATE="{BACKUP_DATE}" | oc apply -f - + ``` + (replacing `{RELEASE_NAME}` and `{BACKUP_DATE}` with the values found earlier) to run the database restore job. +5. A Job and a Pod will be created to perform the restore process which can be monitored in OpenShift. Both will be cleaned up automatically a few minutes after the process is complete. diff --git a/helm/deployments/openshift/backup-restore.yaml b/helm/deployments/openshift/backup-restore.yaml new file mode 100644 index 000000000..8908e93ac --- /dev/null +++ b/helm/deployments/openshift/backup-restore.yaml @@ -0,0 +1,54 @@ +apiVersion: template.openshift.io/v1 +kind: Template +metadata: + name: notify-bc-mongodb-restore-template +parameters: + - name: RELEASE_NAME + displayName: "Release Name" + description: "The NotifyBC release name" + required: true + - name: MONGO_IMAGE + displayName: "Mongo Image" + description: "The image used by the mongodb pods. This should match the version used by the mongodb pods." + required: true + value: "docker.io/bitnami/mongodb:7.0.4-debian-11-r0" + - name: BACKUP_DATE + displayName: "Backup Date" + description: "The date of the backup file to restore from (YYYYMMDD format, eg. 20240125)" + required: true +objects: + - apiVersion: batch/v1 + kind: Job + metadata: + name: ${RELEASE_NAME}-mongodb-restore-${BACKUP_DATE} + spec: + parallelism: 1 + completions: 1 + backoffLimit: 1 + ttlSecondsAfterFinished: 100 + template: + spec: + containers: + - name: mongodb + image: ${MONGO_IMAGE} + imagePullPolicy: IfNotPresent + volumeMounts: + - name: import + mountPath: /import + env: + - name: DATABASE_SERVICE_NAME + value: ${RELEASE_NAME}-mongodb-headless + - name: MONGODB_ADMIN_PASSWORD + valueFrom: + secretKeyRef: + name: ${RELEASE_NAME}-mongodb + key: mongodb-root-password + command: + - /bin/bash + - -vc + - mongorestore --username=root --password="$MONGODB_ADMIN_PASSWORD" --host="rs0/$DATABASE_SERVICE_NAME" --gzip --drop --archive="`find /import -name "mongodb-backup-${BACKUP_DATE}*.gz" | tail -n 1`" + restartPolicy: Never + volumes: + - name: import + persistentVolumeClaim: + claimName: ${RELEASE_NAME}-notify-bc-cronjob-mongodb-backup