我有一个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 -
现在,我想为App Engine yaml文件做些事情。
答案 0 :(得分:1)
我认为您的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。
答案 1 :(得分:1)
有一个专用于此的工具:
envsubst '$DB_USER:$DB_PASS:$GCP_STORAGE_BUCKET' <cfg.yml
将环境中列出的所有变量替换为
注意:envsubst是gnu gettext的一部分,很常见,但默认情况下可能不可用。