2016-06-28 9 views
0

私は新しい作成されたaws_instanceのスクリプトに変数を渡そうとしていますが、どうすればよいか分かりません。私が持っているものは次のとおりです。Terraformのリモートexec変数の渡し

provisioner "file" { 
    source  = "${path.module}/scripts/slave-provisioner.sh" 
    destination = "/tmp/slave-provisioner.sh" 
} 

provisioner "remote-exec" { 
    inline = [ 
     "chmod +x /tmp/slave-provisioner.sh", 
     "sudo /tmp/slave-provisioner.sh ${split(",",var.zookeeper_ips_list)}" 
    ] 
} 

私は、zookeeper_ips_listに正しいIPリストがあることを確認しました。

/tmp/terraform_939984059.sh: 5: /tmp/terraform_939984059.sh: 10.239.12.181: not found 

だから、基本的に私はこのマシンを作成し、それが設定だ行うことができますので、IPアドレスのリストを渡される私のプロビジョニングスクリプトのキックしたい:私はテラフォームを経由して取得

あり誤差がある適用されます。

+0

コンマで区切った文字列を配列に変換してプロビジョニングスクリプトに渡すので、これはかなり奇妙に見えます。私はあなたがそれを文字列として渡すことを望むと期待しているので、期待される振る舞いが実際にはそれが何であるかを100%確信していません。それは本当に意味がありますか?あるいは、カンマをスペースで置き換えるほうがいいでしょうか( 'replace()'を使って)? – ydaetskcoR

+0

これらのIPアドレスをbashスクリプトに渡して、私たちのクラスタのための動物園の設定を更新するだけです。問題はちょっとしたbashフォーマットで解決されました。 –

答えて

1

これは、無関係のbashクリーンアップによって解決されました。 Terraformのフォーマットは正しいものであり、期待どおりに動作していました。受信したIPアドレスをbashスクリプトで適切に処理していないため、失敗していました。

デバッグ時にTerraformが最も堅牢ではないので、これは追跡するのが面倒です。

+0

答えを編集して、あなたがそれを修正して表示することはできますか? – ydaetskcoR

+0

解決方法は、基本となるシェルスクリプトを修正したものです。 bashの構文エラーを修正し、配列が入ってくるのを処理します。最後にTerraformの問題はありませんでした。 –

0

最新のバージョンでterraformを実行したいと考えています。

terraformは変数var.zookeeper_ips_listの値を取得しますが、二重引用符で二重引用符を使用すると問題が発生します。あなたが\によってそれらを脱出しようと、私は、コードをしようとしなかった、私は結果

"sudo /tmp/slave-provisioner.sh ${split(\",\",var.zookeeper_ips_list)}" 

を教えてくださいそして、あなたは、それを取る私は、同様の結果を知らせることができます。

zookeeper_ips_list = ${split(",",var.zookeeper_ips_list)} 

provisioner "remote-exec" { 
    inline = [ 
     "chmod +x /tmp/slave-provisioner.sh", 
     "sudo /tmp/slave-provisioner.sh ${zookeeper_ips_list)}" 
    ] 
+0

二重引用符を削除してbashフォーマットを修正し、これを解決できました。 Terraformは、今日のような良いデバッグオプションが欠けています。ファイルをリモートホストにコピーしてパス変数で実行することは、Terraformでは最も簡単なことではありません。 –

+0

更新していただきありがとうございます。 TerraformはまだGAバージョンではなく開発モードです。私の答えがあなたに役立つなら、それを投票してください。問題を解決するには、それを受け入れてください。 – BMW

関連する問題