问题标签 [terraform0.11]
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 中进行简单的字符串连接?
我一定是非常愚蠢,但我不知道如何在 Terraform 中进行简单的字符串连接。
我有以下数据null_data_source
:
所以当env_name="prod"
我想要输出app.api.mydomain.com
和其他任何东西时 - 假设env_name="staging"
我想要app.api.staging.mydomain.com
.
但是上面会输出app.api.stagingmydomain.com
<-- 注意 . 后面缺少的点staging
。
我尝试连接“。” 如果 env_name 不是“prod”而是 Terraform 错误:
错误是__builtin_StringToInt: strconv.ParseInt: parsing ""
TF 中的concat()
函数似乎适用于列表而不是字符串。
正如标题所说:如何在 Terraform 中进行简单的字符串连接?
我不敢相信我在问如何将 2 个字符串连接在一起 XD
更新:
对于任何有类似问题的人,我暂时做了这个可怕的解决方法:
main_api_gw = "app.api.${var.env_name == "prod" ? "" : var.env_name}${var.env_name == "prod" ? "" : "."}mydomain.com"
terraform - 连接列表,设置为资源属性
我正在尝试组合两个列表并将其设置为资源的属性,但出现错误。这是最小的复制:
我收到一个超级无用的错误
错误:加载模块时出错:模块 load_balanced_service:加载 .terraform/modules/188cf031fdce92d75131be4747cedad9/XXX.tf 时出错:读取 aws_ecs_service[ecs_service] 的配置时出错:在 1:10 解析错误:预期表达式但找到“[”
它声称第 1 行,但如果您删除该 security_groups 行,一切正常。
aws-lambda - Terraform 0.11:aws_lambda_function 中的条件 vpc_config
我正在尝试在vpc_config
块上部署一个带有条件的 Lambda 函数。我曾尝试在内部使用 count ,vpc_config
但无法在其中使用 count 语句。根据资源的文档,如果您按如下方式传入空列表,则该vpc_config
部分将被忽略:
我可以确认这确实按预期工作(未尝试 VPC 配置)。
subnet_ids
因此,我尝试对and使用条件security_group_ids
- 类似的东西var.vpc_function ? var.subnet_ids : []
- 但你不能在条件语句中传递一个列表。我最接近解决方案的是下面的hacky数字,它加入然后拆分列表:
这适用于第一次无论vpc_function
是真还是假,这很好,但是哪里vpc_function
是假的,terraform 总是将上述内容视为每次重新应用时的更改:
我想问题是我的加入然后拆分列表没有被视为 [],而是作为包含一些(空白)内容的列表。
还有其他人对此有解决方案吗?我也尝试过使用 Terraform 0.12,但无法弄清楚。也许有人在 Terraform 0.12 中做了类似的事情并且可以提供一些指点?
amazon-web-services - 仅当 Terraform 中存在文件时才部署资源
我有一个要求,只有当某个文件存在于某个位置时,我才必须部署资源,否则它将跳过该资源。
就像这里是在某些 AWS 账户中部署某个身份提供商的代码。除了这个身份提供者(比如 abc),许多其他身份提供者也从同一个 main.tf 文件部署,所以所有的都必须在这里。abc-${var.aws_account}.xml
唯一的挑战是,在为任何帐户部署 IAM 层时,我们仅在文件部分存在于文件路径中时才会部署此特定资源
saml_metadata_document
。如果它不存在于路径中,它将简单地忽略资源创建并继续执行其余代码。
文件夹结构
如何在 Terraform 0.11 中进行条件检查以检查文件是否存在?
terraform - Terraform:多个 ACM 证书
我正在尝试编写一些 TF,给定站点的单个 FQDN,它将生成 ACM 证书,创建 R53 记录以进行验证并在单个 TF 传递中运行验证。
我没有使用子域,我让它适用于单个 FQDN,但与 TF 的本质一样,我希望将来能够向变量添加另一个 FQDN 以获得多个证书。
当我运行以下代码时,我收到错误:
但我知道 R53 记录确实导出了 fqdn 属性。
acm.tf:
变量.tf:
我的 vars 文件包含这样的条目:
编辑:添加了 Route53 区域的数据查找,即使有多个不同的域,它似乎也只返回变量中提供的第一个域的区域。即 example1.com 和 example2.com 它将为两组 R53 记录使用相同的区域 ID,这显然会失败
amazon-web-services - 如何使用 Terraform 0.11 访问其中包含地图的列表列表?
我有几个EKS 节点组。我正在尝试访问autoscaling_groups
name
所有节点组(例如name = eks-e214c586716a
)。在 0.12 中要容易得多,但我们仍在使用 0.11。
这有效:aws_eks_node_group.node-group.resources.0.autoscaling_groups.0.name
但是,当我迭代时,我不成功。
amazon-web-services - terraform:有没有办法动态创建 iam 策略语句?
地形版本:0.11
我正在运行多个 eks 集群并尝试在此文档之后的所有集群中启用基于 IAM 角色的服务帐户: https ://www.terraform.io/docs/providers/aws/r/eks_cluster.html#enabling-iam-roles -for-service-accounts
当我在策略语句中硬编码集群名称并创建多个语句时,这有效
由于我有多个集群,我希望能够动态生成语句,因此我进行了以下更改:
我创建了一个count
变量并更改了主体和条件中的值
Terraform 现在能够找到集群,但也会生成多个策略。这将不起作用,因为在以下语法中,assume_role_policy 不采用列表
看起来我不需要创建多个策略,而是需要在一个策略中生成多个语句(所以我可以添加到一个 iam_role)。有没有人做过类似的事情?谢谢。
azure - Terraform 将默认值分配给局部变量
我的 variables.tfvars 中有以下代码:
以下代码用于创建 azure 资源:
可以看出,我们通过设置变量值来操纵 Azure 上资源的创建: is_premium_service_bus_required 为 0(未创建)或 1(已创建)
我有以下局部变量:
它只负责操作默认连接字符串并在末尾添加协议。
我们有以下代码,它根据“service_bus_type_cloud”的值确定,应该为“service_bus_cloud_connection_string”变量分配什么值,该变量稍后将在不同的 terraform 文件中使用。
现在的问题是,当 "is_premium_service_bus_required" 的值设置为 "0" 时,高级服务总线 azure 服务没有创建并且本地变量 "premium_service_bus_cloud_connection_string" 值为空,我们最终得到以下错误:
有没有办法绕过这个错误或重写逻辑的更好方法?我们正在运行 Terraform 版本 0.11,因此这里提到的条件运算符不能用作使用以下代码:
将评估两个值表达式,即使只返回一个,它似乎是一个在 0.12 中修复的错误,如此处所示
terraform - terraform 11 和“concat”函数:解析错误
TF v.0.11(我知道它很旧,但我需要这个)
我尝试以这种方式配置输出:
错误信息是
读取输出 FUNCTION_ARN 的配置时出错:在 1:46 解析错误:预期表达式但找到“[”
我做错了什么,如何解决?
list - 如何从terraform11中的多类型地图中提取属性
我正在尝试cidr_blocks
从资源的ingress
规则中提取属性aws_security_group
。我的 terraform 项目正在运行 version v0.11.13
。
模块A/main.tf:
模块A/输出.tf
这给了我一个类似于以下的输出:
但是,我无法仅提取 terraform 中的cidr_blocks
using查找函数,因为地图值的类型不同(有些是列表,有些是字符串)。我无法在 terraform12 中使用其他高级功能,因为该项目在 terraform11 中运行。
请提出一种从上述输出中仅提取 cidr_blocks 的方法,类似于以下内容。
预期输出:
或者
提前致谢。