#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. Первоначальный вопрос был решен. Для проверки этого вам следует задать новый вопрос и предоставить полный код с входными переменными