如何让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/"
}
Run Code Online (Sandbox Code Playgroud)
如您在文档中所见,将动态值传递到提供程序配置中并不能完全起作用。如果谨慎使用它,它实际上确实可以部分起作用,因此完成此操作的一种方法是使用上述配置,然后通过强制Terraform首先创建液滴来解决“鸡与蛋”问题:
$ terraform plan -out=tfplan -target=digitalocean_droplet.example
Run Code Online (Sandbox Code Playgroud)
上面的代码将创建一个仅处理Droplet及其任何依赖项的计划,而忽略docker资源。一旦Docker Droplet启用并运行,您就可以照常重新运行Terraform以完成设置,然后应该可以按预期工作,因为Droplet的ipv4_address_private属性将为人所知。只要永不替换液滴,此后即可正常使用Terraform。
使用-target很麻烦,因此当前的建议是将这样的系统分成多个配置,每个概念“层”一个。但是,这确实需要初始化两个单独的工作目录,您在问题中表示不想这样做。此-target技巧使您可以在单个配置中完成它,而以非常规的工作流为代价来使其最初启动。
| 归档时间: |
|
| 查看次数: |
4381 次 |
| 最近记录: |