2017-08-09 5 views
0

Der Versuch, eine AWS Parameterdatei mit JQ zur Verwendung in einem Aufruf von CloudformationJQ Mit AWS erzeugen Cloudformation-Parameter-Datei

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

Ich dachte an unter Vorlage wie folgt zu generieren:

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

Und dann einige Parameter in JQ hinzufügen und versuchen, einige String-Operationen für ein Argument wie jq --arg params 'key1, value1: key2, value2' und dann split on ':' auszuführen, um es zu duplizieren und jedes mit den durch Kommas getrennten Werten aufzufüllen .

Das Beste, was ich tun kann, ist die korrekte Anzahl der Top-Level-Knoten vor der Zeit zu erstellen und dann eine statische Ersetzung durchzuführen, jedes Argument einzeln liefernd. Nicht dynamisch genug, um überhaupt zu stören - besser, einfach ein Bash-Skript zu schreiben und Substitutionen in einer Schleife zu machen.

Jede Hilfe wäre willkommen.

Derzeit ist das Beste, was ich habe in der Lage zu tun, ist dies

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])' 

Aber der Ausgang ist eine Kombination aller Werte (zB Schlüssel1 val1, val2 key1, etc.)

Antwort

0

Sie möchten in Betracht ziehen, --argfile zu verwenden. Hier sind einige Antworten, die es zeigen:

+0

Ich denke, die Idee war, eine Variable von einem jenkins Job in eine Vorlage zu übergeben und sie dynamisch genug machen, dass Der Jenkins-Pipeline-Code kann ohne Änderungen wiederverwendet werden. Auf diese Weise können eine cfn-Vorlage und eine Liste von Parametern außerhalb des groovigen Codes angegeben werden. Wenn ich eine JSON-Datei für jq erstellen muss, dann kann ich auch die CFN-Parameter-Datei mit dem gleichen Werkzeug (nicht jq) erstellen – user1800959

+0

Das klingt vernünftig. Auch hier ist eine andere Antwort, die für Sie von Interesse sein könnte: [Get json Feldwert mit JQ aus einem anderen Verzeichnis] ​​(https://Stackoverflow.com/a/41387346/8379597), insbesondere 'jq --argfile p cloudformation/parameters_v13. json -f manage.jq input.json' – jq170727