gpt4 book ai didi

terraform - 如何按顺序使用多个 Terraform 提供程序

转载 作者:行者123 更新时间:2023-12-03 15:08:19 24 4
gpt4 key购买 nike

如何让 Terraform 0.10.1 支持两个不同的提供程序,而不必每次都为每个提供程序运行“terraform init”?

我正在尝试使用 Terraform

1) 使用“DigitalOcean”提供程序提供 API 服务器

2)随后使用“Docker”提供程序来启动我的容器

有什么建议?我是否需要编写一个包装 Terraform 的编排脚本?

最佳答案

由于需要将动态设置从一个提供程序传递到另一个提供程序,Terraform 当前的设计难以在单个配置中创建“多层”架构:

resource "digitalocean_droplet" "example" {
# (settings for a machine running docker)
}

provider "docker" {
host = "tcp://${digitalocean_droplet.example.ipv4_address_private}:2376/"
}

正如您在文档中看到的那样,将动态值传递到提供程序配置中并不能完全发挥作用。如果您小心使用它,它实际上可以部分工作,因此完成此操作的一种方法是使用上述配置,然后通过强制 Terraform 首先创建液滴来解决“鸡与蛋”问题:
$ terraform plan -out=tfplan -target=digitalocean_droplet.example

以上将创建一个仅处理 droplet 及其任何依赖项的计划,而忽略 docker 资源。一旦 Docker droplet 启动并运行,您就可以正常重新运行 Terraform 以完成设置,然后应该会按预期工作,因为 Droplet 的 ipv4_address_private然后就会知道属性。只要液滴从未被替换,Terraform 就可以在此之后照常使用。

使用 -target很繁琐,因此当前的建议是将此类系统拆分为多个配置,每个概念“层”一个。但是,这确实需要初始化两个单独的工作目录,您在问题中指出您不想这样做。此 -target技巧允许您在单个配置中完成它,代价是非常规工作流程以使其最初启动。

关于terraform - 如何按顺序使用多个 Terraform 提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45734925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com