apiVersion: cr.kanister.io/v1alpha1 kind: Blueprint metadata: name: mongodb-blueprint actions: backup: outputArtifacts: mongoBackup: # Capture the kopia snapshot information for subsequent actions # The information includes the kopia snapshot ID which is essential for restore and delete to succeed # `kopiaOutput` is the name provided to kando using `--output-name` flag kopiaSnapshot: "{{ .Phases.takeConsistentBackup.Output.kopiaOutput }}" phases: - func: KubeTask name: takeConsistentBackup objects: mongosecret: kind: Secret name: '{{ .StatefulSet.Name }}' namespace: "{{ .StatefulSet.Namespace }}" args: namespace: "{{ .StatefulSet.Namespace }}" image: ghcr.io/kanisterio/mongodb:0.85.0 command: - bash - -o - errexit - -o - pipefail - -c - | host='{{ .StatefulSet.Name }}-0.{{ .StatefulSet.Name }}-headless.{{ .StatefulSet.Namespace }}.svc.cluster.local' dbPassword='{{ index .Phases.takeConsistentBackup.Secrets.mongosecret.Data "mongodb-root-password" | toString }}' dump_cmd="mongodump --oplog --gzip --archive --host ${host} -u root -p ${dbPassword}" backup_file_path='rs_backup.gz' ${dump_cmd} | kando location push --profile '{{ toJson .Profile }}' --path "${backup_file_path}" --output-name "kopiaOutput" - restore: inputArtifactNames: # The kopia snapshot info created in backup phase can be used here # Use the `--kopia-snapshot` flag in kando to pass in `mongoBackup.KopiaSnapshot` - mongoBackup phases: - func: KubeTask name: pullFromStore objects: mongosecret: kind: Secret name: '{{ .StatefulSet.Name }}' namespace: "{{ .StatefulSet.Namespace }}" args: namespace: "{{ .StatefulSet.Namespace }}" image: ghcr.io/kanisterio/mongodb:0.85.0 command: - bash - -o - errexit - -o - pipefail - -c - | host='{{ .StatefulSet.Name }}-0.{{ .StatefulSet.Name }}-headless.{{ .StatefulSet.Namespace }}.svc.cluster.local' dbPassword='{{ index .Phases.pullFromStore.Secrets.mongosecret.Data "mongodb-root-password" | toString }}' restore_cmd="mongorestore --gzip --archive --oplogReplay --drop --host ${host} -u root -p ${dbPassword}" backup_file_path='rs_backup.gz' kopia_snap='{{ .ArtifactsIn.mongoBackup.KopiaSnapshot }}' kando location pull --profile '{{ toJson .Profile }}' --path "${backup_file_path}" --kopia-snapshot "${kopia_snap}" - | ${restore_cmd} delete: inputArtifactNames: # The kopia snapshot info created in backup phase can be used here # Use the `--kopia-snapshot` flag in kando to pass in `mongoBackup.KopiaSnapshot` - mongoBackup phases: - func: KubeTask name: deleteFromStore args: namespace: "{{ .Namespace.Name }}" image: ghcr.io/kanisterio/mongodb:0.85.0 command: - bash - -o - errexit - -o - pipefail - -c - | backup_file_path='rs_backup.gz' kopia_snap='{{ .ArtifactsIn.mongoBackup.KopiaSnapshot }}' kando location delete --profile '{{ toJson .Profile }}' --path "${backup_file_path}" --kopia-snapshot "${kopia_snap}"