我目前正在從 dynamodb 獲取一個值并將其存盤為 env var,這是我存盤 terraform 狀態的 s3 存盤桶名稱,即 tf-state-$ENV。
我想將字串中的 $ENV 替換為我在 jenkins 內部為相關環境設定的另一個環境變數,例如 dev、test 等,因為這是環境之間的唯一區別。
export tf_bucket=$(aws dynamodb --region eu-west-1 get-item --table-name terraform-jenkins-params --key '{"module": {"S": "compute"}}'| jq '.Item.tf_s3_bucket[]')
echo $tf_bucket
tf-state-$ENV
echo $ENV
dev
Wanted output
echo $tf_bucket
tf-state-dev
這可以使用 bash 或在 jenkins 中完成,如果可能,我試圖避免使用 sed 等。
uj5u.com熱心網友回復:
使用 bash 模式替換:
tf_bucket=${tf_bucket//"\$ENV"/$ENV}
這將替換所有出現的$ENV。
單個斜杠僅替換第一次出現:
tf_bucket=${tf_bucket/"\$ENV"/$ENV}
編輯:
這可能會引入代碼注入漏洞,但可以eval用于實際擴展字串中的任何變數:
eval "tf_bucket=$tf_bucket"
echo "$tf_bucket"
# gives
tf-state-dev
或者類似地,使用$tf_bucketwith bash -c:
export ENV
bash -c "echo $tf_bucket"
# gives
tf-state-dev
uj5u.com熱心網友回復:
按照@gordon-davisson 的建議通過 envsubst 進行管道傳輸很有用,感謝您的所有建議!
uj5u.com熱心網友回復:
您可以jq直接為此使用,例如在此示例中:
測驗檔案
{
"Item": {
"tf_s3_bucket": [
"tf-state-$ENV"
]
}
}
在 bash 中:
export ENV=foo
jq '.Item.tf_s3_bucket[]|sub("\\$ENV";$ENV["ENV"])' test.json
注意:不要被ENV上面例子中的雙重使用弄糊涂了。那是因為$ENVjq 中是一個保留變數,包含一個包含所有環境變數的陣列。因為你的變數也命名為 ENV,它是$ENV['ENV']
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/352762.html
