Sou muito novo no terraform e não entendo o que estou fazendo de errado. Meu objetivo é filtrar a lista com base na palavra específica que cada valor pode ter.
Então meu módulo fica assim onde eu defino opipeline_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
O próprio arquivo tfvars se parece com isso
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"
]
}
E eu gostaria de filtrar esta lista e escolher apenas os valores que contêm "Implantar" nela.
Minha tentativa é assim:
locals {
deploy_pipelines = flatten([
for project, pipelines in var.pipeline_list : [
for pipeline in pipelines :
contains(pipeline, "Deploy") ? pipeline : null
]
])
}
Mas recebo o erro dizendo isso
Por favor, poderia ajudar a identificar onde faço o mistkae?
EDIT: mudei os locais dessa forma, acho que estava fazendo um loop extra, já que o projeto não está lá. mas recebo um novo erro dizendo que a chamada para a função "contém" falhou: o argumento deve ser lista, tupla ou conjunto.
locals {
deploy_pipelines = flatten([
for pipeline in var.pipeline_list :
contains(pipeline, "Deploy") ? pipeline : null
]
)
}
A
contains
função não é uma string para substring, veja a documentação...https://developer.hashicorp.com/terraform/linguagem/functions/contains
o que você está procurando é
strcontains
que o Terraform introduziu isso na versão (v1.5.0) https://developer.hashicorp.com/terraform/language/functions/strcontainsse você estiver usando uma versão antiga do terraform, talvez seja necessário usar regex ou uma string compare após uma substituição como condição, mas eu recomendo fortemente atualizar para a mais recente.
Outra coisa que quero ressaltar, esse seria o seu código...
que produzirá um plano com nulos:
se você não quiser o nulo lá (presumo que não), podemos usar
if
um