diff --git a/docs/commands/backup.md b/docs/commands/backup.md index d93891c4f38..c7e843bac1a 100644 --- a/docs/commands/backup.md +++ b/docs/commands/backup.md @@ -14,7 +14,11 @@ usage: mas backup [-i MAS_INSTANCE_ID] [--backup-version BACKUP_VERSION] [--artifactory-url ARTIFACTORY_URL] [--artifactory-repository ARTIFACTORY_REPOSITORY] [--backup-manage-app] [--manage-workspace-id MANAGE_WORKSPACE_ID] [--backup-manage-db] [--manage-db2-namespace MANAGE_DB2_NAMESPACE] [--manage-db2-instance-name MANAGE_DB2_INSTANCE_NAME] - [--manage-db2-backup-type {offline,online}] [--include-sls] [--exclude-sls] [--include-mongo] [--exclude-mongo] + [--manage-db2-backup-type {offline,online}] + [--backup-facilities-app] [--facilities-workspace-id FACILITIES_WORKSPACE_ID] [--backup-facilities-db] + [--facilities-db2-namespace FACILITIES_DB2_NAMESPACE] [--facilities-db2-instance-name FACILITIES_DB2_INSTANCE_NAME] + [--facilities-db2-backup-type {offline,online}] + [--include-sls] [--exclude-sls] [--include-mongo] [--exclude-mongo] [--mongodb-namespace MONGODB_NAMESPACE] [--mongodb-instance-name MONGODB_INSTANCE_NAME] [--mongodb-provider {community}] [--sls-namespace SLS_NAMESPACE] [--cert-manager-provider {redhat,ibm}] [--artifactory-username ARTIFACTORY_USERNAME] [--artifactory-token ARTIFACTORY_TOKEN] [--dev-mode] [--no-confirm] @@ -69,6 +73,20 @@ Manage Application Backup: --manage-db2-backup-type {offline,online} Manage Db2 backup type: offline (database unavailable) or online (database remains available) +Facilities Application Backup: + --backup-facilities-app + Backup the Facilities application + --facilities-workspace-id FACILITIES_WORKSPACE_ID + Facilities workspace ID + --backup-facilities-db + Backup the Facilities application database (Db2) + --facilities-db2-namespace FACILITIES_DB2_NAMESPACE + Facilities Db2 namespace (default: db2u) + --facilities-db2-instance-name FACILITIES_DB2_INSTANCE_NAME + Facilities Db2 instance name + --facilities-db2-backup-type {offline,online} + Facilities Db2 backup type: offline (database unavailable) or online (database remains available) + Components: --include-mongo Include Mongo in backup (default: true) --exclude-mongo Exclude Mongo from backup (use if Mongo is external) @@ -248,6 +266,32 @@ mas backup \ --no-confirm ``` +### Backup with Facilities Application +Backup MAS instance including the Facilities application and its database: + +```bash +mas backup \ + --instance-id inst1 \ + --backup-facilities-app \ + --facilities-workspace-id masdev \ + --backup-facilities-db \ + --facilities-db2-namespace db2u \ + --facilities-db2-instance-name mas-inst1-masdev-facilities \ + --facilities-db2-backup-type offline \ + --no-confirm +``` + +### Backup with Facilities Application Only (No Database) +Backup the Facilities application without backing up its database: + +```bash +mas backup \ + --instance-id inst1 \ + --backup-facilities-app \ + --facilities-workspace-id masdev \ + --no-confirm +``` + Notes ------------------------------------------------------------------------------- diff --git a/docs/commands/restore.md b/docs/commands/restore.md index ef451455112..ff0bf97d666 100644 --- a/docs/commands/restore.md +++ b/docs/commands/restore.md @@ -25,6 +25,10 @@ usage: mas restore [-i MAS_INSTANCE_ID] [--restore-version RESTORE_VERSION] [--manage-app-storage-class-rwx MANAGE_APP_STORAGE_CLASS_RWX] [--manage-app-storage-class-rwo MANAGE_APP_STORAGE_CLASS_RWO] [--override-manage-db-storageclass] [--manage-db-storage-class-rwx MANAGE_DB_STORAGE_CLASS_RWX] [--manage-db-storage-class-rwo MANAGE_DB_STORAGE_CLASS_RWO] + [--restore-facilities-app] [--restore-facilities-db] [--override-facilities-app-storageclass] + [--facilities-app-storage-class-rwx FACILITIES_APP_STORAGE_CLASS_RWX] [--facilities-app-storage-class-rwo FACILITIES_APP_STORAGE_CLASS_RWO] + [--override-facilities-db-storageclass] + [--facilities-db-storage-class-rwx FACILITIES_DB_STORAGE_CLASS_RWX] [--facilities-db-storage-class-rwo FACILITIES_DB_STORAGE_CLASS_RWO] [--artifactory-username ARTIFACTORY_USERNAME] [--artifactory-token ARTIFACTORY_TOKEN] [--dev-mode] [--no-confirm] [--skip-pre-check] [-h] IBM Maximo Application Suite Admin CLI @@ -132,6 +136,24 @@ Manage Application Restore: --manage-db-storage-class-rwo MANAGE_DB_STORAGE_CLASS_RWO Db2 ReadWriteOnce storage class name +Facilities Application Restore: + --restore-facilities-app + Restore the Facilities application including namespace resources and persistent volume data + --restore-facilities-db + Restore the Facilities incluster Db2 database + --override-facilities-app-storageclass + Override storage class for Facilities application persistent volumes + --facilities-app-storage-class-rwx FACILITIES_APP_STORAGE_CLASS_RWX + Facilities Application ReadWriteMany storage class name + --facilities-app-storage-class-rwo FACILITIES_APP_STORAGE_CLASS_RWO + Facilities Application ReadWriteOnce storage class name + --override-facilities-db-storageclass + Override storage class for Facilities Db2 database persistent volumes + --facilities-db-storage-class-rwx FACILITIES_DB_STORAGE_CLASS_RWX + Facilities Db2 ReadWriteMany storage class name + --facilities-db-storage-class-rwo FACILITIES_DB_STORAGE_CLASS_RWO + Facilities Db2 ReadWriteOnce storage class name + More: --artifactory-username ARTIFACTORY_USERNAME Username for access to development builds on Artifactory @@ -362,6 +384,47 @@ mas restore \ --no-confirm ``` +### Restore with Facilities Application +Restore the Facilities application including namespace resources and persistent volume data: + +```bash +mas restore \ + --instance-id inst1 \ + --restore-version 20260117-191701 \ + --restore-facilities-app \ + --no-confirm +``` + +### Restore with Facilities Application and Database +Restore both the Facilities application and its incluster Db2 database: + +```bash +mas restore \ + --instance-id inst1 \ + --restore-version 20260117-191701 \ + --restore-facilities-app \ + --restore-facilities-db \ + --no-confirm +``` + +### Restore Facilities with Custom Storage Classes +Restore Facilities application and database with custom storage class overrides: + +```bash +mas restore \ + --instance-id inst1 \ + --restore-version 20260117-191701 \ + --restore-facilities-app \ + --restore-facilities-db \ + --override-facilities-app-storageclass \ + --facilities-app-storage-class-rwx custom-rwx-storage \ + --facilities-app-storage-class-rwo custom-rwo-storage \ + --override-facilities-db-storageclass \ + --facilities-db-storage-class-rwx custom-rwx-storage \ + --facilities-db-storage-class-rwo custom-rwo-storage \ + --no-confirm +``` + ### Restore Skipping Pre-Check Skip the pre-restore validation check (use with caution): @@ -499,6 +562,21 @@ The restore process can now restore the Manage application in addition to the MA - Storage class overrides are useful when restoring to clusters with different storage infrastructure - A single RWX and RWO storage class is applied across all Db2 persistent volumes (meta, data, backup, logs, temp) +### Facilities Application Restore +The restore process can restore the Facilities application in addition to the MAS Suite: + +- **Facilities Application**: Use `--restore-facilities-app` to restore Facilities namespace resources and persistent volume data +- **Facilities Database**: Use `--restore-facilities-db` to restore the incluster Db2 database associated with the Facilities workspace +- **Storage Class Overrides**: + - Use `--override-facilities-app-storageclass` to override Facilities application storage classes, then specify `--facilities-app-storage-class-rwx` and `--facilities-app-storage-class-rwo` + - Use `--override-facilities-db-storageclass` to override Db2 database storage classes, then specify `--facilities-db-storage-class-rwx` and `--facilities-db-storage-class-rwo` + +!!! note + - Facilities database restore is an offline operation - the Facilities application will be unavailable during the restore + - The restore process handles both the application resources and the database data + - Storage class overrides are useful when restoring to clusters with different storage infrastructure + - A single RWX and RWO storage class is applied across all Db2 persistent volumes (meta, data, backup, logs, temp) + ### Interactive Mode When running without `--instance-id`, the command enters interactive mode and will prompt for: diff --git a/docs/guides/backup-restore.md b/docs/guides/backup-restore.md index 1b1e30691af..05f01b1b015 100644 --- a/docs/guides/backup-restore.md +++ b/docs/guides/backup-restore.md @@ -56,9 +56,9 @@ The backup creates a compressed archive for each supported component that can be Be aware of the following limitations before performing a backup: - **MongoDB Community Edition only** - The backup process supports only in-cluster MongoDB Community Edition. External or enterprise MongoDB deployments are not backed up. -- **Db2 standalone operator only** - The backup process supports only the in-cluster standalone Db2 operator. Other Db2 operator implementations are not included. +- **Db2 standalone operator only** - The backup process supports only the in-cluster standalone Db2 operator with Db2Cluster(Db2uInstance is not supported yet). Other Db2 operator implementations are not included. - **Certificate Manager (RedHat only)** - Certificate Manager backup is supported only for RedHat Certificate Manager. Other certificate manager implementations are not included. -- **No support for some apps** - Only Manage application is supported for now. Other MAS applications (Facilities, Monitor, IoT, Predict, etc.) are not supported, but will be added in later releases. +- **No support for some apps** - Only Manage and Facilities applications are supported for now. Other MAS applications (Monitor, IoT, Predict, etc.) are not supported, but will be added in later releases. - **No OpenShift cluster state** - The backup does not capture the full OpenShift cluster state, node configurations, or cluster-level resources outside of MAS namespaces. - **No IBM Cloud Pak for Data backups** - The backup process does not support backing up CP4D itself. - **No Incremental backups** - Each backup is a full backup; incremental or differential backups are not supported. @@ -104,10 +104,12 @@ s3://bucket-name/ (or Artfactory - https://na.artifactory.swg-devops.com/artifac ├── mas--backup--catalog.tar.gz ├── mas--backup--certmanager.tar.gz ├── mas--backup--db2u-manage.tar.gz + ├── mas--backup--db2u-facilities.tar.gz ├── mas--backup--mongoce.tar.gz ├── mas--backup--sls.tar.gz - └── mas--backup--suite.tar.gz + ├── mas--backup--suite.tar.gz ├── mas--backup--app-manage.tar.gz + └── mas--backup--app-facilities.tar.gz ``` Each backup archive follows the naming convention: `-backup--.tar.gz` @@ -123,6 +125,8 @@ Each backup archive follows the naming convention: `-backup- None: # Always set to disk for pipeline as s3 upload is handled for the whole pipeline self.setParam(f"{appId}_db2_backup_vendor", "disk") + + def promptForFacilitiesAppBackup(self) -> None: + """Prompt user for Facilities application backup configuration""" + self.printH1("Facilities Application Backup") + self.printDescription( + [ + "In addition to backing up the MAS Suite, you can also backup the Facilities application.", + "This includes the Facilities namespace resources and persistent volume data.", + ] + ) + + backupFacilitiesApp = self.yesOrNo("Do you want to backup the Facilities application") + + if backupFacilitiesApp: + self.setParam("backup_facilities_app", "true") + + # Get workspace ID - try to auto-detect first + try: + instanceId = self.getParam("mas_instance_id") + workspaceId = getWorkspaceId(self.dynamicClient, instanceId) + if workspaceId: + self.printDescription([f"Detected Facilities workspace: {workspaceId}"]) + useDetected = self.yesOrNo("Use this workspace") + if useDetected: + self.setParam("facilities_workspace_id", workspaceId) + else: + workspaceId = self.promptForString("Enter Facilities workspace ID") + self.setParam("facilities_workspace_id", workspaceId) + else: + workspaceId = self.promptForString("Enter Facilities workspace ID") + self.setParam("facilities_workspace_id", workspaceId) + except Exception: + workspaceId = self.promptForString("Enter Facilities workspace ID") + self.setParam("facilities_workspace_id", workspaceId) + + # Ask about DB2 backup + self.printH2("Facilities Database Backup") + self.printDescription( + [ + "The Facilities application uses a Db2 database that should also be backed up.", + "This will backup the incluster Db2 database associated with the Facilities workspace.", + ] + ) + backupDb2 = self.yesOrNo("Do you want to backup the Facilities database (Db2)") + + if backupDb2: + self.setParam("backup_facilities_db", "true") + self.promptForDb2BackupConfiguration("facilities") + else: + self.setParam("backup_facilities_db", "false") + else: + self.setParam("backup_facilities_app", "false") + self.setParam("backup_facilities_db", "false") diff --git a/python/src/mas/cli/backup/argParser.py b/python/src/mas/cli/backup/argParser.py index 48c5bb91fc7..70c724924fd 100644 --- a/python/src/mas/cli/backup/argParser.py +++ b/python/src/mas/cli/backup/argParser.py @@ -82,6 +82,31 @@ help="Manage Db2 backup type: offline (database unavailable) or online (database remains available)", ) +facilitiesAppArgGroup = backupArgParser.add_argument_group("Facilities Application Backup", "Configure backup of the Facilities application and its database.") +facilitiesAppArgGroup.add_argument( + "--backup-facilities-app", dest="backup_facilities_app", required=False, action="store_const", const="true", help="Backup the Facilities application" +) +facilitiesAppArgGroup.add_argument("--facilities-workspace-id", dest="facilities_workspace_id", required=False, help="Facilities workspace ID") +facilitiesAppArgGroup.add_argument( + "--backup-facilities-db", + dest="backup_facilities_db", + required=False, + action="store_const", + const="true", + help="Backup the Facilities application database (Db2)", +) +facilitiesAppArgGroup.add_argument( + "--facilities-db2-namespace", dest="facilities_db2_namespace", required=False, help="Facilities Db2 namespace (default: db2u)" +) +facilitiesAppArgGroup.add_argument("--facilities-db2-instance-name", dest="facilities_db2_instance_name", required=False, help="Facilities Db2 instance name") +facilitiesAppArgGroup.add_argument( + "--facilities-db2-backup-type", + dest="facilities_db2_backup_type", + required=False, + choices=["offline", "online"], + help="Facilities Db2 backup type: offline (database unavailable) or online (database remains available)", +) + componentsArgGroup = backupArgParser.add_argument_group("Components", "Configure which components to include in the backup.") componentsArgGroup.add_argument( "--include-sls", required=False, action="store_const", const="true", default="true", help="Include SLS in backup (default: true)" diff --git a/python/src/mas/cli/restore/app.py b/python/src/mas/cli/restore/app.py index 9bc4ad5cf6c..2b98d8baf2b 100644 --- a/python/src/mas/cli/restore/app.py +++ b/python/src/mas/cli/restore/app.py @@ -94,6 +94,15 @@ def restore(self, argv): "manage_db_override_storageclass", "manage_db_storage_class_rwx", "manage_db_storage_class_rwo", + # Facilities App Restore + "restore_facilities_app", + "restore_facilities_db", + "facilities_app_override_storageclass", + "facilities_app_storage_class_rwx", + "facilities_app_storage_class_rwo", + "facilities_db_override_storageclass", + "facilities_db_storage_class_rwx", + "facilities_db_storage_class_rwo", # MongoDB Storage Class Override "override_mongodb_storageclass", "mongodb_storageclass_name", @@ -169,6 +178,9 @@ def restore(self, argv): # Prompt for Manage app restore self.promptForManageAppRestore() + # Prompt for Facilities app restore + self.promptForFacilitiesAppRestore() + self.promptForDownloadConfiguration() # Prompt for clean backup option if not provided @@ -219,6 +231,11 @@ def restore(self, argv): self.printSummary("Restore Manage App", "Yes") self.printSummary("Restore Manage incluster Db2 Database", "Yes" if self.getParam("restore_manage_db") == "true" else "No") + if self.getParam("restore_facilities_app") == "true": + self.printH2("Facilities Application Restore") + self.printSummary("Restore Facilities App", "Yes") + self.printSummary("Restore Facilities incluster Db2 Database", "Yes" if self.getParam("restore_facilities_db") == "true" else "No") + if self.getParam("sls_domain") is not None and self.getParam("sls_domain") != "": self.printH2("SLS Configuration") self.printSummary("SLS Domain", self.getParam("dro_namespace")) @@ -690,10 +707,23 @@ def configStorageClasses(self): self.setParam("manage_db_storage_class_rwx", self.getParam("storage_class_rwx")) self.setParam("manage_db_storage_class_rwo", self.getParam("storage_class_rwo")) + # Configure facilities app storage class override + if (self.getParam("storage_class_rwo") is not None and self.getParam("storage_class_rwx") != "") and ( + self.getParam("storage_class_rwx") is not None and self.getParam("storage_class_rwo") != "" + ): + self.setParam("facilities_app_override_storageclass", "true") + self.setParam("facilities_app_storage_class_rwx", self.getParam("storage_class_rwx")) + self.setParam("facilities_app_storage_class_rwo", self.getParam("storage_class_rwo")) + self.setParam("facilities_db_override_storageclass", "true") + self.setParam("facilities_db_storage_class_rwx", self.getParam("storage_class_rwx")) + self.setParam("facilities_db_storage_class_rwo", self.getParam("storage_class_rwo")) + else: self.setParam("override_mongodb_storageclass", "false") self.setParam("manage_app_override_storageclass", "false") self.setParam("manage_db_override_storageclass", "false") + self.setParam("facilities_app_override_storageclass", "false") + self.setParam("facilities_db_override_storageclass", "false") def addFilesToSecret(self, secretDict: dict, configPath: str, extension: str = "", keyPrefix: str = "") -> dict: """ @@ -763,3 +793,40 @@ def createConfigSecrets(self) -> None: logger.debug(f"Added DRO config file to secret: {path.basename(droCfgFile)}") self.configSecret = configSecret + + def promptForFacilitiesAppRestore(self) -> None: + """Prompt user for Facilities application restore configuration""" + self.printH1("Facilities Application Restore") + self.printDescription( + [ + "In addition to restoring the MAS Suite, you can also restore the Facilities application.", + "This includes DB2, Facilities namespace resources and persistent volume data.", + ] + ) + + restoreFacilitiesApp = self.yesOrNo("Do you want to restore the Facilities application") + + if restoreFacilitiesApp: + self.setParam("restore_facilities_app", "true") + + # Ask about DB2 restore + self.printH2("Facilities Database Restore") + self.printDescription( + [ + "- The Facilities application uses a Db2 database that should also be restored.", + "- This will restore the incluster Db2 database associated with the Facilities workspace.", + "- Note: This will be offline restore and the Facilities application will be unavailable during the restore.", + ] + ) + + restoreDb2 = self.yesOrNo("Do you want to restore the Facilities database (Db2)") + + # Always set to disk for pipeline as s3 download is handled for the whole pipeline + self.setParam("facilities_db2_restore_vendor", "disk") + if restoreDb2: + self.setParam("restore_facilities_db", "true") + else: + self.setParam("restore_facilities_db", "false") + else: + self.setParam("restore_facilities_app", "false") + self.setParam("restore_facilities_db", "false") diff --git a/python/src/mas/cli/restore/argParser.py b/python/src/mas/cli/restore/argParser.py index 459cc251656..2ef9ae17f44 100644 --- a/python/src/mas/cli/restore/argParser.py +++ b/python/src/mas/cli/restore/argParser.py @@ -185,6 +185,55 @@ manageAppArgGroup.add_argument("--manage-db-storage-class-rwx", required=False, dest="manage_db_storage_class_rwx", help="RWX Storage class for DB2 storage") +facilitiesAppArgGroup = restoreArgParser.add_argument_group( + "Facilities Application Restore", "Configure restore of the Facilities application and its database." +) +facilitiesAppArgGroup.add_argument( + "--restore-facilities-app", dest="restore_facilities_app", required=False, action="store_const", const="true", help="Restore the Facilities application" +) +facilitiesAppArgGroup.add_argument( + "--restore-facilities-db", + dest="restore_facilities_db", + required=False, + action="store_const", + const="true", + help="Restore the Facilities application database (Db2)", +) + +facilitiesAppArgGroup.add_argument( + "--override-facilities-app-storageclass", + dest="facilities_app_override_storageclass", + required=False, + action="store_const", + const="true", + help="Override Facilities Application PVC storageclass", +) + +facilitiesAppArgGroup.add_argument( + "--facilities-app-storage-class-rwx", required=False, dest="facilities_app_storage_class_rwx", help="ReadWriteMany Storage class for Facilities App PVC" +) + +facilitiesAppArgGroup.add_argument( + "--facilities-app-storage-class-rwo", required=False, dest="facilities_app_storage_class_rwo", help="ReadWriteOnce Storage class for Facilities App PVC" +) + +facilitiesAppArgGroup.add_argument( + "--override-facilities-db-storageclass", + dest="facilities_db_override_storageclass", + required=False, + action="store_const", + const="true", + help="Override Facilities database (Db2) PVC storageclass", +) + +facilitiesAppArgGroup.add_argument( + "--facilities-db-storage-class-rwo", required=False, dest="facilities_db_storage_class_rwo", help="RWO Storage class for Facilities DB2 storage" +) + +facilitiesAppArgGroup.add_argument( + "--facilities-db-storage-class-rwx", required=False, dest="facilities_db_storage_class_rwx", help="RWX Storage class for Facilities DB2 storage" +) + componentsArgGroup = restoreArgParser.add_argument_group("Components", "Configure which components to include in the restore.") componentsArgGroup.add_argument( diff --git a/tekton/src/params/backup.yml.j2 b/tekton/src/params/backup.yml.j2 index ebccfb3f74a..39d6d691348 100644 --- a/tekton/src/params/backup.yml.j2 +++ b/tekton/src/params/backup.yml.j2 @@ -344,4 +344,89 @@ - name: backup_s3_secret_key type: string description: S3 secret key for Db2 backups + default: "" + +# Facilities Application Backup/Restore Configuration +# ----------------------------------------------------------------------------- +- name: backup_facilities_app + type: string + description: Whether to backup the Facilities application (true/false) + default: "false" + +- name: backup_facilities_db + type: string + description: Whether to backup the Facilities database (Db2) (true/false) + default: "false" + +- name: restore_facilities_app + type: string + description: Whether to restore the Facilities application (true/false) + default: "false" + +- name: restore_facilities_db + type: string + description: Whether to restore the Facilities database (Db2) (true/false) + default: "false" + +- name: facilities_workspace_id + type: string + description: Facilities workspace ID for application backup + default: "" + +- name: facilities_app_override_storageclass + type: string + description: Whether to override the storage class in Facilities App PVC (true/false) + default: "false" + +- name: facilities_app_storage_class_rwx + type: string + description: Storage class for Facilities ReadWriteMany Storage + default: "" + +- name: facilities_app_storage_class_rwo + type: string + description: Storage class for Facilities ReadWriteOnce Storage + default: "" + + +# Facilities Db2 Backup/Restore Configuration +# ----------------------------------------------------------------------------- +- name: facilities_db2_namespace + type: string + description: Facilities Db2 namespace for backup + default: "" + +- name: facilities_db2_instance_name + type: string + description: Facilities Db2 instance name for backup + default: "" + +- name: facilities_db2_backup_type + type: string + description: Type of Facilities Db2 backup (online or offline) + default: "online" + +- name: facilities_db2_backup_vendor + type: string + description: Storage backend for Facilities Db2 backup files (disk or s3) + default: "disk" + +- name: facilities_db2_restore_vendor + type: string + description: Storage backend for Facilities Db2 restore files (disk or s3) + default: "disk" + +- name: facilities_db_override_storageclass + type: string + description: Whether to override the storage class in Facilities database (Db2) PVC (true/false) + default: "false" + +- name: facilities_db_storage_class_rwx + type: string + description: Storage class for Facilities DB2 ReadWriteMany Storage + default: "" + +- name: facilities_db_storage_class_rwo + type: string + description: Storage class for Facilities DB2 ReadWriteOnce Storage default: "" \ No newline at end of file diff --git a/tekton/src/pipelines/mas-backup.yml.j2 b/tekton/src/pipelines/mas-backup.yml.j2 index 44f57b4a2a5..295b6d778e7 100644 --- a/tekton/src/pipelines/mas-backup.yml.j2 +++ b/tekton/src/pipelines/mas-backup.yml.j2 @@ -310,7 +310,87 @@ spec: runAfter: - suite-backup - # 11. Upload Backup Archive (Optional) + # 11. Backup Facilities Database (Db2) - Optional + # ------------------------------------------------------------------------- + - name: facilities-db2-backup + timeout: "0" + when: + - input: "$(params.backup_facilities_db)" + operator: in + values: ["true", "True"] + params: + {{ lookup('template', pipeline_src_dir ~ '/taskdefs/common/cli-params.yml.j2') | indent(8) }} + + - name: mas_instance_id + value: $(params.mas_instance_id) + + - name: db2_namespace + value: $(params.facilities_db2_namespace) + - name: db2_instance_name + value: $(params.facilities_db2_instance_name) + - name: db2_action + value: backup + - name: mas_application_id + value: facilities + + # Backup specific parameters + - name: db2_backup_version + value: $(params.backup_version) + - name: backup_type + value: $(params.facilities_db2_backup_type) + - name: backup_vendor + value: $(params.facilities_db2_backup_vendor) + - name: backup_s3_endpoint + value: $(params.backup_s3_endpoint) + - name: backup_s3_bucket + value: $(params.backup_s3_bucket) + - name: backup_s3_access_key + value: $(params.backup_s3_access_key) + - name: backup_s3_secret_key + value: $(params.backup_s3_secret_key) + + taskRef: + kind: Task + name: mas-devops-db2 + workspaces: + - name: backups + workspace: shared-backups + runAfter: + - prepare-backup-workspace + + # 12. Backup Facilities Application - Optional + # ------------------------------------------------------------------------- + - name: facilities-app-backup + timeout: "0" + when: + - input: "$(params.backup_facilities_app)" + operator: in + values: ["true", "True"] + params: + {{ lookup('template', pipeline_src_dir ~ '/taskdefs/common/cli-params.yml.j2') | indent(8) }} + + - name: mas_instance_id + value: $(params.mas_instance_id) + - name: mas_workspace_id + value: $(params.facilities_workspace_id) + - name: mas_app_id + value: facilities + + - name: mas_backup_dir + value: /workspace/backups + - name: mas_app_backup_version + value: $(params.backup_version) + + taskRef: + kind: Task + name: mas-devops-suite-app-backup + workspaces: + - name: backups + workspace: shared-backups + runAfter: + - suite-backup + + # 13. Upload Backup Archive (Optional) # ------------------------------------------------------------------------- - name: upload-backup-archive timeout: "0" @@ -358,6 +438,8 @@ spec: - suite-backup - manage-db2-backup - manage-app-backup + - facilities-db2-backup + - facilities-app-backup finally: # 1. Clean Backup Workspaces (Optional) diff --git a/tekton/src/pipelines/mas-restore.yml.j2 b/tekton/src/pipelines/mas-restore.yml.j2 index ab7495de7bc..b04bff332c7 100644 --- a/tekton/src/pipelines/mas-restore.yml.j2 +++ b/tekton/src/pipelines/mas-restore.yml.j2 @@ -481,6 +481,83 @@ spec: - manage-db2-restore - suite-verify + # 15. Restore Facilities Database (Db2) - Optional + # ------------------------------------------------------------------------- + - name: facilities-db2-restore + timeout: "0" + when: + - input: "$(params.restore_facilities_db)" + operator: in + values: ["true", "True"] + params: + {{ lookup('template', pipeline_src_dir ~ '/taskdefs/common/cli-params.yml.j2') | indent(8) }} + + - name: db2_action + value: restore + - name: mas_application_id + value: facilities + - name: mas_config_dir + value: /workspace/backups/configs + + # restore specific parameters + - name: db2_backup_version + value: $(params.restore_version) + - name: backup_vendor + value: $(params.facilities_db2_restore_vendor) + - name: override_storageclass + value: $(params.facilities_db_override_storageclass) + - name: custom_storage_class_rwx + value: $(params.facilities_db_storage_class_rwx) + - name: custom_storage_class_rwo + value: $(params.facilities_db_storage_class_rwo) + + taskRef: + kind: Task + name: mas-devops-db2 + workspaces: + - name: backups + workspace: shared-backups + runAfter: + - cert-manager + + # 16. Restore Facilties Application - Optional + # ------------------------------------------------------------------------- + - name: facilities-app-restore + timeout: "0" + when: + - input: "$(params.restore_facilities_app)" + operator: in + values: ["true", "True"] + params: + {{ lookup('template', pipeline_src_dir ~ '/taskdefs/common/cli-params.yml.j2') | indent(8) }} + + - name: mas_instance_id + value: $(params.mas_instance_id) + - name: mas_app_id + value: facilities + + - name: mas_backup_dir + value: /workspace/backups + - name: mas_app_backup_version + value: $(params.restore_version) + + - name: override_storageclass + value: $(params.facilities_app_override_storageclass) + - name: facilities_custom_storage_class_rwx + value: $(params.facilities_app_storage_class_rwx) + - name: facilities_custom_storage_class_rwo + value: $(params.facilities_app_storage_class_rwo) + + taskRef: + kind: Task + name: mas-devops-suite-app-restore + workspaces: + - name: backups + workspace: shared-backups + runAfter: + - facilities-db2-restore + - suite-verify + finally: # 1. Clean Backup Workspaces (Optional) # -------------------------------------------------------------------------