Ich verwende Packer mit ansible provisioner einen ami, zu bauen und die Infrastruktur, um Setup mit diesem ami als Quelle Terraforming - etwas ähnlich zu diesem Beitrag: http://www.paulstack.co.uk/blog/2016/01/02/building-an-elasticsearch-cluster-in-aws-with-packer-and-terraformWie kann ich packer Ausgabe ami ID zu Terraform Variablen automatisch verketten?
Wenn Befehl packer build pack.json
erfolgreich abgeschlossen bekomme ich die Ausgabe ami id in diesem Format:
eu-central-1: ami-12345678
in meiner Terraforming Variablen variables.tf
ich die Quelle ami-ID angeben muß, Region usw. Das Problem hier ist, dass ich will sie nicht manuell angeben oder mehrere Male. Für Region (die ich vorher kenne) ist es einfach, da ich Umgebungsvariablen in beiden Situationen verwenden kann, aber was ist mit der Ausgabe ami? Gibt es eine eingebaute Möglichkeit, diese Produkte zu verketten, oder einen nicht so hacky Ansatz, es zu tun?
EDIT: Hacky Ansatz für alle, die interessiert sein könnten. In dieser Lösung bin ich grep
die aws Region & ami von Packer Ausgang ing und einen regulären Ausdruck in Perl verwendet das Ergebnis in eine terraform.tfvars
Datei zu schreiben:
vars=$(pwd)"/terraform.tfvars"
packer build pack.json | \
tee /dev/tty | \
grep -E -o '\w{2}-\w+-\w{1}: ami-\w+' | \
perl -ne '@parts = split /[:,\s]+/, $_; print "aws_amis." . $parts[0] ." = \"" . $parts[1] . "\"\n"' > ${vars}
Schön, werde alle diese Optionen überprüfen und mit Rückmeldung kommen! – fips
Okay, das Schreiben eines Postprozessors scheint die beste Option zu sein - generisch/erweiterbar. Ich denke, man sollte keinen externen Dienst (Atlas/aws) suchen müssen, da die Ami-ID bereits lokal verfügbar ist. Für den Moment habe ich eine Hacky-Lösung (siehe aktualisierte Frage) verwendet, bis ich einen Post-Prozessor schreibe, der deinem ähnlich ist. Danke, dass du 'packer-buildkite' geteilt hast. :-) – fips