Extract kubectl configmap/secret to .env file

Posted on 2021-03-21 in Trucs et astuces

You can extract data from your kubernetes config maps into a .env file with the commands below (requires you to have jq installed):

# Get the data in JSON.
kubectl get configmap my-map --output json |
    # Extract the data section.
    jq '.data' |
    # Replace each "key": "value" pair with "key=value"
    jq -r 'to_entries | map(.key + "=" + (.value)) | .[]' >> .env

You can also do that with secrets:

# Get the data in JSON.
kubectl get secret my-secret --output json |
    # Extract the data section.
    jq '.data' |
    # Decode the value of each keys.
    jq 'map_values(@base64d)' |
    # Replace each "key": "value" pair with "key=value"
    jq -r 'to_entries | map(.key + "=" + (.value)) | .[]' >> .env

Or with configmap data from helm templates:

# Extract the values with a `awk` script: we print everything starting from the line that contains only `configmap` until the first empty line.
awk '{if ($0 ~ /^configmap:$/) {triggered=1;}if (triggered) {print; if ($0 ~ /^$/) { exit;}}}' "./project/values.yaml" |
    # Keep only the indented lines that contains our configuration values.
    grep '^  ' |
    # Transform key: value into key=value
    sed 's/  //;s/: /=/' >> .env