2016-06-20 6 views
1

私は新しいサーバーをブートストラップするために専用のopenstackクラウドでterraformを実行しています。最も忙しい時間帯(平日の午後)に新しいサーバーを作成しようとすると、通常はサーバーの半分が失敗します(これはterraformとは関係ありません)。問題は、私がプロビジョニングしようとしているサーバの1つが、provisioner "remote-exec"ブロックをエラーなしで完了できない場合です(プライベートクラウドのため)。terraform applyがすべて停止します。Terraform、プロビジョニング中に障害の発生したサーバーを無視する方法

terraform applyを実行したときにterraformがこれらの障害が発生したサーバを完全に無視して、20台のサーバをプロビジョニングしようとすると1台しか正常に起動しないため、 。

のようなものがありますか?私のリソースに追加して、失敗したサーバを無視して、成功したサーバを実行するようにしますか?

+0

実際にTFでこれを行う方法はありません(私が知る限り)。テラフォームとプロビジョニングのバンドルを解除して、TFが完了した後に何か外部にプロビジョニングすることができます。私たちはインスタンスを作成し、新しいインスタンスに対してAnsibleプレイブックを別々に実行し、Jenkinsを介してそれらのすべてを編成します。全体に少し複雑さを加えていますが、あなたがここにいるように、あなたはあまり緊密に結合されていません。 – ydaetskcoR

+0

こんにちは!前のコメントと同じアイデア。テラフォームベースのインフラストラクチャのための軽量なプロビジョニングツールである[sparrowform](https://github.com/melezhik/sparrowform)を試してみてください。これはテラフォームから切り離されているため、プロビジョニングエラーでお客様のケースを処理します。 –

答えて

0

これを実現するための簡単な設定スイッチはありません。 「リモート・エグゼクティブ」が失敗する原因となっている問題について具体的に説明できますか?

単に接続を拒否しているため、 "remote-exec"を "local-exec"に切り替えてスクリプトでコマンドをラップし、サーバのホスト名をパラメータとして渡すことができます。スクリプトは、SSH接続の開始と必要なコマンドの実行を処理します。エラーが発生した場合、終了コード0でスクリプトが正常に失敗していることを確認し、terraformがスクリプトが正しく機能していると思うようにします。

resource "aws_instance" "web" { 
    provisioner "local-exec" { 
     command = "./myremotecommand.sh ${aws_instance.web.private_ip}" 
    } 
} 
関連する問題