charts/osdu-developer-init/templates/user-init.yaml (108 lines of code) (raw):

{{- $enabled := eq (include "osdu-developer-init.isEnabled" .) "1" -}} {{- $namespace := .Release.Namespace -}} {{- $releaseName := .Release.Name -}} {{- if and $enabled .Values.jobs.userInit }} --- apiVersion: batch/v1 kind: Job metadata: name: {{ $releaseName }} namespace: {{ $namespace }} spec: ttlSecondsAfterFinished: 120 template: metadata: labels: azure.workload.identity/use: "true" spec: serviceAccountName: workload-identity-sa volumes: - name: script configMap: name: configmap-{{ $releaseName }}-script defaultMode: 0500 initContainers: - name: data-seed image: mcr.microsoft.com/azure-cli:cbl-mariner2.0 command: - /script/init.sh volumeMounts: - name: script mountPath: "/script" env: - name: EMAIL_ADDRESS value: {{ .Values.emailAddress | quote }} containers: - name: sleep image: istio/base command: ["/bin/sleep", "30"] volumeMounts: - name: script mountPath: "/script" restartPolicy: Never --- apiVersion: v1 kind: ConfigMap metadata: name: configmap-{{ $releaseName }}-script namespace: {{ $namespace }} data: init.sh: | #!/usr/bin/env sh set -euo pipefail set -o nounset tdnf install -y curl jq echo "==================================================================" echo " Logging in using Workload Identity" echo "==================================================================" # Login using the federated token from the environment variable az login --federated-token "$(cat ${AZURE_FEDERATED_TOKEN_FILE})" \ --service-principal \ -u ${AZURE_CLIENT_ID} \ -t ${AZURE_TENANT_ID} # Get token (no resource needed) TOKEN=$(az account get-access-token --resource "https://management.azure.com/" --query accessToken -o tsv) echo "==================================================================" echo " Adding the first user... " echo "==================================================================" json_payload=$(jq -n --arg email "$EMAIL_ADDRESS" '{"email": $email, "role": "MEMBER"}') OUTPUT=$(curl -s -k -w "%{http_code}" -X POST "http://entitlements.{{ $namespace }}/api/entitlements/v2/groups/users@opendes.dataservices.energy/members" \ --insecure \ -H "Authorization: Bearer ${TOKEN}" \ -H "Accept: application/json" \ -H "data-partition-id: opendes" \ -H "Content-Type: application/json" \ -d "$json_payload") HTTP_STATUS_CODE=$(echo $OUTPUT | grep -oE '[0-9]{3}$') BODY=${OUTPUT%???} if [[ "$HTTP_STATUS_CODE" != "200" && "$HTTP_STATUS_CODE" != "409" ]]; then echo "Error: Unexpected HTTP status code $HTTP_STATUS_CODE" echo "Response body: $BODY" exit 1 fi if [[ "$HTTP_STATUS_CODE" == "409" ]]; then echo "Info: User already exists. \n$(echo "$BODY" | jq .)" else echo "Success: $(echo "$BODY" | jq .)" fi echo "==================================================================" echo " Assigning the Ops role to the user... " echo "==================================================================" OUTPUT=$(curl -s -k -w "%{http_code}" -X POST "http://entitlements.{{ $namespace }}/api/entitlements/v2/groups/users.datalake.ops@opendes.dataservices.energy/members" \ --insecure \ -H "accept: application/json" \ -H "content-type: application/json" \ -H "authorization: Bearer ${TOKEN}" \ -H "data-partition-id: opendes" \ -d "$json_payload") HTTP_STATUS_CODE=$(echo $OUTPUT | grep -oE '[0-9]{3}$') BODY=${OUTPUT%???} if [[ "$HTTP_STATUS_CODE" != "200" && "$HTTP_STATUS_CODE" != "409" ]]; then echo "Error: Unexpected HTTP status code $HTTP_STATUS_CODE" echo "Response body: $BODY" exit 1 fi if [[ "$HTTP_STATUS_CODE" == "409" ]]; then echo "Info: User already exists. \n$(echo "$BODY" | jq .)" else echo "Success: $(echo "$BODY" | jq .)" fi exit 0 {{- end }}