我对 terraform 很陌生,不明白我做错了什么。我的目标是根据每个值可以具有的特定单词来过滤列表。
所以我的模块看起来像这样,我定义了pipeline_list
module "pipelines" {
source = "./pipelines"
for_each = var.pipelines
project_id = data.azuredevops_project.dataanalytics.id
repo_id = module.repositories[each.key].repo_id
pipeline_list = each.value
group_ids = local.group_ids
}
pipelines
tfvars 文件本身看起来像这样
pipelines = {
Infrastructure = [
"pipelines/BI-Infrastructure-IaC-CI.yml",
"pipelines/BI-Infrastructure-IaC-Deploy.yml"
],
Applications = [
"datafactory/pipelines/DataAnalytics-Datafactory-Test.yml",
"datafactory/pipelines/DataAnalytics-Datafactory-CI.yml",
"datafactory/pipelines/DataAnalytics-Datafactory-Deploy.yml",
"databricks/pipelines/BI-Applications-Databricks-CI.yml",
"databricks/pipelines/BI-Applications-Databricks-Deploy.yml"
]
}
我想过滤此列表并仅选择其中包含“部署”的值。
我的尝试如下所示:
locals {
deploy_pipelines = flatten([
for project, pipelines in var.pipeline_list : [
for pipeline in pipelines :
contains(pipeline, "Deploy") ? pipeline : null
]
])
}
但我收到错误消息
请帮忙 idnetify 我在哪里做mistkae?
编辑: 我已经以这种方式更改了当地人,我认为我正在做额外的循环,因为项目不在那里。但我现在收到新错误,提示“调用函数“包含”失败:参数必须是列表、元组或集合”。
locals {
deploy_pipelines = flatten([
for pipeline in var.pipeline_list :
contains(pipeline, "Deploy") ? pipeline : null
]
)
}
该
contains
函数不是字符串到子字符串,请参阅文档...https://developer.hashicorp.com/terraform/language/functions/contains
你要找的是
strcontains
,Terraform在版本(v1.5.0)中介绍了这一点 https://developer.hashicorp.com/terraform/language/functions/strcontains如果您使用的是旧版本的 terraform,您可能必须在替换后使用正则表达式或字符串比较作为条件,但我强烈建议升级到最新版本。
我想指出的还有一点,这将是你的代码......
这将产生一个带有空值的计划:
如果你不想要 null 在那里(我假设你不想要)我们可以
if
使用