2017-08-03 7 views
1

私は長いリストのマシンを持っていますが、システムの機能は少し異なります。これらのマシンを整理してホストインベントリファイルに自動的に追加して、私が実行可能なインベントリを管理してインベントリを管理したいと思っています。そこに良い解決策がありますか?現在、テラフォームから潜在的在庫を作成する最良の方法

私はansibleホストが質問をした後、何かのような...

[webservers] 
someip 
someip 
[integration] 
someip 
someip 

など。

に見えるはずです、私は現在、出力VARSを研究し、ファイルからテンプレートをレンダリングするために、これらを使用していますだと思います。

+1

にありますか? terraformからマシンIPを出力する場合は、コマンド 'terraform output 'を使用して、プレイブック用のインベントリのセットとなるIPのリストを返すことができます。 – RaGe

+0

これは参考になります。実際には、おそらくレンダリングにテンプレートと出力変数の組み合わせを使うべきだと私は考えています。私はコードhttps://github.com/opecredo/k8s-terraform-ansible-sample/tree/master/terraformで次のレポを見つけました。ここで人はssh設定をレンダリングします。 – DrM

+1

null_configurationリソースを使用して、terraform内からプレーブックを実行することもできます。 – RaGe

答えて

3

私はそれを理解しました。

data "template_file" "dev_hosts" { 

    template = "${file("${path.module}/templates/dev_hosts.cfg")}" 

    depends_on = ["aws_instance.dev-api-gateway", 
       "aws_instance.dev-api-gateway-internal", 
       .... 
      ] 


     vars { 
     api_public = "${aws_instance.dev-api-gateway.private_ip}" 
     api_internal = "${aws_instance.dev-api-gateway-internal.private_ip}" 
     } 

} 

resource "null_resource" "dev-hosts" { 

    triggers { 

     template_rendered = "${ data.template_file.dev_hosts.rendered }" 

    } 

provisioner "local-exec" { 

    command = "echo '${ data.template_file.dev_hosts.rendered }' > dev_hosts" 

} 

} 

はその後、以前の我々のアプローチは若干異なっている

[public] 
${api_public} 


[private] 
${api_internal} 
1

をdev_hosts.cfg例の

内容を参照し、ファイルにテンプレートを作成します。私たちは、ダイナミックなインベントリを使用してホスト上でプレイブックを実行したいときにいつでも呼び出すTerraformモジュール(terraform-null-ansible)を定義します。

https://github.com/cloudposse/terraform-null-ansible

これは非常にテラフォーム中心のアプローチであるが、非常にきれいな統合につながります。さらに、プレイブックのチェックサムを計算することによって、プレイブックが変更されたときにのみ、無能なプロビジョナーに電話をかけることができます。

使い方は非常に簡単です:あなたはテラフォームが編成されているかについて、どのようにあなたのあなたのインベントリファイルを整理することを期待するディテールのビットを追加することができます

module "web_provisioner" { 
    source = "git::https://github.com/cloudposse/terraform-null-ansible.git?ref=tags/0.3.8" 

    arguments = ["--user=ubuntu"] 
    envs  = ["host=${aws_instance.web.public_ip}"] 
    playbook = "../ansible/playbooks/test.yml" 
    dry_run = false 
} 

詳しいドキュメントは、GitHubのREADME.md

+0

私は詳細を取る必要があります、ありがとう! – DrM