我正在尝试从头开始创建 Gitlab 组的层次结构。由于它可能会自行扩展,因此我不想为每个组创建单独的资源,因此我尝试创建一个自定义模块并通过使用 for_each 从列表中创建组:
module "gitlab_groups" {
for_each = local.groups
source = "./modules/group"
name = each.value.name path = each.value.path parent_group = try(each.value.parent_group, null)
}
在所有组都没有父组之前,这很有效。问题是如果提供了父组,它将在创建父组之前读取父组的数据。
模块中的相关代码片段:
data "gitlab_group" "parent" {
count = var.parent_group == null ? 0 : 1
full_path = var.parent_group
}
resource "gitlab_group" "group" {
name = var.name
path = var.path
parent_id = var.parent_group == null ? null : data.gitlab_group.parent[0].group_id
}
从terraform apply
命令记录:
module.gitlab_groups[1].data.gitlab_group.parent[0]: Reading...
module.gitlab_groups[0].gitlab_group.group: Creating...
module.gitlab_groups[0].gitlab_group.group: Creation complete after 1s [id=56]
depends_on
除了为每个组创建单独的资源并手动设置之外,还有什么方法可以强制依赖列表中的另一个元素?
如果有必要,我正在使用以下版本:
> terraform --version
Terraform v1.0.0
on windows_amd64
+ provider registry.terraform.io/gitlabhq/gitlab v3.6.0
任何帮助表示赞赏!
编辑:最初的想法是创建一个动态组层次结构,我们不必手动将子组重新连接到新的中间父级。
如果我想在 Subgroup2 及其子组之间引入一个新组,我将不得不手动设置彼此之间的依赖关系,虽然这对少数组来说不是问题,但如果足够大,这可能是一个真正的问题组数。