Как получить идентификатор переменной, используя имя в terraform?

#terraform

Вопрос:

У меня есть ресурс terraform, в котором я пытаюсь сделать переменную subnet_id динамической. Поэтому у меня есть варианты, определенные ниже, в которых subnet_id = "worker-subnet-1" . Я хочу передать имя подсети и получить идентификатор подсети, так как у меня несколько подсетей. Как я могу это сделать?

 resource "oci_containerengine_node_pool" "node_pool" {  for_each = var.nodepools  cluster_id = oci_containerengine_cluster.cluster[0].id  compartment_id = var.compartment_id  depends_on = [oci_containerengine_cluster.cluster]   kubernetes_version = var.cluster_kubernetes_version  name = each.value["name"]   node_config_details {  placement_configs {  availability_domain = var.availability_domain  subnet_id = oci_core_subnet.each.value["subnet_name"].id  }  size = each.value["size"]  }   node_shape = each.value["node_shape"]   node_shape_config {   #Optional  memory_in_gbs = each.value["memory"]  ocpus = each.value["ocpus"]  }   node_source_details {  image_id = each.value["image_id"]  source_type = "IMAGE"   }  ssh_public_key = file(var.ssh_public_key_path) }  

Это мои переменные:

 nodepools = {  np1 = {  name = "np1"  size = 3  ocpus = 8  memory = 120  image_id = "test"  node_shape = "VM.Standard2.8"  subnet_name = "worker-subnet-1"  }  np2 = {  name = "np2"  size = 2  ocpus = 8  memory = 120  image_id = "test"  node_shape = "VM.Standard2.8"  subnet_name = "worker-subnet-1"  } }  

есть какие-нибудь предложения?

 resource "oci_core_subnet" "snet-workers" {  cidr_block = lookup(var.subnets["snet-workers"], "subnet_cidr")  compartment_id = var.compartment_id  vcn_id = oci_core_virtual_network.base_vcn.id  display_name = lookup(var.subnets["snet-workers"], "display_name")  dns_label = lookup(var.subnets["snet-workers"], "dns_label")  prohibit_public_ip_on_vnic = true  security_list_ids = [oci_core_security_list.private_worker_nodes.id]  route_table_id = oci_core_route_table.rt-nat.id }  

Ответ №1:

Вы должны использовать, как показано ниже, где измените lt;local resource namegt; имя, которое вы дали своему ресурсу

 subnet_id = oci_core_subnet.lt;local resource namegt;[each.value.subnet_id].id  

Комментарии:

1. Каково будет значение имени локального ресурса и как его объявить?

2. Также я хочу прочитать значение из переменных и получить идентификатор.

3. Я хочу прочитать имя из переменных, в этом весь смысл

4. получаю ошибку : An attribute name is required after a dot. мое объявление subnet_id = oci_core_subnet.test-workers.[each.value.subnet_id].id

5. Первоначальный вопрос был решен. Для проверки этого вам следует задать новый вопрос и предоставить полный код с входными переменными