简体   繁体   English

Terraform 使用来自 for_each 的新创建资源

[英]Terraform use new created ressource from for_each

I try to create groups and projects in gitlab with terraform.我尝试使用 terraform 在 gitlab 中创建组和项目。 Later I want to create a new resource "project_membership" to give the new projects the groups as members.稍后我想创建一个新资源“project_membership”,为新项目提供组成员。 Therefore I need the Group_ID and the Project ID.因此我需要 Group_ID 和项目 ID。 If I create all resources in own resource blocks, I can refer to it with ${gitlab_group.NAME_OF_THE_RESSOURCE.id} but when I use for_each I do not specify a name.如果我在自己的资源块中创建所有资源,我可以使用${gitlab_group.NAME_OF_THE_RESSOURCE.id}来引用它,但是当我使用 for_each 时,我没有指定名称。 How I can get the group and project IDs?如何获取组和项目 ID?

terraform {
  backend "http" {
  }
  required_providers {
    gitlab = {
      source = "gitlabhq/gitlab"
      version = "~> 3.1"
    }
  }
}

locals {
  services_project_names = toset( [
      "values", 
      "releases", 
      "design", 
      "execution"
    ] )
  permission_project_names = toset( [ 
      "vendor", 
      "maintainer"
    ] )
}

################################
#### permissions repository ####
################################

resource "gitlab_group" "permissions_group" {
  name        = var.service_name
  path        = var.service_name
  parent_id   = var.permissions_parent_grp
  visibility_level       = "private"
}

resource "gitlab_group" "permissions_sub_group" {
  for_each = local.permission_project_names
  name        = "${var.service_name}_${each.key}"
  path        = "${var.service_name}_${each.key}"
  parent_id   = "${gitlab_group.permissions_group.id}"
  visibility_level       = "private"
}

############################
#### service repository ####
############################

resource "gitlab_group" "services_group" {
  name        = var.service_name
  path        = var.service_name
  parent_id   = var.services_parent_grp
  visibility_level       = "private"
}

resource "gitlab_project" "services_projects" {
  for_each = local.services_project_names
  name                   = "${var.service_name}_${each.key}"
  default_branch         = "main"
  description            = ""
  issues_enabled         = false
  merge_requests_enabled = false
  namespace_id           = "${gitlab_group.services_group.id}"
  snippets_enabled       = false
  visibility_level       = "private"
  wiki_enabled           = false
}

You can reference individual values created via for_each by using the key that was used in the for_each .您可以使用for_each中使用的键来引用通过for_each创建的各个值。 In your case here are some examplels:在您的情况下,这里有一些示例:

"${gitlab_project.services_projects["values"]}"

"${gitlab_project.services_projects["releases"]}"

To get the ID of a specific project:要获取特定项目的 ID:

gitlab_project.services_projects["values"].id

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM