2016-06-20 15 views
1

Ich betreibe Terraform mit einer privaten Openstack-Cloud, um neue Server zu starten. Wenn ich versuche, während der geschäftigsten Betriebszeiten (wochentags am Nachmittag) neue Server zu erstellen (mit irgendeiner Methode), scheitert normalerweise die Hälfte der Server (und das hat nichts mit Terraform zu tun). Das Problem ist, wenn einer der Server, die ich versuche, einen provisioner "remote-exec" Block fehlerfrei zu vervollständigen (wegen meiner privaten Wolke) mein ganzes terraform apply stoppt.Terraform, wie man fehlgeschlagene Server während der Bereitstellung ignoriert?

Ich möchte Terraform vollständig ignorieren diese fehlgeschlagenen Server, wenn ich terraform apply ausführen, so dass, wenn ich 20 Server bereitstellen und nur 1 von ihnen erfolgreich gestartet wird, dann durchläuft dieser Server alle Befehle, die ich in meinem Ressourcenblock angeben .

Gibt es so etwas wie eine ignore_failed_resources = true Zeile, die ich meinen Ressourcen hinzufügen kann, damit Terraform die fehlgeschlagenen Server ignoriert und die erfolgreichen zum Abschluss führt?

+0

Es gibt nicht wirklich eine Möglichkeit, das in TF zu tun (soweit ich weiß). Sie könnten versuchen, die Terraform und die Bereitstellung zu entbündeln und etwas externes zu tun, nachdem TF fertiggestellt wurde. Wir haben TF Instanzen erstellen und separat Ansible Playbooks gegen die neuen Instanzen ausführen und alles über Jenkins orchestrieren. Fügt dem Ganzen ein bisschen Komplexität hinzu, bedeutet aber, dass Sie nicht so eng miteinander verbunden sind wie Sie hier sind. – ydaetskcoR

+0

Hallo! Die gleiche Idee wie beim vorherigen Kommentar. Probieren Sie [sparrowform] (https://github.com/melezhik/sparrowform) aus, ein einfaches Provisionierungswerkzeug für Terraform-basierte Infrastruktur. Es ist von Terraform entkoppelt, so dass dies Ihren Fall mit Bereitstellungsfehlern behandelt. –

Antwort

0

Es gibt keinen einfachen Konfigurationsschalter, den Sie aktivieren können, um dies zu erreichen. Könnten Sie das Problem genauer beschreiben, das den Fehler "Remote-Exec" verursacht?

Wenn es sich einfach weigert, eine Verbindung herzustellen, können Sie Ihre "remote-exec" für eine "local-exec" ausschalten und Ihren Befehl in ein Skript schreiben, wobei Sie den Hostnamen Ihres Servers als Parameter übergeben. Das Skript würde dann die SSH-Verbindung initiieren und die erforderlichen Befehle ausführen. Stellen Sie sicher, dass das Skript mit einem Exit-Code von 0 fehlerfrei ausfällt, wenn der Fehler auftritt, damit Terraform denkt, dass das Skript ordnungsgemäß funktioniert hat.

resource "aws_instance" "web" { 
    provisioner "local-exec" { 
     command = "./myremotecommand.sh ${aws_instance.web.private_ip}" 
    } 
}