#terraform #terraform-provider-gcp
Вопрос:
Я учусь использовать Терраформирование. Моя цель-развернуть архитектуру на GCP, так что вот мой main.tf
пока :
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "3.85.0"
}
}
}
provider "google" {
credentials = file(var.credentials_file)
region = var.region
zone = var.zone
}
data "google_organization" "org" {
domain = var.organization.display_name
org_id = var.organization.id
directory_customer_id = var.organization.directory_customer_id
}
resource "google_folder" "shared" {
display_name = "Shared"
parent = google_organization.org_id
}
resource "google_folder" "ddm" {
display_name = "Data and Digital Marketing"
parent = google_folder.shared.name
}
resource "google_folder" "dtl" {
display_name = "DTL"
parent = google_folder.ddm.name
}
Согласно документации, org_id
находится в пределах ссылки на атрибуты
Но я получаю следующие ошибки:
╷
│ Error: Computed attributes cannot be set
│
│ with data.google_organization.org,
│ on main.tf line 17, in data "google_organization" "org":
│ 17: org_id = var.organization.id
│
│ Computed attributes cannot be set, but a value was set for "org_id".
╵
╷
│ Error: Computed attributes cannot be set
│
│ with data.google_organization.org,
│ on main.tf line 18, in data "google_organization" "org":
│ 18: directory_customer_id = var.organization.directory_customer_id
│
│ Computed attributes cannot be set, but a value was set for "directory_customer_id".
╵
╷
│ Error: Reference to undeclared resource
│
│ on main.tf line 22, in resource "google_folder" "shared":
│ 22: parent = google_organization.org_id
│
│ A managed resource "google_organization" "org_id" has not been declared in the root module.
Что я делаю не так?
Комментарии:
1. Я предполагаю, что вы можете быть после импорта существующего идентификатора организации в Terraform? Вы пытаетесь создать новую организацию или у вас уже есть существующая организация, и вы хотите создать ее в Terraform?
2. У меня есть существующая организация в terraform, но я хотел бы описать ее и иерархию папок в main.tf
3. @GrzegorzOledzki, честно говоря, я не уверен, что смогу сделать это с помощью учетной записи службы. Возможно, мне нужна терраформа «начальной загрузки», которая применяется через учетную запись суперадминистратора, которая импортирует организацию и создает структуру папок. Отдельно у меня был бы еще один, который создает проекты и ресурсы в рамках проектов с помощью учетной записи службы… а ты как думаешь?
Ответ №1:
Организация задана в качестве data
источника, но в предыдущем коде она использовалась как resource
блок.
Что нужно сделать, чтобы ссылаться на организацию, так это :
data "google_organization" "org" {
organization = var.organization.id
}
org_id
это выход, а не вход. Единственными приемлемыми входными данными являются organization
или domain
; они взаимоисключающие.
И используйте его результаты таким образом :
resource "google_folder" "shared" {
display_name = "Shared"
parent = data.google_organization.org.org_id
}
ИЗМЕНИТЬ : Это, хотя и синтаксически правильно, может не сработать, поскольку используемая учетная запись должна быть администратором организации на уровне организации. Я не рекомендую использовать google_organization
источник данных только для получения идентификатора и другой информации, в итоге я записал их в переменную и просто назвал ее так :
resource "google_folder" "shared" {
display_name = "Shared"
parent = "organizations/${var.organization.id}"
}