Использование переменных / заполнителей Dynami c в файле Yaml - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть файл Google AppEngine Yaml, например, так:

entrypoint: mlflow server \
    --host 0.0.0.0 \
    --workers 4 \
    --backend-store-uri postgresql+psycopg2://$DB_USER:$DB_PASS@/$DB_NAME?host=/cloudsql/<project_id>:us-east1:<cloud-sql-instance> \
    --default-artifact-root gs://$GCP_STORAGE_BUCKET \
    --port $PORT
service: mlflow-tracking-server
runtime: python37
beta_settings:
    cloud_sql_instances: <project_id>:us-east1:<cloud-sql-instance>
resources:
    cpu: 4
    memory_gb: 12
    disk_size_gb: 60

Как заменить эти переменные-заполнители соответствующими значениями?

Я знаю, что для Kubernetes у меня есть bash скрипт, который делает это.

Пример:

#!/usr/bin/env bash

sed "s/GCLOUD_SERVICE_KEY_ENC_REPLACE/$(printf "%s" "$GCLOUD_SERVICE_KEY_ENC"|base64)/g" mlflow_gcp_secret.yaml | \
sed "s/GCP_STORAGE_BUCKET_REPLACE/$(printf "%s" "$GCP_STORAGE_BUCKET"|base64)/g" | \
sed "s/CLOUDSQL_USER_REPLACE/$(printf "%s" "$DB_USER"|base64)/g" | \
sed "s/CLOUDSQL_PASS_REPLACE/$(printf "%s" "$DB_PASS"|base64)/g" | \
sed "s/CLOUDSQL_DB_REPLACE/$(printf "%s" "$DB_NAME"|base64)/g" | \
kubectl apply -f -

Теперь я хочу сделать что-то для файла yaml App Engine.

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Для этого есть специальный инструмент:

envsubst '$DB_USER:$DB_PASS:$GCP_STORAGE_BUCKET' <cfg.yml

заменит все перечисленные переменные на переменные в окружении

demo: https://ideone.com/6mEQk9

Примечание: envsubst является частью gnu gettext, он довольно распространен, но по умолчанию он может быть недоступен.

1 голос
/ 21 февраля 2020

Я думаю, что вашего sed примера должно быть достаточно для того, чтобы вы продвинулись в выполнении этой задачи. Тем не менее, вот второй подход. Поскольку все ваши заполнители выглядят как переменные среды, вы можете использовать интерполяцию bash, чтобы сделать замены для вас.

Рассмотрим этот код:

DBUSER=user
DBPASS=pass
GCP_STORAGE_BUCKET=bucket

cat  > 4appengine <<EOF
entrypoint: mlflow server \
    --host 0.0.0.0 \
    --workers 4 \
    --backend-store-uri postgresql+psycopg2://$DB_USER:$DB_PASS@/$DB_NAME?host=/cloudsql/<project_id>:us-east1:<cloud-sql-instance> \
    --default-artifact-root gs://$GCP_STORAGE_BUCKET \
    --port $PORT
service: mlflow-tracking-server
runtime: python37
beta_settings:
    cloud_sql_instances: <project_id>:us-east1:<cloud-sql-instance>
resources:
    cpu: 4
    memory_gb: 12
    disk_size_gb: 60
EOF

Выше сценарий с замененными переменными будет записан в файл: 4appengine.

...