diff --git a/featureflags/unleash_config_export_import.sh b/featureflags/unleash_config_export_import.sh new file mode 100755 index 00000000..22806366 --- /dev/null +++ b/featureflags/unleash_config_export_import.sh @@ -0,0 +1,97 @@ +#!/bin/bash + +set -x + +echo "setting required environment variables" +EPHEMERAL_NAMESPACE="${EPHEMERAL_NAMESPACE:-}" +EXPORT_UNLEASH_URL="${EXPORT_UNLEASH_URL:-}" +EXPORT_NAMESPACE="${EXPORT_NAMESPACE:-}" +EXPORT_ADMIN_SECRET="${EXPORT_ADMIN_SECRET:-}" +IMPORT_PAT="${IMPORT_PAT:-}" +IMPORT_LOCALLY="${IMPORT_LOCALLY:-false}" +JSON_TOGGLES_PATH="${JSON_TOGGLES_PATH:-featureflags/feature_flags_exported_toggles.json}" + +echo "JSON_TOGGLES_PATH: $JSON_TOGGLES_PATH" +echo "EXPORT_UNLEASH_URL: $EXPORT_UNLEASH_URL" +echo "IMPORT_LOCALLY: $IMPORT_LOCALLY" + +export_toggles() { + echo "Retrieve a list of toggle names to export from environment" + curl -L -X GET "${EXPORT_UNLEASH_URL}/api/admin/projects/default/features" \ + -H "Accept: application/json" \ + -H "Authorization: $EXPORT_ADMIN_SECRET" > "featureflags/feature_flags_toggle_names.json" + + echo "JSON_TOGGLES_PATH: $JSON_TOGGLES_PATH" + UNLEASH_PROJECT_TOGGLE_NAMES=$(jq -r [.features[].name] featureflags/feature_flags_toggle_names.json) + echo "list of toggle names: $UNLEASH_PROJECT_TOGGLE_NAMES" + + echo -e "Exporting toggles from environment" + curl -L -X POST "${EXPORT_UNLEASH_URL}/api/admin/features-batch/export" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" \ + -H "Authorization: $EXPORT_ADMIN_SECRET" \ + --data-raw '{ + "environment": "development", + "downloadFile": true, + "features": '"${UNLEASH_PROJECT_TOGGLE_NAMES}"' + }' > "$JSON_TOGGLES_PATH" +} + +validate_environment_variables() { + echo "Validating that environment variables are set" + if [ -z "${EXPORT_UNLEASH_URL}" ]; then + echo "environment variable [EXPORT_UNLEASH_URL] was not set" + return 1 + fi + + if [ -z "${EXPORT_NAMESPACE}" ]; then + echo "environment variable [EXPORT_NAMESPACE] was not set" + return 1 + fi + + if [ -z "${EXPORT_ADMIN_SECRET}" ]; then + echo "environment variable [EXPORT_ADMIN_SECRET] was not set" + return 1 + fi + + if [ -z "${EPHEMERAL_NAMESPACE}" ]; then + echo "environment variable [EPHEMERAL_NAMESPACE] was not set" + return 1 + fi + + if [ -z "${IMPORT_PAT}" ]; then + echo "environment variable [IMPORT_PAT] was not set" + return 1 + fi + + echo "\nAll required environment variables are set" +} + +# if ! validate_environment_variables; then +# exit 1 +# fi + +echo "Making directory for temp json files" +mkdir featureflags + +if [ "${IMPORT_LOCALLY}" == false ]; then + echo "environment variable [JSON_TOGGLES_PATH] was not set, exporting out of environment" + export_toggles +fi + +echo -e "\nImport toggles into ephemeral environment" +EXPORTED_UNLEASH_TOGGLES=$(cat $JSON_TOGGLES_PATH) + +curl -L -X POST 'http://localhost:4243/api/admin/features-batch/import' -H 'Content-Type: application/json' \ +-H 'Accept: application/json' \ +-H "Authorization: ${IMPORT_PAT}" \ +--data-raw '{ + "project": "default", + "environment": "development", + "data": '"$EXPORTED_UNLEASH_TOGGLES"' +}' + +echo "Toggles imported into ephemeral environment: $EXPORTED_UNLEASH_TOGGLES" + +echo "Cleanup json files" +rm -rf featureflags diff --git a/featureflags/unleash_import_job.yaml b/featureflags/unleash_import_job.yaml new file mode 100644 index 00000000..136ca52e --- /dev/null +++ b/featureflags/unleash_import_job.yaml @@ -0,0 +1,28 @@ +apiVersion: template.openshift.io/v1 +kind: Template +metadata: + name: unleash-export-import-template + annotations: + description: "The purpose of this job is to import Unleash toggles into ephemeral namespaces" +objects: +- apiVersion: batch/v1 + kind: Job + metadata: + name: "unleash-import-config-${RANDOM_STRING}" + spec: + template: + spec: + containers: + - name: ubi8 + image: registry.access.redhat.com/ubi8/ubi:8.9-1107.1706791207 + command: ["dnf", "install", "jq", "-y", "&&", "source", "<(https://github.com/RedHatInsights/cicd-tools/blob/437db2c2c738b16dc567accc45f4254b21ae6f69/featureflags/unleash_config_export_import.sh)"] + volumeMounts: + - mountPath: /tmp + name: unleash-export-import-script-volume + restartPolicy: Never + backoffLimit: 4 +parameters: + - description: generates a random string to uniquely identify the name of an object + name: RANDOM_STRING + value: "$(head -c 6 /dev/random | base64)" + required: true \ No newline at end of file diff --git a/helpers/vars.groovy b/helpers/vars.groovy deleted file mode 100644 index 5b64c160..00000000 --- a/helpers/vars.groovy +++ /dev/null @@ -1,15 +0,0 @@ -@Field -def secrets = [ - [path: params.VAULT_PATH_SVC_ACCOUNT_EPHEMERAL, engineVersion: 1, secretValues: [ - [envVar: 'OC_LOGIN_TOKEN_DEV', vaultKey: 'oc-login-token-dev'], - [envVar: 'OC_LOGIN_SERVER_DEV', vaultKey: 'oc-login-server-dev']]], - [path: params.VAULT_PATH_QUAY_PUSH, engineVersion: 1, secretValues: [ - [envVar: 'QUAY_USER', vaultKey: 'user'], - [envVar: 'QUAY_TOKEN', vaultKey: 'token']]], - [path: params.VAULT_PATH_RHR_PULL, engineVersion: 1, secretValues: [ - [envVar: 'RH_REGISTRY_USER', vaultKey: 'user'], - [envVar: 'RH_REGISTRY_TOKEN', vaultKey: 'token']]] -] - -@Field -def configuration = [vaultUrl: params.VAULT_ADDRESS, vaultCredentialId: params.VAULT_CREDS_ID, engineVersion: 1]