Skip to content

Commit 61ce181

Browse files
config loader for env variables
Issue: ZENKO-5182
1 parent 11d9d19 commit 61ce181

File tree

14 files changed

+1051
-23
lines changed

14 files changed

+1051
-23
lines changed

.devcontainer/README.md

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,12 @@ Now you can use aws cli to interact with the S3 service
6969

7070
### Inspecting Codespace creation logs
7171

72-
You can inspect the logs of the Codespace creation this way:
73-
1. Press `Ctrl+Shift+P` (or `Cmd+Shift+P` on Mac)
74-
2. Type "Codespaces: Export Logs" and select it
75-
3. A zip file will be downloaded to your local machine
76-
4. In the zip, look at the `creation.log` file
72+
You can inspect the logs of the Codespace creation in 2 ways way:
73+
1. When Codespace creation is still running :
74+
Use Cmd/Ctrl + Shift + P -> View Creation Log to see full logs
75+
76+
2. When the setup is finished, dump the logs :
77+
a. Press `Ctrl+Shift+P` (or `Cmd+Shift+P` on Mac)
78+
b. Type "Codespaces: Export Logs" and select it
79+
c. A zip file will be downloaded to your local machine
80+
d. In the zip, look at the `creation.log` file
Lines changed: 240 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,240 @@
1+
#!/bin/bash
2+
# Unified configuration loader for Zenko end-to-end tests
3+
#
4+
# Usage:
5+
# source load-config.sh ctst # Load config for CTST tests
6+
# source load-config.sh e2e # Load config for zenko_tests (e2e)
7+
# source load-config.sh common # Load only common config
8+
#
9+
# After sourcing, use the helpers:
10+
# kubectl exec pod -- env $(env_for_kubectl_exec) command
11+
# kubectl run pod $(env_for_kubectl_run) -- command
12+
13+
set -e +x
14+
15+
SUITE="${1:-common}"
16+
17+
18+
# Extract a value from the top-level env block in end2end.yaml.
19+
# Strips ${{ ... }} expressions (secrets/context refs) leaving an empty string.
20+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
21+
WORKFLOWS_END2END_YAML="${SCRIPT_DIR}/../../workflows/end2end.yaml"
22+
get_env_var() {
23+
local key="$1"
24+
yq eval ".env.${key}" "$WORKFLOWS_END2END_YAML" | sed 's/\${{[^}]*}}//g' | tr -d '"'
25+
}
26+
27+
# Output helpers – both derived from the same ENV_VARS array.
28+
# Usage: kubectl exec pod -- env $(env_for_kubectl_exec) command
29+
env_for_kubectl_exec() { printf '%s ' "${ENV_VARS[@]}"; }
30+
# Usage: kubectl run pod $(env_for_kubectl_run) -- command
31+
env_for_kubectl_run() { printf -- '--env=%s ' "${ENV_VARS[@]}"; }
32+
33+
# =============================================================================
34+
# COMMON - Used by both CTST and zenko_tests
35+
# =============================================================================
36+
load_common() {
37+
ENV_VARS=()
38+
39+
# From end2end.yaml
40+
ENV_VARS+=("SUBDOMAIN=$(get_env_var SUBDOMAIN)")
41+
ENV_VARS+=("KEYCLOAK_TEST_REALM_NAME=$(get_env_var OIDC_REALM)")
42+
ENV_VARS+=("KEYCLOAK_TEST_CLIENT_ID=$(get_env_var OIDC_CLIENT_ID)")
43+
ENV_VARS+=("KEYCLOAK_TEST_USER=$(get_env_var OIDC_USERNAME)")
44+
ENV_VARS+=("KEYCLOAK_TEST_PASSWORD=$(get_env_var OIDC_PASSWORD)")
45+
ENV_VARS+=("KEYCLOAK_TEST_HOST=$(get_env_var OIDC_HOST)")
46+
ENV_VARS+=("KEYCLOAK_TEST_PORT=80")
47+
ENV_VARS+=("KEYCLOAK_TEST_GRANT_TYPE=password")
48+
ENV_VARS+=("AZURE_ACCOUNT_NAME=$(get_env_var AZURE_ACCOUNT_NAME)")
49+
ENV_VARS+=("AZURE_SECRET_KEY=$(get_env_var AZURE_SECRET_KEY)")
50+
ENV_VARS+=("CLOUDSERVER_ENDPOINT=http://end2end-connector-s3api.default.svc.cluster.local:80")
51+
ENV_VARS+=("VAULT_ENDPOINT=http://end2end-management-vault-iam-admin-api:80")
52+
53+
# From k8s: Zenko account credentials
54+
ENV_VARS+=("ZENKO_ACCESS_KEY=$(kubectl get secret end2end-account-zenko -o jsonpath='{.data.AccessKeyId}' | base64 -d)")
55+
ENV_VARS+=("ZENKO_SECRET_KEY=$(kubectl get secret end2end-account-zenko -o jsonpath='{.data.SecretAccessKey}' | base64 -d)")
56+
57+
# From k8s: Admin vault credentials
58+
ENV_VARS+=("ADMIN_ACCESS_KEY_ID=$(kubectl get secret end2end-management-vault-admin-creds.v1 -o jsonpath='{.data.accessKey}' | base64 -d)")
59+
ENV_VARS+=("ADMIN_SECRET_ACCESS_KEY=$(kubectl get secret end2end-management-vault-admin-creds.v1 -o jsonpath='{.data.secretKey}' | base64 -d)")
60+
}
61+
62+
# =============================================================================
63+
# CTST ONLY - Variables specific to cucumber tests
64+
# =============================================================================
65+
load_ctst() {
66+
load_common
67+
68+
# Hardcoded CTST values
69+
ENV_VARS+=("ZENKO_ACCOUNT_NAME=zenko-ctst")
70+
ENV_VARS+=("STORAGE_MANAGER_USER_NAME=ctst_storage_manager")
71+
ENV_VARS+=("STORAGE_ACCOUNT_OWNER_USER_NAME=ctst_storage_account_owner")
72+
ENV_VARS+=("DATA_CONSUMER_USER_NAME=ctst_data_consumer")
73+
ENV_VARS+=("DATA_ACCESSOR_USER_NAME=ctst_data_accessor")
74+
ENV_VARS+=("ZENKO_PORT=80")
75+
ENV_VARS+=("UTILIZATION_SERVICE_PORT=80")
76+
ENV_VARS+=("AZURE_ARCHIVE_ACCESS_TIER=Hot")
77+
ENV_VARS+=("AZURE_ARCHIVE_MANIFEST_ACCESS_TIER=Hot")
78+
79+
# From end2end.yaml
80+
ENV_VARS+=("DR_SUBDOMAIN=$(get_env_var DR_SUBDOMAIN)")
81+
ENV_VARS+=("PROMETHEUS_NAME=$(get_env_var PROMETHEUS_NAME)")
82+
ENV_VARS+=("AZURE_BACKEND_ENDPOINT=$(get_env_var AZURE_BACKEND_ENDPOINT)")
83+
ENV_VARS+=("AZURE_BACKEND_QUEUE_ENDPOINT=$(get_env_var AZURE_BACKEND_QUEUE_ENDPOINT)")
84+
ENV_VARS+=("AZURE_ARCHIVE_BUCKET_NAME=$(get_env_var AZURE_ARCHIVE_BUCKET_NAME)")
85+
ENV_VARS+=("AZURE_ARCHIVE_BUCKET_NAME_2=$(get_env_var AZURE_ARCHIVE_BUCKET_NAME_2)")
86+
ENV_VARS+=("AZURE_ARCHIVE_QUEUE_NAME=$(get_env_var AZURE_ARCHIVE_QUEUE_NAME)")
87+
ENV_VARS+=("NOTIF_DEST_NAME=$(get_env_var NOTIF_DEST_NAME)")
88+
ENV_VARS+=("NOTIF_DEST_TOPIC=$(get_env_var NOTIF_DEST_TOPIC)")
89+
ENV_VARS+=("NOTIF_ALT_DEST_NAME=$(get_env_var NOTIF_ALT_DEST_NAME)")
90+
ENV_VARS+=("NOTIF_ALT_DEST_TOPIC=$(get_env_var NOTIF_ALT_DEST_TOPIC)")
91+
ENV_VARS+=("NOTIF_AUTH_DEST_NAME=$(get_env_var NOTIF_AUTH_DEST_NAME)")
92+
ENV_VARS+=("NOTIF_AUTH_DEST_TOPIC=$(get_env_var NOTIF_AUTH_DEST_TOPIC)")
93+
ENV_VARS+=("NOTIF_AUTH_DEST_USERNAME=$(get_env_var NOTIF_AUTH_DEST_USERNAME)")
94+
ENV_VARS+=("NOTIF_AUTH_DEST_PASSWORD=$(get_env_var NOTIF_AUTH_DEST_PASSWORD)")
95+
96+
# From k8s: DR admin credentials (only exists if PRA is deployed)
97+
ENV_VARS+=("DR_ADMIN_ACCESS_KEY_ID=$(kubectl get secret end2end-pra-management-vault-admin-creds.v1 -o jsonpath='{.data.accessKey}' 2>/dev/null | base64 -d || true)")
98+
ENV_VARS+=("DR_ADMIN_SECRET_ACCESS_KEY=$(kubectl get secret end2end-pra-management-vault-admin-creds.v1 -o jsonpath='{.data.secretKey}' 2>/dev/null | base64 -d || true)")
99+
100+
# From k8s: Kafka config
101+
local kafka_host_port kafka_port
102+
kafka_host_port=$(kubectl get secret -l app.kubernetes.io/name=backbeat-config,app.kubernetes.io/instance=end2end \
103+
-o jsonpath='{.items[0].data.config\.json}' | base64 -d | jq -r '.kafka.hosts')
104+
kafka_port="${kafka_host_port#*:}"
105+
ENV_VARS+=("KAFKA_HOST_PORT=${kafka_host_port}")
106+
ENV_VARS+=("KAFKA_AUTH_HOST_PORT=end2end-base-queue-auth-0:${kafka_port}")
107+
108+
# From k8s: Sorbet/kafka topics
109+
local sorbet_config
110+
sorbet_config=$(kubectl get secret -l "app.kubernetes.io/name=cold-sorbet-config-e2e-azure-archive,app.kubernetes.io/instance=end2end" \
111+
-o jsonpath='{.items[0].data.config\.json}' | base64 -d)
112+
ENV_VARS+=("KAFKA_DEAD_LETTER_TOPIC=$(echo "${sorbet_config}" | jq -r '."kafka-dead-letter-topic"')")
113+
ENV_VARS+=("KAFKA_OBJECT_TASK_TOPIC=$(echo "${sorbet_config}" | jq -r '."kafka-object-task-topic"')")
114+
ENV_VARS+=("KAFKA_GC_REQUEST_TOPIC=$(echo "${sorbet_config}" | jq -r '."kafka-gc-request-topic"')")
115+
116+
# From k8s: Zenko resource values
117+
ENV_VARS+=("TIME_PROGRESSION_FACTOR=$(kubectl get zenko end2end -o jsonpath='{.metadata.annotations.zenko\.io/time-progression-factor}')")
118+
ENV_VARS+=("INSTANCE_ID=$(kubectl get zenko end2end -o jsonpath='{.status.instanceID}')")
119+
ENV_VARS+=("KAFKA_CLEANER_INTERVAL=$(kubectl get zenko end2end -o jsonpath='{.spec.kafkaCleaner.interval}')")
120+
ENV_VARS+=("SORBETD_RESTORE_TIMEOUT=$(kubectl get zenko end2end -o jsonpath='{.spec.sorbet.server.azure.restoreTimeout}')")
121+
ENV_VARS+=("UTILIZATION_SERVICE_HOST=$(kubectl get zenko end2end -o jsonpath='{.spec.scuba.api.ingress.hostname}')")
122+
123+
# From k8s: Backbeat API config
124+
local cloudserver_config
125+
cloudserver_config=$(kubectl get secret -l app.kubernetes.io/name=connector-cloudserver-config,app.kubernetes.io/instance=end2end \
126+
-o jsonpath='{.items[0].data.config\.json}' | base64 -d)
127+
ENV_VARS+=("BACKBEAT_API_HOST=$(echo "${cloudserver_config}" | jq -r '.backbeat.host')")
128+
ENV_VARS+=("BACKBEAT_API_PORT=$(echo "${cloudserver_config}" | jq -r '.backbeat.port')")
129+
130+
# From k8s: Service users credentials (individual components)
131+
ENV_VARS+=("BACKBEAT_LCBP_1_CREDS=$(kubectl get secret -l app.kubernetes.io/name=backbeat-lcbp-user-creds,app.kubernetes.io/instance=end2end -o jsonpath='{.items[0].data.backbeat-lifecycle-bp-1\.json}' | base64 -d)")
132+
ENV_VARS+=("BACKBEAT_LCC_1_CREDS=$(kubectl get secret -l app.kubernetes.io/name=backbeat-lcc-user-creds,app.kubernetes.io/instance=end2end -o jsonpath='{.items[0].data.backbeat-lifecycle-conductor-1\.json}' | base64 -d)")
133+
ENV_VARS+=("BACKBEAT_LCOP_1_CREDS=$(kubectl get secret -l app.kubernetes.io/name=backbeat-lcop-user-creds,app.kubernetes.io/instance=end2end -o jsonpath='{.items[0].data.backbeat-lifecycle-op-1\.json}' | base64 -d)")
134+
ENV_VARS+=("BACKBEAT_QP_1_CREDS=$(kubectl get secret -l app.kubernetes.io/name=backbeat-qp-user-creds,app.kubernetes.io/instance=end2end -o jsonpath='{.items[0].data.backbeat-qp-1\.json}' | base64 -d)")
135+
ENV_VARS+=("SORBET_FWD_2_ACCESSKEY=$(kubectl get secret -l app.kubernetes.io/name=sorbet-fwd-creds,app.kubernetes.io/instance=end2end -o jsonpath='{.items[0].data.accessKey}' | base64 -d)")
136+
ENV_VARS+=("SORBET_FWD_2_SECRETKEY=$(kubectl get secret -l app.kubernetes.io/name=sorbet-fwd-creds,app.kubernetes.io/instance=end2end -o jsonpath='{.items[0].data.secretKey}' | base64 -d)")
137+
}
138+
139+
# =============================================================================
140+
# E2E ONLY - Variables specific to zenko_tests (mocha)
141+
# =============================================================================
142+
load_e2e() {
143+
load_common
144+
145+
# From end2end.yaml
146+
ENV_VARS+=("AWS_BACKEND_SOURCE_LOCATION=$(get_env_var AWS_BACKEND_SOURCE_LOCATION)")
147+
ENV_VARS+=("AWS_BACKEND_DESTINATION_LOCATION=$(get_env_var AWS_BACKEND_DESTINATION_LOCATION)")
148+
ENV_VARS+=("AWS_BACKEND_DESTINATION_FAIL_LOCATION=$(get_env_var AWS_BACKEND_DESTINATION_FAIL_LOCATION)")
149+
ENV_VARS+=("GCP_BACKEND_DESTINATION_LOCATION=$(get_env_var GCP_BACKEND_DESTINATION_LOCATION)")
150+
ENV_VARS+=("AZURE_BACKEND_DESTINATION_LOCATION=$(get_env_var AZURE_BACKEND_DESTINATION_LOCATION)")
151+
ENV_VARS+=("COLD_BACKEND_DESTINATION_LOCATION=$(get_env_var COLD_BACKEND_DESTINATION_LOCATION)")
152+
ENV_VARS+=("AZURE_ARCHIVE_BACKEND_DESTINATION_LOCATION=$(get_env_var AZURE_ARCHIVE_BACKEND_DESTINATION_LOCATION)")
153+
ENV_VARS+=("MIRIA_BACKEND_DESTINATION_LOCATION=$(get_env_var MIRIA_BACKEND_DESTINATION_LOCATION)")
154+
ENV_VARS+=("LOCATION_QUOTA_BACKEND=$(get_env_var LOCATION_QUOTA_BACKEND)")
155+
ENV_VARS+=("AWS_BUCKET_NAME=$(get_env_var AWS_BUCKET_NAME)")
156+
ENV_VARS+=("AWS_CRR_BUCKET_NAME=$(get_env_var AWS_CRR_BUCKET_NAME)")
157+
ENV_VARS+=("AWS_FAIL_BUCKET_NAME=$(get_env_var AWS_FAIL_BUCKET_NAME)")
158+
ENV_VARS+=("AZURE_CRR_BUCKET_NAME=$(get_env_var AZURE_CRR_BUCKET_NAME)")
159+
ENV_VARS+=("AZURE_ARCHIVE_BUCKET_NAME=$(get_env_var AZURE_ARCHIVE_BUCKET_NAME)")
160+
ENV_VARS+=("GCP_CRR_BUCKET_NAME=$(get_env_var GCP_CRR_BUCKET_NAME)")
161+
ENV_VARS+=("GCP_CRR_MPU_BUCKET_NAME=$(get_env_var GCP_CRR_MPU_BUCKET_NAME)")
162+
ENV_VARS+=("GCP_ACCESS_KEY=$(get_env_var GCP_ACCESS_KEY)")
163+
ENV_VARS+=("GCP_SECRET_KEY=$(get_env_var GCP_SECRET_KEY)")
164+
ENV_VARS+=("GCP_BACKEND_SERVICE_KEY=$(get_env_var GCP_BACKEND_SERVICE_KEY)")
165+
ENV_VARS+=("GCP_BACKEND_SERVICE_EMAIL=$(get_env_var GCP_BACKEND_SERVICE_EMAIL)")
166+
ENV_VARS+=("AZURE_BACKEND_ENDPOINT=$(get_env_var AZURE_BACKEND_ENDPOINT)")
167+
ENV_VARS+=("AWS_ENDPOINT=$(get_env_var AWS_ENDPOINT)")
168+
ENV_VARS+=("AWS_ACCESS_KEY=$(get_env_var AWS_ACCESS_KEY)")
169+
ENV_VARS+=("AWS_SECRET_KEY=$(get_env_var AWS_SECRET_KEY)")
170+
ENV_VARS+=("VERIFY_CERTIFICATES=$(get_env_var VERIFY_CERTIFICATES)")
171+
ENV_VARS+=("ENABLE_RING_TESTS=$(get_env_var ENABLE_RING_TESTS)")
172+
ENV_VARS+=("RING_S3C_ACCESS_KEY=$(get_env_var RING_S3C_ACCESS_KEY)")
173+
ENV_VARS+=("RING_S3C_SECRET_KEY=$(get_env_var RING_S3C_SECRET_KEY)")
174+
ENV_VARS+=("RING_S3C_ENDPOINT=$(get_env_var RING_S3C_ENDPOINT)")
175+
ENV_VARS+=("RING_S3C_BACKEND_SOURCE_LOCATION=$(get_env_var RING_S3C_BACKEND_SOURCE_LOCATION)")
176+
ENV_VARS+=("RING_S3C_INGESTION_SRC_BUCKET_NAME=$(get_env_var RING_S3C_INGESTION_SRC_BUCKET_NAME)")
177+
ENV_VARS+=("RING_S3C_BACKEND_SOURCE_NON_VERSIONED_LOCATION=$(get_env_var RING_S3C_BACKEND_SOURCE_NON_VERSIONED_LOCATION)")
178+
ENV_VARS+=("RING_S3C_INGESTION_SRC_NON_VERSIONED_BUCKET_NAME=$(get_env_var RING_S3C_INGESTION_SRC_NON_VERSIONED_BUCKET_NAME)")
179+
ENV_VARS+=("RING_S3C_INGESTION_NON_VERSIONED_OBJECT_COUNT_PER_TYPE=$(get_env_var RING_S3C_INGESTION_NON_VERSIONED_OBJECT_COUNT_PER_TYPE)")
180+
ENV_VARS+=("CRR_SOURCE_LOCATION_NAME=$(get_env_var CRR_SOURCE_LOCATION_NAME)")
181+
ENV_VARS+=("CRR_DESTINATION_LOCATION_NAME=$(get_env_var CRR_DESTINATION_LOCATION_NAME)")
182+
ENV_VARS+=("CRR_ROLE_NAME=$(get_env_var CRR_ROLE_NAME)")
183+
ENV_VARS+=("BACKBEAT_BUCKET_CHECK_TIMEOUT_S=$(get_env_var BACKBEAT_BUCKET_CHECK_TIMEOUT_S)")
184+
ENV_VARS+=("MOCHA_FILE=$(get_env_var MOCHA_FILE)")
185+
186+
# Derived endpoints
187+
ENV_VARS+=("CLOUDSERVER_HOST=end2end-connector-s3api.default.svc.cluster.local")
188+
ENV_VARS+=("VAULT_STS_ENDPOINT=http://end2end-connector-vault-sts-api:80")
189+
ENV_VARS+=("BACKBEAT_API_ENDPOINT=http://end2end-management-backbeat-api.default.svc.cluster.local:80")
190+
191+
# From k8s: MongoDB config
192+
local cloudserver_secret
193+
cloudserver_secret=$(kubectl get secret -l app.kubernetes.io/name=connector-cloudserver-config,app.kubernetes.io/instance=end2end \
194+
-o jsonpath="{.items[0].data.config\.json}" | base64 -d)
195+
ENV_VARS+=("MONGO_DATABASE=$(echo "${cloudserver_secret}" | jq -r '.mongodb.database')")
196+
ENV_VARS+=("MONGO_READ_PREFERENCE=$(echo "${cloudserver_secret}" | jq -r '.mongodb.readPreference')")
197+
ENV_VARS+=("MONGO_REPLICA_SET_HOSTS=$(echo "${cloudserver_secret}" | jq -r '.mongodb.replicaSetHosts')")
198+
ENV_VARS+=("MONGO_SHARD_COLLECTION=$(echo "${cloudserver_secret}" | jq -r '.mongodb.shardCollections')")
199+
ENV_VARS+=("MONGO_WRITE_CONCERN=$(echo "${cloudserver_secret}" | jq -r '.mongodb.writeConcern')")
200+
ENV_VARS+=("MONGO_AUTH_USERNAME=$(echo "${cloudserver_secret}" | jq -r '.mongodb.authCredentials.username')")
201+
ENV_VARS+=("MONGO_AUTH_PASSWORD=$(echo "${cloudserver_secret}" | jq -r '.mongodb.authCredentials.password')")
202+
203+
# From k8s: CRR account credentials
204+
local crr_src crr_dst
205+
crr_src=$(get_env_var CRR_SOURCE_ACCOUNT_NAME)
206+
crr_dst=$(get_env_var CRR_DESTINATION_ACCOUNT_NAME)
207+
local src_ak src_sk src_st src_id dst_ak dst_sk dst_st dst_id
208+
src_ak=$(kubectl get secret "end2end-account-${crr_src}" -o jsonpath='{.data.AccessKeyId}' | base64 -d)
209+
src_sk=$(kubectl get secret "end2end-account-${crr_src}" -o jsonpath='{.data.SecretAccessKey}' | base64 -d)
210+
src_st=$(kubectl get secret "end2end-account-${crr_src}" -o jsonpath='{.data.SessionToken}' | base64 -d)
211+
src_id=$(kubectl get secret "end2end-account-${crr_src}" -o jsonpath='{.data.AccountId}' | base64 -d)
212+
dst_ak=$(kubectl get secret "end2end-account-${crr_dst}" -o jsonpath='{.data.AccessKeyId}' | base64 -d)
213+
dst_sk=$(kubectl get secret "end2end-account-${crr_dst}" -o jsonpath='{.data.SecretAccessKey}' | base64 -d)
214+
dst_st=$(kubectl get secret "end2end-account-${crr_dst}" -o jsonpath='{.data.SessionToken}' | base64 -d)
215+
dst_id=$(kubectl get secret "end2end-account-${crr_dst}" -o jsonpath='{.data.AccountId}' | base64 -d)
216+
ENV_VARS+=("CRR_SOURCE_INFO={\"AccessKeyId\":\"${src_ak}\",\"SecretAccessKey\":\"${src_sk}\",\"SessionToken\":\"${src_st}\",\"AccountId\":\"${src_id}\"}")
217+
ENV_VARS+=("CRR_DESTINATION_INFO={\"AccessKeyId\":\"${dst_ak}\",\"SecretAccessKey\":\"${dst_sk}\",\"SessionToken\":\"${dst_st}\",\"AccountId\":\"${dst_id}\"}")
218+
219+
# From k8s: Zenko account session token
220+
ENV_VARS+=("ZENKO_SESSION_TOKEN=$(kubectl get secret end2end-account-zenko -o jsonpath='{.data.SessionToken}' | base64 -d)")
221+
}
222+
223+
# =============================================================================
224+
# MAIN
225+
# =============================================================================
226+
case "$SUITE" in
227+
common)
228+
load_common
229+
;;
230+
ctst)
231+
load_ctst
232+
;;
233+
e2e)
234+
load_e2e
235+
;;
236+
*)
237+
echo "Usage: source load-config.sh [common|ctst|e2e]" >&2
238+
exit 1
239+
;;
240+
esac

.github/scripts/end2end/run-e2e-ctst.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ set -exu
77
# run-e2e-ctst.sh "@PreMerge and not @PRA"
88
# run-e2e-ctst.sh "@PRA"
99

10+
# Load environment configuration
11+
DIR=$(dirname "$0")
12+
source "$DIR/load-config.sh" ctst
13+
1014
TAGS=${1:?'Error: TAGS argument is required (e.g., "@PreMerge", "@PRA")'}
1115
ZENKO_NAME="end2end"
1216
PARALLEL_RUNS=${PARALLEL_RUNS:-$(( ( $(nproc) + 1 ) / 2 ))}
@@ -172,6 +176,7 @@ kubectl run $POD_NAME \
172176
--rm \
173177
--attach=True \
174178
--image-pull-policy=IfNotPresent \
179+
$(env_for_kubectl_run) \
175180
--env=TARGET_VERSION=$VERSION \
176181
--env=AZURE_BLOB_URL=$AZURE_BACKEND_ENDPOINT \
177182
--env=AZURE_QUEUE_URL=$AZURE_BACKEND_QUEUE_ENDPOINT \

.github/scripts/end2end/run-e2e-test.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ DIR=$(dirname $0)
66

77
. "$DIR/common.sh"
88

9+
# Load environment configuration
10+
source "$DIR/load-config.sh" e2e
11+
912
ZENKO_NAME=${1:-end2end}
1013
E2E_IMAGE=${2:-ghcr.io/scality/zenko/zenko-e2e:latest}
1114
STAGE=${3:-end2end}
@@ -66,6 +69,7 @@ run_e2e_test() {
6669
--attach=True \
6770
--namespace=${NAMESPACE} \
6871
--image-pull-policy=Always \
72+
$(env_for_kubectl_run) \
6973
--env=CLOUDSERVER_HOST=${CLOUDSERVER_HOST} \
7074
--env=CLOUDSERVER_ENDPOINT=${CLOUDSERVER_ENDPOINT} \
7175
--env=ZENKO_ACCESS_KEY=${ZENKO_ACCESS_KEY} \

tests/config-loader/index.js

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
const { readSecret } = require('./k8sClient');
2+
const yaml = require('js-yaml');
3+
const fs = require('fs');
4+
const path = require('path');
5+
6+
// Shared tests config - values needed by both ctst and zenko_tests
7+
const sharedTestsConfig = {
8+
AdminAccessKey: undefined,
9+
AdminSecretKey: undefined,
10+
Subdomain: undefined,
11+
};
12+
13+
// Cucumber specific config
14+
const ctstConfig = {
15+
// DRAdminAccessKey: undefined,
16+
// KafkaHosts: undefined,
17+
};
18+
19+
// Zenko tests specific config
20+
const zenkoTestsConfig = {
21+
// MongoDatabase: undefined,
22+
};
23+
24+
let _loaded = false;
25+
26+
/**
27+
* Load static config from end2end.yaml workflow file
28+
*/
29+
function loadYamlConfig() {
30+
const configPath = path.join(__dirname, 'end2end.yaml');
31+
const fileContents = fs.readFileSync(configPath, 'utf8');
32+
const workflowConfig = yaml.load(fileContents);
33+
return workflowConfig.env || {};
34+
}
35+
36+
/**
37+
* Load all configuration from k8s secrets and config files.
38+
* Called once at startup (e.g., in BeforeAll hook).
39+
*/
40+
async function load(zenkoName = 'end2end', namespace = 'default') {
41+
if (_loaded) {
42+
return;
43+
}
44+
45+
const envConfig = loadYamlConfig();
46+
sharedTestsConfig.Subdomain = envConfig.SUBDOMAIN;
47+
48+
const adminCreds = await readSecret(
49+
`${zenkoName}-management-vault-admin-creds.v1`,
50+
namespace
51+
);
52+
53+
sharedTestsConfig.AdminAccessKey = adminCreds.accessKey;
54+
sharedTestsConfig.AdminSecretKey = adminCreds.secretKey;
55+
56+
// TODO: Load CTST-specific secrets
57+
// const drCreds = await k8sClient.readSecret(...);
58+
// ctstConfig.DRAdminAccessKey = drCreds.accessKey;
59+
60+
// TODO: Load zenko_tests-specific secrets
61+
// zenkoTestsConfig.MongoDatabase = ...;
62+
63+
_loaded = true;
64+
}
65+
66+
module.exports = {
67+
load,
68+
sharedTestsConfig: sharedTestsConfig,
69+
ctstConfig: ctstConfig,
70+
zenkoTestsConfig: zenkoTestsConfig,
71+
};

0 commit comments

Comments
 (0)