2017-08-09 124 views
0

試圖生成使用JQ用於呼叫的AWS參數文件CloudFormation使用JQ產生AWS CloudFormation參數文件

aws cloudformation create-stack --stack-name test --parameters file://params.json --template-body file://cfn.yaml 

我想帶模板是這樣的:

'[{"ParameterKey":"KEY","ParameterValue":"VALUE","UsePreviousValue":false}]' 

然後在JQ中添加一些參數並嘗試對arg執行一些字符串操作,例如jq --arg params'key1,value1:key2,value2',然後拆分爲':'以複製它並使用逗號分隔值填充每個參數。

我能做的最好的事情是提前創建正確數量的頂級節點,然後做一個靜態替換,分別提供每個參數。不夠動態,甚至打擾 - 最好只寫一個bash腳本並在循環中進行替換。

任何幫助,將不勝感激。

目前我已經能夠做的最好的就是這個

echo '[{"ParameterKey":"KEY","ParameterValue":"VALUE","UsePreviousValue":false}]' | jq --arg vars "key1,val1:key2,val2" '.[0].ParameterKey = ($vars|split(":")|.[]|split(",")|.[0]) | .[0].ParameterValue = ($vars|split(":")|.[]|split(",")|.[1])' 

但輸出爲全值的組合(例如key1的VAL1,VAL2 KEY1等)

回答

0
+0

我猜當時的想法是從詹金斯工作的一些變量傳遞到模板,並使其足夠動態Jenkins管道代碼可以在不改變的情況下重複使用。這樣一個cfn模板和參數列表可以在groovy代碼之外指定。如果我必須創建一個用於jq的json文件,那麼我不妨使用相同的工具(而不是jq)創建cfn參數文件。 – user1800959

+0

這聽起來很合理。這裏還有另外一個你可能感興趣的答案:[從不同目錄中獲取JQ字段值](https://stackoverflow.com/a/41387346/8379597),特別是'jq --argfile p cloudformation/parameters_v13。 json -f manage.jq input.json' – jq170727