136 lines
4.6 KiB
Shell
136 lines
4.6 KiB
Shell
|
|
write_lane_profile() {
|
||
|
|
local lane="$1"
|
||
|
|
local coordination="$2"
|
||
|
|
local oidc="$3"
|
||
|
|
local target="$4"
|
||
|
|
local profile="nuthatch-fixture-lane-$lane"
|
||
|
|
local profile_file="$RUNTIME/$profile.env"
|
||
|
|
local database=
|
||
|
|
local coordination_database=
|
||
|
|
local oidc_issuer=
|
||
|
|
local oidc_client_id=
|
||
|
|
local oidc_client_secret=
|
||
|
|
local oidc_additional_audiences=
|
||
|
|
local oidc_redirect_uri=
|
||
|
|
local oidc_user_a=
|
||
|
|
local oidc_user_b=
|
||
|
|
local target_url=
|
||
|
|
local target_bucket=
|
||
|
|
local target_region=
|
||
|
|
local target_access_key=
|
||
|
|
local target_secret_key=
|
||
|
|
if fixture_has_family durable; then
|
||
|
|
database="$(reset_lane_durable_store "$lane")" || return
|
||
|
|
fi
|
||
|
|
if fixture_has_family coordination; then
|
||
|
|
coordination_database="$(reset_lane_coordination_store "$coordination" "$lane")" || return
|
||
|
|
fi
|
||
|
|
if fixture_has_family oidc; then
|
||
|
|
oidc_redirect_uri="https://nuthatch-$lane:8080/oidc/callback"
|
||
|
|
case "$oidc" in
|
||
|
|
keycloak) oidc_issuer=http://keycloak.nuthatch.test:8080/realms/master ;;
|
||
|
|
zitadel) oidc_issuer=http://zitadel.nuthatch.test:8080 ;;
|
||
|
|
*) return 1 ;;
|
||
|
|
esac
|
||
|
|
case "$oidc" in
|
||
|
|
keycloak)
|
||
|
|
provision_lane_keycloak_registration \
|
||
|
|
"$lane" \
|
||
|
|
"$oidc_redirect_uri" \
|
||
|
|
oidc_client_id \
|
||
|
|
oidc_client_secret \
|
||
|
|
oidc_additional_audiences \
|
||
|
|
oidc_user_a \
|
||
|
|
oidc_user_b || return
|
||
|
|
;;
|
||
|
|
zitadel)
|
||
|
|
provision_lane_zitadel_registration \
|
||
|
|
"$lane" \
|
||
|
|
"$oidc_redirect_uri" \
|
||
|
|
oidc_client_id \
|
||
|
|
oidc_client_secret \
|
||
|
|
oidc_additional_audiences \
|
||
|
|
oidc_user_a \
|
||
|
|
oidc_user_b || return
|
||
|
|
;;
|
||
|
|
*) return 1 ;;
|
||
|
|
esac
|
||
|
|
create_oidc_automation_secret "$lane" "$oidc" || return
|
||
|
|
fi
|
||
|
|
if fixture_has_family target; then
|
||
|
|
target_bucket="nuthatch-lane-$lane"
|
||
|
|
target_url="$(target_endpoint "$target")" || return
|
||
|
|
ensure_target_scope_canary "$target" || return
|
||
|
|
provision_lane_target_principal \
|
||
|
|
"$target" \
|
||
|
|
"$lane" \
|
||
|
|
"$target_bucket" \
|
||
|
|
target_access_key \
|
||
|
|
target_secret_key || return
|
||
|
|
case "$target" in
|
||
|
|
garage) target_region=garage ;;
|
||
|
|
versitygw) target_region=us-east-1 ;;
|
||
|
|
*) return 1 ;;
|
||
|
|
esac
|
||
|
|
fi
|
||
|
|
{
|
||
|
|
printf 'NUTHATCH_FIXTURE_PROFILE=%s\n' "$profile"
|
||
|
|
printf 'NUTHATCH_FIXTURE_LANE=%s\n' "$lane"
|
||
|
|
printf 'NUTHATCH_COORDINATION_PROVIDER=%s\n' "$coordination"
|
||
|
|
printf 'NUTHATCH_OIDC_PROVIDER=%s\n' "$oidc"
|
||
|
|
printf 'NUTHATCH_TARGET_PROVIDER=%s\n' "$target"
|
||
|
|
printf 'NUTHATCH_PG_CONN=host=postgres port=5432 user=nuthatch password=synthetic-postgres dbname=%s\n' "$database"
|
||
|
|
printf 'NUTHATCH_REDIS_URL=redis://%s:6379/%s\n' "$coordination" "$coordination_database"
|
||
|
|
printf 'NUTHATCH_OIDC_ISSUER=%s\n' "$oidc_issuer"
|
||
|
|
printf 'NUTHATCH_OIDC_CLIENT_ID=%s\n' "$oidc_client_id"
|
||
|
|
printf 'NUTHATCH_OIDC_ADDITIONAL_AUDIENCES=%s\n' "$oidc_additional_audiences"
|
||
|
|
printf 'NUTHATCH_OIDC_REDIRECT_URI=%s\n' "$oidc_redirect_uri"
|
||
|
|
printf 'NUTHATCH_OIDC_USER_A=%s\n' "$oidc_user_a"
|
||
|
|
printf 'NUTHATCH_OIDC_USER_B=%s\n' "$oidc_user_b"
|
||
|
|
printf 'NUTHATCH_OIDC_USER_PASSWORD=Synthetic-OIDC-1!\n'
|
||
|
|
printf 'NUTHATCH_S3_ENDPOINT=%s\n' "$target_url"
|
||
|
|
printf 'NUTHATCH_S3_BUCKET=%s\n' "$target_bucket"
|
||
|
|
printf 'NUTHATCH_S3_REGION=%s\n' "$target_region"
|
||
|
|
printf 'NUTHATCH_S3_ACCESS_KEY=%s\n' "$target_access_key"
|
||
|
|
printf 'NUTHATCH_S3_SECRET_KEY=%s\n' "$target_secret_key"
|
||
|
|
printf 'NUTHATCH_S3_PATH_STYLE=true\n'
|
||
|
|
} > "$profile_file" || return
|
||
|
|
if fixture_has_family oidc; then
|
||
|
|
printf '%s' "$oidc_client_secret" > "$profile_file.oidc-secret" || return
|
||
|
|
chmod 0600 "$profile_file.oidc-secret" || return
|
||
|
|
fi
|
||
|
|
kube create configmap "$profile" \
|
||
|
|
--namespace "$FIXTURE_NAMESPACE" \
|
||
|
|
--from-env-file="$profile_file" \
|
||
|
|
--dry-run=client \
|
||
|
|
--output yaml |
|
||
|
|
kube apply --filename - >/dev/null || return
|
||
|
|
kube create configmap "$profile-file" \
|
||
|
|
--namespace "$FIXTURE_NAMESPACE" \
|
||
|
|
--from-file="profile.env=$profile_file" \
|
||
|
|
--dry-run=client \
|
||
|
|
--output yaml |
|
||
|
|
kube apply --filename - >/dev/null || return
|
||
|
|
printf '%s\n' "$profile"
|
||
|
|
}
|
||
|
|
|
||
|
|
render_lane_job() {
|
||
|
|
local job="$1"
|
||
|
|
local manifest="$2"
|
||
|
|
local image="$3"
|
||
|
|
local profile="$4"
|
||
|
|
source "$RUNTIME/fixture.env" || return
|
||
|
|
sed \
|
||
|
|
-e "s|@@JOB_NAME@@|$job|g" \
|
||
|
|
-e "s|@@PROFILE_NAME@@|$profile|g" \
|
||
|
|
-e "s|@@TEST_IMAGE@@|$image|g" \
|
||
|
|
"$manifest" > "$RUNTIME/$job.yaml"
|
||
|
|
}
|
||
|
|
|
||
|
|
run_job_manifest() {
|
||
|
|
local job="$1"
|
||
|
|
local manifest="$2"
|
||
|
|
kube --namespace "$FIXTURE_NAMESPACE" delete "job/$job" --ignore-not-found >/dev/null || return
|
||
|
|
kube apply --filename "$manifest" >/dev/null || return
|
||
|
|
wait_for_job "$job"
|
||
|
|
}
|