问题标签 [terraform0.12+]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
terraform - 如何将逗号分隔的数组传递给 terraform v0.12.0 中的资源?
在下面的代码块中,我试图将一组服务器名称传递给 attributes_json 块:
运行这个给我一个错误:
(这是在 var.consul-server_count 的变量中声明计数为 2 之后)
谁能告诉我这样做的正确方法是什么?
terraform - 模块的动态嵌套块
我想为 Azure 应用程序网关创建一个模块。
我想使用内联块 disabled_rule_group 禁用一些规则组,但是如何在模块中使其可配置?这应该是一个可选变量。
我找到for_each
了嵌套块。
例子:
但是,这不起作用。
有人知道如何修复语法吗?
此外,该变量disabled_rule_groups
应该是可选的。因此,如果未设置 disabled_rule_groups ,则应禁用该块。我怎样才能做到这一点?我需要第二个布尔变量和一个 if 吗?
terraform - 没有循环时,terraform destroy 会产生循环错误
地形版本
Terraform 配置文件
main.tf
在我的根提供商中:
这是模块“组织信息”:
然后模块“堆栈信息”:
最后,“项目信息”模块:
调试输出
完成后terraform destroy -auto-approve
,我得到:
并terraform graph -verbose -draw-cycles -type=plan-destroy
给了我这张图:
来源:
预期行为
这个想法是在组织、项目和堆栈级别使用模块来设置可以在所有资源中重复使用的命名约定。Organisation-info 加载组织信息,关于项目的项目信息,堆栈信息根据当前工作空间确定要定位的项目。
我在模块中省略了一堆其他逻辑,以保持它们在这个问题上的清洁。
根据terraform
没有循环,destroy
应该可以正常工作。
实际行为
我们得到了我在上面发布的循环,即使 terraform 没有显示循环。
重现步骤
- 设置三个模块,
organisation-info
,project-info
, 和stack-info
如上所示。 - 如上所示设置根提供程序。
terraform init
terraform destroy
(如果你先申请似乎并不重要)
附加上下文
奇怪的是,如果我在 中注释掉这个输出stack-info
,循环就会停止:
这看起来真的很奇怪......我既不明白为什么输出变量会有所作为,也不明白为什么在没有循环的情况下会出现循环错误。
奇怪terraform plan -destroy
的是,不显示循环,只有terraform destroy
。
我的蜘蛛侠感觉告诉我邪恶正在发生。
感谢任何可以告诉我发生了什么,这是否是一个错误,以及如何解决的人。
terraform - 带有 Terraform 的 AWS Codepipeline - 如何动态创建阶段
我使用 terraform 模块设计了一个 AWS 代码管道模块,我有多个使用代码管道模块的实际代码管道。我使用模块作为设计模式是因为所有的代码管道看起来都很相似,只是有些代码管道需要批准阶段,有些不需要。如何设计 codepipeline 模块审批阶段,以便可以根据不同的需求创建实际的 codepipelines?
我尝试使用 count = 0 或 1 来控制舞台,但它不起作用,因为舞台不是资源级的。有什么棘手的方法或解决方法吗?
我觉得这个链接问了类似的问题,但我不知道答案是什么: Terraform & AWS CodePipeline - Dynamically define actions on a stage
这是我的代码管道 terraform 模块:
terraform - terraform_remote_state 数据块语法
我正在使用 Terraform 进行 AWS 多账户设置。我有一个创建多个子帐户的主帐户,在子帐户中我引用主帐户的远程状态来检索输出值。
该terraform plan
命令在测试 main.tf 中针对此配置失败:
出现以下错误:
从我从文档中可以看出,这应该可以工作……我做错了什么?
amazon-web-services - 无法使用 Terraform 为 ElasticSearch 添加 2 个子网
我正在尝试使用 Terraform 构建一个 ElasticSearch 集群,但我无法分配超过 1 个子网!这真的很奇怪,因为文档中有这样的:
https://www.terraform.io/docs/providers/aws/r/elasticsearch_domain.html#subnet_ids
subnet_ids -(必需)要在其中创建的 Elasticsearch 域终端节点的 VPC 子网 ID 列表。
但是当我尝试这样做时,我收到了这个错误:
错误:ValidationException:您必须准确指定一个子网
这是我的代码:
我正在使用 terraform v0.12.2
谢谢你的帮助。
terraform - 在 Terraform 0.12 中合并两张地图以创建第三张地图
我需要在 Terraform 0.12 中对输入数据进行一些复杂的合并。我不知道这是否可能,但也许我只是做错了什么。
我有两个变量:
然后我想在这样的模板中组合这些源:
哪里merged
将包含组合数据。
模板语言似乎只支持简单的 for 循环,因此在那里进行合并似乎是不可能的。
因此,我假设数据处理需要在 DSL 中进行。但是,我需要这样做:
- 遍历 ebs_block_devices 列表,跟踪索引(如
enumerate()
在 Python 或each.with_index
Ruby 中) - 从 mount_points 列表中获取对应的元素
- 将这些添加到生成的地图中。
具体来说,我的问题是似乎没有任何等效的 Pythonenumerate
函数,这使我无法跟踪索引。如果有,我想我可以做这样的事情:
我现在尝试在 Terraform 中进行的这种数据转换是否可行?如果不可能,首选的替代实现是什么?
terraform - 如何忽略块中属性的变化
我正在 Azure 中部署 Web 应用程序,我想忽略site_config块中对scm_type属性的更改。
在部署期间,将scm_type属性设置为None,然后我们在 Azure 门户中将其更改为不同的东西。
我当前的 TF 代码如下所示:
我希望 terraform 计划在基础设施更新期间忽略scm_type的变化,但它正试图将其恢复为None。来自地形计划输出的行:
~ scm_type = "BitbucketGit" -> "None"
terraform - 使用模块时不显示输出
outputs.tf
我的模块目录下有一个文件。我有一个Main.tf
文件。当我创建资源并应用 Terraform 时,不显示输出。但是,如果我不使用模块并严格从Main.tf
文件中创建资源,则输出显示正常。outputs.tf
使用模块和单独的文件时,我需要为输出显示做些什么不同的事情吗?
但是,如果我不使用模块并严格从Main.tf
文件中创建资源,则输出显示正常。
主文件
================
模块文件
==================
输出.tf
terraform - 无法从 Terraform v0.12+ 获取输出
我正在迁移到最新版本的 Terraform,并且无法重现文档概述的内容,即如何从应用程序中获取输出。该文件指出
data.terraform_remote_state.vpc.vpc_id
因此,将这些从模块中取出应该具有以下效果
data.module_name.remote_state.vpc.vpc_id
我会想?
这是我的模块调用
所以我会假设....我应该做一些事情
data.vpc.terraform.vpc.vpc_id
这是我的目录的大纲,列出了状态文件
但是......我也注意到他们在模块中调用 id 的方式,现在......现在我很困惑......
在 Terraform v0.12+ 中调用模块输出的正确方法是什么?