diff --git a/.github/workflows/merge-check-always.yml b/.github/workflows/merge-check-always.yml index 6f5cb7a3..c40f9e44 100644 --- a/.github/workflows/merge-check-always.yml +++ b/.github/workflows/merge-check-always.yml @@ -4,8 +4,15 @@ on: pull_request: paths-ignore: - 'infrastructure/cluster/flux/**' + - '**.tf' jobs: + terraform-validate: + name: "Validate Terraform files" + runs-on: ubuntu-latest + steps: + - run: 'echo "No check required"' + flux-validate: name: "Validate Flux files" runs-on: ubuntu-latest diff --git a/.github/workflows/merge-check-paths.yml b/.github/workflows/merge-check-paths.yml index 5673d117..6c286b36 100644 --- a/.github/workflows/merge-check-paths.yml +++ b/.github/workflows/merge-check-paths.yml @@ -23,7 +23,7 @@ jobs: uses: ./.github/actions/tools - name: Validate Flux Manifests - working-directory: infrastructure/cluster/flux-v2 + working-directory: infrastructure/cluster/flux run: | #!/usr/bin/env bash diff --git a/infrastructure/cluster/flux/reana/reana-helm_repository.yaml b/infrastructure/cluster/flux/reana/reana-helm_repository.yaml new file mode 100644 index 00000000..5304d73e --- /dev/null +++ b/infrastructure/cluster/flux/reana/reana-helm_repository.yaml @@ -0,0 +1,8 @@ +apiVersion: source.toolkit.fluxcd.io/v1 +kind: HelmRepository +metadata: + name: reana + namespace: reana +spec: + interval: 5m + url: https://reanahub.github.io/reana/ diff --git a/infrastructure/cluster/flux/reana/reana-ingress.yaml b/infrastructure/cluster/flux/reana/reana-ingress.yaml new file mode 100644 index 00000000..71cde86e --- /dev/null +++ b/infrastructure/cluster/flux/reana/reana-ingress.yaml @@ -0,0 +1,43 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + cert-manager.io/cluster-issuer: letsencrypt + ingress.kubernetes.io/ssl-redirect: "true" + meta.helm.sh/release-name: reana + meta.helm.sh/release-namespace: reana + traefik.frontend.entryPoints: http,https + name: reana-ingress + namespace: reana +spec: + ingressClassName: nginx + tls: + - secretName: cert-manager-tls-ingress-secret-reana + hosts: + - reana-vre.cern.ch + rules: + - host: reana-vre.cern.ch + http: + paths: + - backend: + service: + name: reana-server + port: + number: 80 + path: /api + pathType: Prefix + - backend: + service: + name: reana-server + port: + number: 80 + path: /oauth + pathType: Prefix + - backend: + service: + name: reana-ui + port: + number: 80 + path: / + pathType: Prefix + diff --git a/infrastructure/cluster/flux/reana/reana-namespace.yaml b/infrastructure/cluster/flux/reana/reana-namespace.yaml new file mode 100644 index 00000000..46ca11ac --- /dev/null +++ b/infrastructure/cluster/flux/reana/reana-namespace.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + labels: + name: reana + name: reana diff --git a/infrastructure/cluster/flux/reana/reana-release.yaml b/infrastructure/cluster/flux/reana/reana-release.yaml new file mode 100644 index 00000000..da45c3bf --- /dev/null +++ b/infrastructure/cluster/flux/reana/reana-release.yaml @@ -0,0 +1,111 @@ +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: reana + namespace: reana + annotations: + flux.weave.works/automated: "false" + +spec: + releaseName: reana + interval: 5m + chart: + spec: + sourceRef: + kind: HelmRepository + name: reana + namespace: reana + chart: reana + interval: 1m + version: 0.9.3 + + valuesFrom: + - kind: Secret + name: reana-vre-iam-client + valuesKey: client_id + targetPath: secrets.login.escape-iam.consumer_key + - kind: Secret + name: reana-vre-iam-client + valuesKey: client_secret + targetPath: secrets.login.escape-iam.consumer_secret + - kind: Secret + name: reana-db + valuesKey: user + targetPath: secrets.database.user + - kind: Secret + name: reana-db + valuesKey: password + targetPath: secrets.database.password + + values: + + shared_storage: + backend: cephfs + volume_size: 1000 + access_modes: ReadWriteMany + cephfs: + provisioner: manila-provisioner + type: "Meyrin CephFS" + availability_zone: nova + os_secret_name: os-trustee + os_secret_namespace: kube-system + cephfs_os_share_id: a6a85651-0b95-4e31-89ac-4ff31037f342 + cephfs_os_share_access_id: 1cd91c50-8cc6-449d-ae39-83249aca398b + + components: + reana_ui: + enabled: true + local_users: false + reana_db: + enabled: false + reana_server: + environment: + REANA_USER_EMAIL_CONFIRMATION: false + # reana_workflow_controller: + # image: docker.io/mdonadoni/reana-workflow-controller:0.9.1-7e03f0a-cvmfs + # reana_job_controller: + # image: docker.io/reanahub/reana-job-controller-htcondorcern-slurmcern:0.9.1 + + compute_backends: + - "kubernetes" + - "htcondorcern" + - "slurmcern" + + notifications: + enabled: true + email_config: + receiver: escape-cern-ops@cern.ch + sender: escape-cern-ops@cern.ch + login: "" + smtp_server: cernmx.cern.ch + smtp_port: 25 + + reana_hostname: "reana-vre.cern.ch" + + db_env_config: + REANA_DB_NAME: "reana" + REANA_DB_PORT: "6600" + REANA_DB_HOST: "dbod-vre.cern.ch" + # There are two more environment variables that should be set in order + # to connect to a database: + # REANA_DB_USERNAME: containing the database user name. + # REANA_DB_PASSWORD: containing the password for the user previously set. + # Both environment variables should be set inside a Kubernetes secret: + # `[release-name]-db` + + login: + - name: "escape-iam" + type: "keycloak" + config: + title: "ESCAPE IAM" + base_url: "https://iam-escape.cloud.cnaf.infn.it" + realm_url: "https://iam-escape.cloud.cnaf.infn.it" + auth_url: "https://iam-escape.cloud.cnaf.infn.it/authorize" + token_url: "https://iam-escape.cloud.cnaf.infn.it/token" + userinfo_url: "https://iam-escape.cloud.cnaf.infn.it/userinfo" + + ingress: + enabled: false + + traefik: + enabled: false diff --git a/infrastructure/cluster/flux/reana/reana-storage.yaml b/infrastructure/cluster/flux/reana/reana-storage.yaml new file mode 100644 index 00000000..3764653e --- /dev/null +++ b/infrastructure/cluster/flux/reana/reana-storage.yaml @@ -0,0 +1,54 @@ +# Follow the instructions in +# https://kubernetes.docs.cern.ch/docs/storage/fileshares/#using-existing-shares +# +# Because we are recreating the cluster, the share already existed and we don't want to +# create a new one. We will use the existing share. +# +apiVersion: v1 +kind: PersistentVolume +metadata: + name: manila-preprovisioned-pv-reana-share +spec: + csi: + driver: cephfs.manila.csi.openstack.org + # NOTE: volumeHandle MUST be unique across all PersistentVolume objects in the cluster. + # The value itself can be arbitrary. You can use metadata.name for consistency. + + # These values are just IDs and can be shared publically in github. + volumeHandle: manila-preprovisioned-pv-reana-share + volumeAttributes: + shareID: a6a85651-0b95-4e31-89ac-4ff31037f342 + shareAccessID: 1cd91c50-8cc6-449d-ae39-83249aca398b + + # CephFS shares can be mounted using either FUSE or kernel CephFS client. + # FUSE is used by default. Uncomment and modify the parameter below to change + # the mount tool. See openstack-manila-csi docs to see all supported parameters. + # cephfs-mounter: kernel + + nodeStageSecretRef: + name: os-trustee + namespace: kube-system + nodePublishSecretRef: + name: os-trustee + namespace: kube-system + accessModes: + - ReadWriteMany + capacity: + storage: 1000Gi +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: manila-preprovisioned-pvc-reana + namespace: reana +spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 1000Gi + # volumeName must match the name we have set in the PersistentVolume defined above. + volumeName: manila-preprovisioned-pv-reana-share + # Storage class name must be set to an empty string "" + # to disable dynamic provisioning. + storageClassName: "" diff --git a/infrastructure/scripts/reana_secrets.sh b/infrastructure/scripts/reana_secrets.sh new file mode 100644 index 00000000..34b3e03d --- /dev/null +++ b/infrastructure/scripts/reana_secrets.sh @@ -0,0 +1,55 @@ +##!/bin/bash + +echo "Start REANA secrets scripts" + +# kubeseal controller namespace +CONTROLLER_NS="sealed-secrets" +CONTROLLER_NAME="sealed-secrets-controller" + +# REANA namespace +REANA_NS="reana" + +# Output dir +SECRETS_DIR="/root/software/vre/infrastructure/secrets/reana" +RAW_SECRETS_TMP_DIR="/root/software/vre/infrastructure/secrets/tmp_local_secrets" + + +echo "Create REANA DB secret" + +DB_OUTPUT_SECRET="reana-db.yaml" +RAW_DB_FILE_SECRET=${RAW_SECRETS_TMP_DIR}/${DB_OUTPUT_SECRET} + +cat ${RAW_DB_FILE_SECRET} | kubeseal --controller-name=${CONTROLLER_NAME} --controller-namespace=${CONTROLLER_NS} --format yaml --namespace=${REANA_NS} > ${SECRETS_DIR}/ss_${DB_OUTPUT_SECRET} +kubectl apply -f ${SECRETS_DIR}/ss_${DB_OUTPUT_SECRET} + + +echo "Create REANA Admin Access Token secret" + +ADMIN_ACCOUNT_SECRET='reana-admin-access-token.yaml' +RAW_ADMIN_FILE_SECRET=${RAW_SECRETS_TMP_DIR}/${ADMIN_ACCOUNT_SECRET} + +cat ${RAW_ADMIN_FILE_SECRET} | kubeseal --controller-name=${CONTROLLER_NAME} --controller-namespace=${CONTROLLER_NS} --format yaml --namespace=${REANA_NS} > ${SECRETS_DIR}/ss_${ADMIN_ACCOUNT_SECRET} +kubectl apply -f ${SECRETS_DIR}/ss_${ADMIN_ACCOUNT_SECRET} + + +echo "Create REANA IAM client credentials" + +REANA_IAM_ACCOUNT_SECRET='reana-vre-iam-client.yaml' +RAW_REANA_IAM_FILE_SECRET=${RAW_SECRETS_TMP_DIR}/${REANA_IAM_ACCOUNT_SECRET} + +cat ${RAW_REANA_IAM_FILE_SECRET} | kubeseal --controller-name=${CONTROLLER_NAME} --controller-namespace=${CONTROLLER_NS} --format yaml --namespace=${REANA_NS} > ${SECRETS_DIR}/ss_${REANA_IAM_ACCOUNT_SECRET} +kubectl apply -f ${SECRETS_DIR}/ss_${REANA_IAM_ACCOUNT_SECRET} + + +# echo "Create 'REANA secrets' secret" +# # This secret is unknow for what is used - no doc :harold: +# # Kept commented for the moment + +# REANA_SECRETS_SECRET='reana-secrets.yaml' +# RAW_REANA_SECRETS_FILE_SECRET=${RAW_SECRETS_TMP_DIR}/${REANA_SECRETS_SECRET} + +# cat ${RAW_REANA_SECRETS_FILE_SECRET} | kubeseal --controller-name=${CONTROLLER_NAME} --controller-namespace=${CONTROLLER_NS} --format yaml --namespace=${REANA_NS} > ${SECRETS_DIR}/ss_${REANA_SECRETS_SECRET} +# kubectl apply -f ${SECRETS_DIR}/ss_${REANA_SECRETS_SECRET} + + +echo "END REANA Secret Script" \ No newline at end of file diff --git a/infrastructure/secrets/reana/ss_reana-admin-access-token.yaml b/infrastructure/secrets/reana/ss_reana-admin-access-token.yaml index 7846bfb7..850adbc2 100644 --- a/infrastructure/secrets/reana/ss_reana-admin-access-token.yaml +++ b/infrastructure/secrets/reana/ss_reana-admin-access-token.yaml @@ -1,3 +1,4 @@ +--- apiVersion: bitnami.com/v1alpha1 kind: SealedSecret metadata: @@ -6,11 +7,10 @@ metadata: namespace: reana spec: encryptedData: - ADMIN_ACCESS_TOKEN: AgASTOlDJRoyCpctnYvK18ovpqhwnAdpPiuU8BVOyTp/0eHAsNy+O3EhDZa7xFJdarW/mBIN/swx4zJekMAj0lxFlFRzKU+aJzZc6I0AWULo3hx2v/6jl8MzSAu7mzCqlRg4jWb6X9T3krfdF7B7Vs4VqZfhtCCGzXCh74uHxZAENuJwKVqD1CqqniACJUlBZNENOfcyoJykDauKXLbhwkw3WJRWDdr/ZBSD9Oj6k1R95sjEZ5qvXV9UrOveVk2ZuW8wRHHPKkd9SgbrPkqNdEmUFFnTeydIK2lbTqWtJUafNodLObRyjSo0xcbYdSC8uQpwTiyXgrtIRio6tpe972JpxqKdkh9PrtUSsehczKHe9uCg5qNNST0fUhVylevqSQxaGmlUPylIVccQKJbiHPhrkxWkPYq1I49xh1kuDBQwMTOScBrkOrIt6C3EmziATgGA+RBsL304vyyI16bInEb4H8OWleEQeOLAF2y+IuKiKMoPoRS9t40rqzxZyhAvecE77R2fjVdtcC+/0M9jf05WPr+MUp3C/18YYHfFwdr1TvUH5myy5IlABzXjZYM9P49GkIkidqQ6yzkK4dtS8bW4ou0Z/JSZr94jLZSwlar3o//BpvP6i9fw4KmG5tgfXOjU8UhC2fXVX/DPi8e0Nn7MDiBPHf6lkIBNzCjvTJP+STU6S78oe71QK7l9xxB6P3tEU/EIQ2z6LXo6pZLbHoCWYOuimLG6 + ADMIN_ACCESS_TOKEN: AgCYz6Ap/GSKzrxQb7IaYD+kn7Re+jdGmgfmEZfe6yJy9xSbkPXMRiksXlW8lV6DhllKPnMVSxE/Cxua8RwauEtyrP5lli1aDdSj71LiPx6NPD1QgbhfCv7MJuaTHtWIxEuKGUmogQoECVynhglDHjLApvRs9lQLOOoTNX87Fc0bu9n51A1haamZ45iSqKOIrfoaLey3WXtwn4M0r4SVqQRD3WQsW3JDonHhmicfzOQJYi9rlQwm8DkONq33uiSYlvciCjjjNcvHb/9XqmttVNWdnwe2A5K5syf6g5PiCrobnHhp6NPau3C7oSZnW0XAyrUqb1HMxvLipcgSK+2fL6n3STf0FISrjT+ukbMFeqs5UzA5oXFV6cO2ZjfV9LDQrPkQYzGrMXOXoUJX+cDpAOAGfVFALrVvKft0NP+fK4e4L5J6atV4S5PIjVbLwUYaIx1aD7EWAteLUoT3Bsr38ebkcrb0pAicuBsLvF7Adsx3fWmL4r08j7R3SKoD17YYjW2mHy+TqXi0+UhYpdqUpvuck8WrsV7N4mWojT0VEgAgcPgD2LT2DWHcwP58M2zEkU4b46N8dSJMhZhK7ol13G+Ht8xEKAnwQBFz5/BnfF13sW7U4jcXxUhJDHW2UOOOdfHbnW2gqDhtmJ6Z30rUM9t2GJ+4yAewOHVa1CVSIrwDyG8zjK/vSyycrR4oMbA2jguAaV+u6B8fBUFGzOs19suxfn28YI8/ template: metadata: creationTimestamp: null name: reana-admin-access-token namespace: reana type: Opaque - diff --git a/infrastructure/secrets/reana/ss_reana-db.yaml b/infrastructure/secrets/reana/ss_reana-db.yaml new file mode 100644 index 00000000..1315e688 --- /dev/null +++ b/infrastructure/secrets/reana/ss_reana-db.yaml @@ -0,0 +1,17 @@ +--- +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + creationTimestamp: null + name: reana-db + namespace: reana +spec: + encryptedData: + password: AgAAIVxBG7DRcCPJngXOaEdSBWKZvVMeDThMZpTaVWubk5TxVPwwVTHY+Bm2bZifG1gwd08XU250mYCuQ0mu7q7KPwM/nWrL6v0HHq142LayjDnhfES82YXJuMbjQdsFY0IiUI23gKIL9Pw84p+guEQrdbzHgYA7NQTijrD15U9h4Idj4LgT0nKL1to70QAJXUN+HsvCrfKw8ie0/LzCSp9U8JTWFyQ6jq9utSAWglbmp7pk3W0g49wP6MyYfQDfpx1KzsI48YtSgoW47uN9O0nz8cB8OgszyQqC4so/Q8yO7uASYjaW10ED1fog6wLBqK1TnTbNEBP2GgGRWpExvTcuBJD0b53LGv5Ss1ABg8N3IncxEujOnGVtudoQ8WBrPcQwBgv7gXsMDJY8ag2wEkIQ/iI5F5Xm5xoDptqf9jl1g4AznJkQ/H4LvHuxqo7D+WBx9B4hufyQ6VNsEbHHpg/ZHa9ws/l3UQeofgxqM7P8yI3hySbcTO/j+d5TJEhEmDgcCxiE53TY/eWtpgzwzVI+iigEJIUWa0r0iP/P7C1zLkOGrvqWEJ4i8WzaS79Ap2hvaUkg/lubtnnd/8WURkJO1WIV0IeZfNOP81MeA6W5uKMTUBQU9V+BJK4q9t0Uv5IPbiMpLC4CoXNkgcEhx48e5o0MQfbiLeXy+BFSpOX8hAziGdBD0xvGVtW9nKYQBFwPpC3pkBPf976gde6UDdxuo7ObM0pX9wqKS9gjow== + user: AgCU5qbzGKuyTODyawryV0QSO8nLzB2dDZa9R+yM5E/ZCc8MhIgRMMv9Swrs8jL0YbyKEM4XxCos9io02Oc8gwJZSO9Z5grai0Mc+J1ae/ukKKSn53u4DjP24UQQGtRiSKJSxq2T0bpFk18fqSJJK3TPObS6ZfBeni/hJscysYZexBassHhraAAXXSLFNnGPSAt51TFiVKv2qejcxC7n2dWYPVSyjIRErfZU+oSvTma6OTEM3WhnPYhH4PG+Rlm1E3C1WbpQfu1JzCqBr0t9nTlVyB/shdpkn+IxS+ZLQHBRU45abJDxtPT6jet2ZZXNnoPQrdmv2JBs8i0OilZ10IH8H75DZe57FrJ0AojGAyhno2F2roSUxQ3U5Ln8QcjqJiH6AF4HJih8mlYCuHj4YI5bapXJPe/Aq34zDE5OnUHkb4W8x1l2wldwiCEKO9LzyrJm1JCo3qkWaFKARvJJ4fB5Sa8DdxfmUyngezi82eMSE7zOeOp8Vss0FungFx/uml2wawFqmhg5pxrU+/NJ8dqpwh2L3vJ5XqqGBwUSuJmnGha8r7aM0n+uuuvS9EBNRutLGt3uuRRiNydR3qe7bA+Mww4eIb4WulfsbnsM9A7vyGWc7nEFlQON6WA1bHe+oRxKvDR9Sy+iUbyEINo976VsgJz/JQskHltiBil1nImOdyK7yDD3WooQxy3r03VdgBsfIToZFg== + template: + metadata: + creationTimestamp: null + name: reana-db + namespace: reana + type: Opaque diff --git a/infrastructure/secrets/reana/ss_reana-vre-iam-client.yaml b/infrastructure/secrets/reana/ss_reana-vre-iam-client.yaml index 4be0355c..86fde25b 100644 --- a/infrastructure/secrets/reana/ss_reana-vre-iam-client.yaml +++ b/infrastructure/secrets/reana/ss_reana-vre-iam-client.yaml @@ -1,3 +1,4 @@ +--- apiVersion: bitnami.com/v1alpha1 kind: SealedSecret metadata: @@ -6,12 +7,11 @@ metadata: namespace: reana spec: encryptedData: - client_id: AgBaa6OrouO7NlbSWsa+KXVjIUl9Ux/ZgjAkWdpq2O3L8HkECgsm3yOEfYxOvbRC0mdwyVPhiu8ksSmCTEQDqy2hL0PwK6pJ2X3uthB2F8j28D/BS/UTWnh5p/XO/6a+Pz86XgzrT+wGQw196PcRBtykuc336MnYbLySiZj21nzIBjMduNEXF85ScH0vWDjyFPcJIJURbJvzRfly/CwkTew9ntiJ4fKg52ciR9ZVJvi3Kr6k9C1zQoy9qHXIUtIGQbpwQgJ2ZwpPDnrk9v8GHk90jJD3khofLCXO0ITY2e0X965hOoiwlMFLmFFvG++4oEKOPCY2/E9ooyJwnBtlzrH38astrBrc/Ya5pVpSGUqJrUGd8jdRABoF5AR26wX8vsUU/4Tbysm1V4/qlWN/ad647//nW3h6mMh3hEX9E+h6ut8I99esvCRaBU4AkE61Rqy5u0oNQ9Ly+I+Sl8Rh8d1AvcQQbImar9T7Hn4gnPNAShKu5X2McelKjtmVtD3lX83bzcT650ieI5N50BkycqeLT1g+5dUZxac/HWyDN9JzcVUaa18ZSH4xK3GhDUXJFOsI4vlb/M0581i1zNtP1ALZ3VtZmgGvOgYS0/eCluSTaZ9DJ1LXDKQlbApEstsUe0/JxyNFwNYZP2fC8PSC417Rb6uze4G2L5J8PXj+tsYTqcv10WK4HUXagadASdq8IZy7owXgICLel0kW05jCqx8lfWC7Kuu+/Xhbz4aOlo0cB2PavW0= - client_secret: AgBdIm3s7ObdkEdfV4yWBsizibBmoWupysX1ZZNr5IG26G1Ex645EP/dBniOevvI7Iu+zqcivWRHg6swTeZuT9Fr5aXVRD0d+Td3c01GCpWa/9mMZL3s5hhutVUGHIbNj0OaGudRVNrNyPAg2CLcYERM5EapBm0KH67l9PVyAT7AqmQszsQujOVmAn9v+I1BBbw4aUpFegYfzaKT8NMnaaVMMY3pkQwQzStYXcIYevT3sl9tZtzHvrngCaKdE5flJZJlaci3gWIS/dEY14CNweKRo/jxHkKfSSf1E0+I+nGwcJFDKF8SIiWR0IMWrx3O3NCoceqVwVA59OKVbCtP9C0L5bvYXfI5HnJCDsmfmrnDKhlMmf5RWl2dRs2cSx8eVJJxEzUV+/q8BUOcR8WIUVOnVZaJo9Zrf5OSG7l3dPPvTcD1pOKuWu/vO5XfDFgHHk4kyMpKm8uYkICTcZ+TPBUP2CXwVEA0uMOajxoMea3E+HuCA0dufYnItPj5zXlU2yfKS9ssc959EHGNKupNbnsbC5oisl7x1mhXIJj9R0HFFIIAp9LBjd1G+FFsX/0DS5pkDwgLzjwYD7Es/fostcJU0kt2Jw5a2FDCctvgBpgs+ks4HtFP6e8A5j96SgX1XT9xfuZZ3CMIYXmTm2zdrMb88aiT07awk5Hb59f6ygBOsMVsF0uO8w3i7m8AHRtW1zgrOk4CaH8KhRxrc8EHCQiNfnSVBnSaWHDSKqyZAu3kETKbVDE/mvgyQ0fcQ3yjOnGeVzRUHQJijZqLjQjkLFinJgVfnWw5V6otOP4rtC2EKwNouCLK74Q= + client_id: AgBkec2BRIjcIL8/s3DrbhK16a1mbDmmDzAC1U6mZVBp8nT0M3NQ9FLEluNv56FSu1S35BhubYk4YvzJTeekgsuxFl5NZ0E7WkBFxLYNuXe9Za8OENZUU7q0WsobVkJdNy01Z4/jCHVyypxL2/ysYSBN2Uw2S0Sv3dhiQoI+SjdgTnU4hUscTMCF39xy1ilYudalBxJP1kargst3/J2YRmkNrfYUtKRWcpDnZivvooy7ej9NC89IYIeuWy1/rL+pGpnzt3UwxlOfYmALtr36dRBl4T8mmOMoHe1gPEkhD50ETn1hWS7E4ASvd840O+X26Q9vw/tKrmSLlnAiify/M0czXShPsdrv2NisDzSCMpR57QK4VY3E6K3wYcQqAwZBgSaHwjE9PtedeJwQuleLkMnhGBpQ9HajvNCAH0VJFRvWnr7ZVB54OXYpEKrf6JV7QtJ2oDVJHySvqpb2Yc2FbkHu0aMjy0tx5vgCZRs0aJyaguRwMWG6upxvoDpdh1uGrIstrPeuCDbgNAJ/Nf5+pAL0edQByBoeSQ9qt3xuBVcxjS4UV0oqsAbpSyCXes+LxaL1XWK4axLT181FE7BnbBM23rZXgdcQxW1G9AZiGwBviUXp73A3sKYi/xw6HPLMrPKi+qiFhVE3y3xHNLLN4UzEG1uyaL0p6lkoHX1SfvsAaef0jzACgcZYHuF9g7qFx2K8aAr0BOsWKJfeuYdoBQSehMkqpE4QZb9H51MXKwGkcGpXG00= + client_secret: AgBN1b5bfRKYBCWEtaQ7jxQpi7WOOusSRp+KKflAEieqSIV6maeiPZCbLz0id3CXp/Ig8GKqdr55kfn+5tPV7AkfiJ9I5mPeLeLY/V1/yqsBYUc/pY63dpJNdijHPopI/hxwoO6Bd2fktYOCCiqxbEPqxtFez5VcIoq5NhOpPNuj4A1WNENZuTDeJk4vB93HTSnlvb1eECVByOiV71Co+5lvQv9s+bM6YaCz34hw87dTCTpg/6Wl4ezvYV73Vfzz22CSDoUNGIGJfURts0pQ6fHKdPeW/D+/4n45sS8t13Xf+pxDOdaBiuNOQhtNx8C1Crr9TsaKAY3nAGLvrbDEY+hnxCjsZqmj6+De0e8zn5Exe0pg5W1/Hc3c/IW+GDPcvIDkRSh5qis53ek68OiPXfaY4jYCjP8MP8LF2rD3CkE3BKeTxxcY28I315FYuHFWbr2GSXI3xQoj6E7jxHpPxsq1WQpTK4/oGQRFb4+S6TXut8Ey6cgpVJI6OfcXt9huzJTkMNjuW+qmqcEhzOlgBxA+Ohjv2WEOCAn4+pbcaWsHdWJhLtZhPOKCQukhdr8l5DXfJKoJegjQ9WHWI0R6TQZkIshloG6V4YqTXzHlDPDL5X2s1+uAVXJQPiX5LE6fxtLEG/aigQDMeL2U3DYtN9In37Mys/LgT8ZnzFcEFCJmCcETbxPYPPljqD4ZQXg7ahIMI78VGWeuHwFTzom4nZk23gDkxgx17w5UWG4LzVYqZK0K+8+ncEYWOoLuNVdqp7ABvA1KDz6Y5bLoGWPKoGUWD4EUEj/kqtH2WWVUAAmKs5siA5DIvJA= template: metadata: creationTimestamp: null name: reana-vre-iam-client namespace: reana type: Opaque -