// Module included in the following assemblies:
//
// * backup_and_restore/application_backup_and_restore/installing/configuring-oadp-multiple-bsl.adoc


:_mod-docs-content-type: PROCEDURE
[id="oadp-multiple-bsl-use-case_{context}"]
= Configuring two backup BSLs with different cloud credentials

[role="_abstract"]
Configure two backup storage locations with different cloud credentials to back up applications to multiple storage targets. With this setup, you can distribute backups across different storage providers for redundancy.


.Prerequisites

* You must install the {oadp-short} Operator.
* You must configure two backup storage locations: AWS S3 and Multicloud Object Gateway (MCG).
* You must have an application with a database deployed on a Red Hat OpenShift cluster.

.Procedure

. Create the first `Secret` for the AWS S3 storage provider with the default name by running the following command:
+
[source,terminal]
----
$ oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=<aws_credentials_file_name>
----
+
where:
+
`<aws_credentials_file_name>`:: Specifies the name of the cloud credentials file for AWS S3.

. Create the second `Secret` for MCG with a custom name by running the following command:
+
[source,terminal]
----
$ oc create secret generic mcg-secret -n openshift-adp --from-file cloud=<MCG_credentials_file_name>
----
+
where:
+
`<MCG_credentials_file_name>`:: Specifies the name of the cloud credentials file for MCG. Note the name of the `mcg-secret` custom secret.

. Configure the DPA with the two BSLs as shown in the following example.
+
.Example DPA
[source,yaml]
----
apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
metadata:
  name: two-bsl-dpa
  namespace: openshift-adp  
spec:
  backupLocations:
  - name: aws
    velero:
      config:
        profile: default
        region: <region_name>
      credential:
        key: cloud
        name: cloud-credentials
      default: true
      objectStorage:
        bucket: <bucket_name>
        prefix: velero
      provider: aws
  - name: mcg
    velero:
      config:
        insecureSkipTLSVerify: "true"
        profile: noobaa
        region: <region_name>
        s3ForcePathStyle: "true"
        s3Url: <s3_url>
      credential:
        key: cloud
        name: mcg-secret
      objectStorage:
        bucket: <bucket_name_mcg>
        prefix: velero
      provider: aws
  configuration:
    nodeAgent:
      enable: true
      uploaderType: kopia
    velero:
      defaultPlugins:
      - openshift
      - aws
----
+
where:
+
`<region_name>`:: Specifies the AWS region for the bucket.
`<bucket_name>`:: Specifies the AWS S3 bucket name.
`region: <region_name>`:: Specifies the region, following the naming convention of the documentation of MCG.
`<s3_url>`:: Specifies the URL of the S3 endpoint for MCG.
`mcg-secret`:: Specifies the name of the custom secret for MCG storage.
`<bucket_name_mcg>`:: Specifies the MCG bucket name.

. Create the DPA by running the following command:
+
[source,terminal]
----
$ oc create -f <dpa_file_name>
----
+
where:
+
`<dpa_file_name>`:: Specifies the file name of the DPA you configured.

. Verify that the DPA has reconciled by running the following command:
+
[source,terminal]
----
$ oc get dpa -o yaml
----

. Verify that the BSLs are available by running the following command:
+
[source,terminal]
----
$ oc get bsl
----
+
.Example output
[source,terminal]
----
NAME   PHASE       LAST VALIDATED   AGE     DEFAULT
aws    Available   5s               3m28s   true
mcg    Available   5s               3m28s   
----

. Create a backup CR with the default BSL. 
+
[NOTE]
====
In the following example, the `storageLocation` field is not specified in the backup CR.
====
+
.Example backup CR
[source,yaml]
----
apiVersion: velero.io/v1
kind: Backup
metadata:
  name: test-backup1
  namespace: openshift-adp
spec:
  includedNamespaces:
  - <mysql_namespace>
  defaultVolumesToFsBackup: true
----
+
where:
+
`<mysql_namespace>`:: Specifies the namespace for the application installed in the cluster.

. Create a backup by running the following command:
+
[source,terminal]
----
$ oc apply -f <backup_file_name>
----
+
where:
+
`<backup_file_name>`:: Specifies the name of the backup CR file.

. Verify that the backup completed with the default BSL by running the following command:
+
[source,terminal]
----
$ oc get backups.velero.io <backup_name> -o yaml
----
+
where:
+
`<backup_name>`:: Specifies the name of the backup.

. Create a backup CR by using MCG as the BSL. In the following example, note that the second `storageLocation` value is specified at the time of backup CR creation.
+
.Example backup `CR`
[source,yaml]
----
apiVersion: velero.io/v1
kind: Backup
metadata:
  name: test-backup1
  namespace: openshift-adp
spec:
  includedNamespaces:
  - <mysql_namespace>
  storageLocation: mcg
  defaultVolumesToFsBackup: true
----
+
where:
+
`<mysql_namespace>`:: Specifies the namespace for the application installed in the cluster.
`mcg`:: Specifies the second storage location.

. Create a second backup by running the following command:
+
[source, terminal]
----
$ oc apply -f <backup_file_name>
----
+
where:
+
`<backup_file_name>`:: Specifies the name of the backup CR file.

. Verify that the backup completed with the storage location as MCG by running the following command:
+
[source, terminal]
----
$ oc get backups.velero.io <backup_name> -o yaml
----
+
where:
+
`<backup_name>`:: Specifies the name of the backup.