Currently I'm using azure devops to deploy an app container to azure.
I've created my release pipeline and added each ENVIRONMENT VARIABLE manually through the interface.
I wondering if is there any way to get it dynamically, I mean add the environment variables with a given prefix and add to the command.
Currently this is the command that I'm using:
az containerapp create --resource-group $(ResourceGroupName) --name $(ContainerAppName) --container-name $(ContainerAppName) --environment $(CONTAINERAPPS_ENVIRONMENT) --cpu $(ContainerCpu) --memory $(ContainerMemory) --min-replicas $(MinReplicas) --max-replicas $(MaxReplicas) --ingress $(IngressType) --target-port $(IngressPort) --registry-server $(RegistryServer) --registry-username $(RegistryUsername) --registry-password $(RegistryPasswordSecretName) --secrets $(PasswordSecretName)=$(RegistryPassword) --image $(ContainerImage) --env-vars ENV_ENVIRONMENT_NAME_PREFIX=$(ENV_ENVIRONMENT_NAME_PREFIX) ENV_CLIENT_CONFIG_PATH=$(ENV_CLIENT_CONFIG_PATH)
To summarize it, get all VARIABLES with prefixed name ENV_ and pass it to --env-vars
Important addition: Not all variables are simple strings, some are json blobs and may contain spaces as well as unescaped quotes:
\"{\"type\":\"service_account\",\"project_id\":\"projectID\",\"private_key_id\":\"PRIVATEREGISTRYID\",\"private_key\":\"-----BEGIN PRIVATE KEY-----\nPRIVATEKEYHASH\n-----END PRIVATE KEY-----\n\",\"client_email\":\"publisher@email.iam.gserviceaccount.com\",\"client_id\":\"11132670678102951289\",\"auth_uri\":\"https:\/\/accounts.google.com\/o\/oauth2\/auth\",\"token_uri\":\"https:\/\/oauth2.googleapis.com\/token\",\"auth_provider_x509_cert_url\":\"https:\/\/www.googleapis.com\/oauth2\/v1\/certs\",\"client_x509_cert_url\":\"https:\/\/www.googleapis.com\/robot\/v1\/metadata\/x509\/az-fellipelli-publisher%40codescovery-default.iam.gserviceaccount.com\"}\"
UPDATE
I've done some tests and so far I've ended up with the following approach
formatted_env_vars=$(env | grep '^ENV_' | while read -r line; do
KEY=$(echo "$line" | cut -d '=' -f 1)
VALUE=$(echo "$line" | cut -d '=' -f 2-)
echo "${KEY}=\"${VALUE}\""
done | tr '\n' ' ')
az containerapp create --resource-group $(ResourceGroupName) --name $(ContainerAppName) --container-name $(ContainerAppName) --environment $(CONTAINERAPPS_ENVIRONMENT) --cpu $(ContainerCpu) --memory $(ContainerMemory) --min-replicas $(MinReplicas) --max-replicas $(MaxReplicas) --ingress $(IngressType) --target-port $(IngressPort) --registry-server $(RegistryServer) --registry-username $(RegistryUsername) --registry-password $(RegistryPasswordSecretName) --secrets $(PasswordSecretName)=$(RegistryPassword) --image $(ContainerImage) --env-vars ENVIRONMENT_NAME_PREFIX=$(ENVIRONMENT_NAME_PREFIX) CLIENT_CONFIG_PATH=$(CLIENT_CONFIG_PATH) "$formatted_env_vars"
This command results something like:
az containerapp create --resource-group my-resource-group --name my-app-name --container-name my-app-name --environment my-environment --cpu 0.25 --memory 0.5Gi --min-replicas 0 --max-replicas 1 --ingress external --target-port 80 --registry-server gcr.io --registry-username _json_key --registry-password secretref:registrypassword --secrets registrypassword={"type":"service_account","project_id":"my-project-id","private_key_id":"ecd532a427a221bb5e95e6433a27723b25413392","private_key":"-----BEGIN PRIVATE KEY-----nMIIEvgIDCBENBhqkgkiG9w0BAQFEABSCBKgwggSkAgEAAoIBAQC0FPeHr6LlOibbnNUUsNzJfKNED7eZ6PT71UesZ8blWn2C2FWP7wI7OrfE19FtF8Jt6RP8J2x2jSafmnuR0FmNH1tkWuq+BenZjaefW/a9LAYzdKspq9Ob4caNYXbBNvJ6xrn+x6+m3TGg6nJXDlAmV+FRYAePdHJ+uanfZUx1e2HfGSswCczMSevTXSNU+6VKnmtL2hg1uam3ywnp2VoMleY2dkrAV2xqAJDnAV21oC57MAi5kEryRYNtzaP40m87Csl0g31VNjn9Acfn4cMsHhoM/LBL5AQwklQstJMVk4dJGfLBOi46G8BES0zuGVrLBY72dUjz3EHiIc3Kn54Fn1eedAgMBAAECggEACiDbwy/oD6kXnri8ST5ZgOykxNnOirWDIv0WggEZCrwwnDpWLmSrSL06gI1wYFVCuyMu/ZHQ7L3fE4lkt3DGeJ943m4WodVnT6sd8GKVwBIHzn0ESl2dooW3TYwRGT5uti6Y9s8y7XmE2d1xdgACFgX/UDpccn8UKXh7y2rBICJuXzn1wG4zIrb9bukysxbC1f55MdqWAHhmGY2EiCRMQ1iABh8cueZffRb25MqN/quqdNPnEJ3eZ5AXo1kgb+JE85f6T8UxGBbV8NhYn4EBHoO3QDS8EPk+QnyBcTN6TWqB+Za3nfTBW878dbljFEtg8cvUJel1xR2QiiVoOYORntlCJaQKBgQD3/Vs0kHfxmElCHpEmn6ResBMDNgQNvtP86825QYjnVobqpujsoT3Oq7HZrFdnrtncE5BwDonLfMzIpNwWnnb3Z0AoZKNL7UK1tWk7uoLLMqcgK6cJ1uPhzZ9jDQLl/kQzF1UMcZ7qKzKMDORGX7nxrW2drV+Hl6sR2vJ+5eNvs7SbwKBgQC55hOb1IQES4QHQakIMh9RumnKG3vILdqXnjux0Vn7BM+2PDHtzXaGIYMyUdyYR2lijf3RTqWOaw6+16AbUmGdGpKZormT7uujfnyQPAvlpIpfNpuQOv8OC3Wd8ORBJ7JqQ2mtO/JAT8D02x8fqJ/oN83SrpeUyOar96npU8TjuV8swKBgQDbJ+a7PFUTh+5t5U+HoITP+19b/YDI7p6EPW8m0LelqQiqSC9Rnf22MBu7b0fLFEXp7Mw/i0mRMBhV1QO/ZOXLoMPb2i0h9fld42pQDmoU3pIvuseken7BsWG+5xfBo4Qn1p3None7IDHKevYdieuXgK6TuZWkN2YqPKW3JizNZANwKBgAvCnpGbtUNS8ukODQeBE23peIqcoifImBHgmEItjlW0/jb3I+l5YBAoOpaKWzw++EnF1ndLR+ONDnpEwLu7LjWVU8wVJKBhVuw6C0pMoiwK9r4DRGAhe1U2IGC3hpkgm8bhMOnRGsJKk+P4EhrmH/2W/cgPsC6bb9svWRS5OfF2HrFAoGBANG612EferWkG7jLrVpzniYabgP73yjRAjt+J3JLV3QW42JyXEh+fgJwU4A6mty9GxcNPogTsdz16PdFOG1YtndKHCZUP29i1hIG4BxgxxXjWDrfzH+mEdNg+80v2R5YTM0L2vHUMMU63VR603fl5En4OfBG5cnJ9A3RDeg6mRIGEMnn-----END PRIVATE KEY-----n","client_email":"publisher@registry.iam.gserviceaccount.com","client_id":"2222035690768105943154","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_x509_cert_url":"https://www.googleapis.com/robot/v1/metadata/x509/publisher%registry.iam.gserviceaccount.com"} --image gcr.io/registry/codescovery/my-site-vue3:0.1.245274 --env-vars ENVIRONMENT_NAME_PREFIX=ENV_ CLIENT_CONFIG_PATH=/app/client/configurations/settings.json ENV_SITE_CREATOR_NAME="Example Creator" ENV_SITE_NAME="Site Name" ENV_SITE_TITLE="My Site Title"
But apparently it's writing the dynamically variables into ENV_SITE_CREATOR_NAME only:
Here are the environment variables in azure
What I'm missing?
Update 2
According to @siddheshdesai Answer I got the following result