我有一长串机器,所有这些机器在系统中的功能上有一点不同。我想组织这些机器并自动添加到主机库存文件,以便我可以运行并管理库存。有没有很好的解决方案呢?目前从terraform创建一个完整的库存的最好方法
我觉得应该ansible主机看起来像......
[webservers]
someip
someip
[integration]
someip
someip
等。
问这个问题,我目前研究的输出VAR和使用这些渲染模板从一个文件后。
我有一长串机器,所有这些机器在系统中的功能上有一点不同。我想组织这些机器并自动添加到主机库存文件,以便我可以运行并管理库存。有没有很好的解决方案呢?目前从terraform创建一个完整的库存的最好方法
我觉得应该ansible主机看起来像......
[webservers]
someip
someip
[integration]
someip
someip
等。
问这个问题,我目前研究的输出VAR和使用这些渲染模板从一个文件后。
我想通了。
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"
}
}
然后创建引用例如早期
内容在文件中的模板dev_hosts.cfg
[public]
${api_public}
[private]
${api_internal}
我们的方法略有不同。我们定义了一个Terraform模块(terraform-null-ansible
),通过使用动态库存,我们随时可以在主机上运行剧本。
https://github.com/cloudposse/terraform-null-ansible
这是一个非常terraform为中心的方法,但导致非常干净的集成。另外,通过计算剧本的校验和,我们只在剧本发生变化时才调用可靠的配置者。
用法很简单:
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
我得仔细看看,谢谢! – DrM
你可以添加一些细节了解您terraform组织以及您希望您的清单文件来组织?如果从terraform输出机器IP,则可以使用命令'terraform output'返回可以作为您的剧本的一组清单的IP列表。 –
RaGe
这很有帮助。其实我在想,也许我应该使用模板和输出变量的组合来渲染。我发现以下代码回购,代码为https://github.com/opencredo/k8s-terraform-ansible-sample/tree/master/terraform其中人员呈现ssh配置。 – DrM
只是让你知道你也可以使用null_configuration资源从terraform内部运行剧本。 – RaGe