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

{{- $enabled := eq (include "osdu-developer-init.isEnabled" .) "1" -}} {{- $namespace := .Release.Namespace -}} {{- if and $enabled .Values.jobs.workflowInit }} --- apiVersion: batch/v1 kind: Job metadata: name: workflow-init namespace: {{ $namespace }} spec: ttlSecondsAfterFinished: 120 template: metadata: labels: azure.workload.identity/use: "true" spec: serviceAccountName: workload-identity-sa volumes: - name: script configMap: name: workflow-init-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: NAMESPACE value: {{ $namespace }} - name: PARTITION value: {{ .Values.partition | quote }} - name: WORKFLOWS value: {{ .Values.workflows | toJson | quote }} containers: - name: sleep image: istio/base command: ["/bin/sleep", "30"] volumeMounts: # Ensure this container also mounts the volume if needed - name: script mountPath: "/script" restartPolicy: Never --- apiVersion: v1 kind: ConfigMap metadata: name: workflow-init-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 with the correct application ID as resource TOKEN=$(az account get-access-token --resource "https://management.azure.com/" --query accessToken -o tsv) # Log the WORKFLOWS variable to check its format echo "WORKFLOWS: $WORKFLOWS" # Ensure WORKFLOWS is properly formatted JSON if ! echo "$WORKFLOWS" | jq empty; then echo "Error: WORKFLOWS is not valid JSON" exit 1 fi # Iterate over each workflow in the WORKFLOWS array echo "$WORKFLOWS" | jq -c '.[]' | while read -r WORKFLOW; do # Debugging: Log the current workflow being processed echo "Processing workflow: $WORKFLOW" WORKFLOW_NAME=$(echo $WORKFLOW | jq -r '.name') WORKFLOW_DESCRIPTION=$(echo $WORKFLOW | jq -r '.description') echo "Registering workflow: $WORKFLOW_NAME" OUTPUT=$(curl -s -w "%{http_code}" --request POST \ --url http://workflow.osdu-core/api/workflow/v1/workflow/system \ --header "Host: workflow.osdu-core" \ --header "accept: application/json" \ --header "content-type: application/json" \ --header "authorization: Bearer $TOKEN" \ --data "{ \"workflowName\": \"$WORKFLOW_NAME\", \"description\": \"$WORKFLOW_DESCRIPTION\", \"registrationInstructions\": { \"active\": true, \"dagName\": \"$WORKFLOW_NAME\", \"concurrentWorkflowRun\": 5, \"concurrentTaskRun\": 5, \"workflowDetailContent\": \"\", \"etc\": \"autotest\" } }") HTTP_STATUS_CODE=$(echo $OUTPUT | grep -oE '[0-9]{3}$') BODY=${OUTPUT%???} if [ "$HTTP_STATUS_CODE" = "200" ]; then echo "Info: Workflow created. HTTP status code $HTTP_STATUS_CODE" elif [ "$HTTP_STATUS_CODE" = "409" ]; then echo "Info: Workflow already exists. HTTP status code $HTTP_STATUS_CODE" echo "Response body: $BODY" else echo "Error: Unexpected HTTP status code $HTTP_STATUS_CODE" echo "Response body: $BODY" exit 1 fi done exit 0 {{- end }}