【问题标题】:How create multiple VCN at the same time如何同时创建多个 VCN
【发布时间】:2022-01-08 01:20:17
【问题描述】:

我有一个问题,我需要创建多个 VCN。

我想将变量设置为 JSON 文件。 像这样:

init_values.json

{
  "terraform": {
    "tenancy_ocid": "ocid1.ten.xxxxxxxxxxxxxxxxxx",
    "user_ocid": "ocid1.user..xxxxxxxxxxxxxxxxxx",
    "private_key_path": "/Users/user/.oci/oci_api_key.pem",
    "fingerprint": "a8:8e:.xxxxxxxxxxxxxxxxxx",
    "region": "eu-frankfurt-1"
  },
  "vcn": [
    {
      "name": "vcn_1",
      "cidr": "44.144.224.0/25"
    },
    {
      "name": "vcn_2",
      "cidr": "44.144.224.128/25"
    }
  ]
}

和我的 vcn.tf 文件喜欢这样

locals {
  vcn_data = jsondecode(file("${path.module}/init_values.json"))

  all_vcn = [for my_vcn in local.vcn_data.vcn : my_vcn.name ]
  all_cidr = [for my_cidr in local.vcn_data.vcn : my_cidr.cidr ]
}


resource "oci_core_vcn" "these" {
  compartment_id  = local.json_data.COMPARTMENT.root_compartment
  display_name = local.all_vcn
  cidr_block = local.all_cidr
}

而 provider.tf 是:

provider "oci" {
  //alias             = "home"
  tenancy_ocid      = local.json_data.TERRAFORM.tenancy_ocid
  user_ocid         = local.json_data.TERRAFORM.user_ocid
  private_key_path  = local.json_data.TERRAFORM.private_key_path
  fingerprint       = local.json_data.TERRAFORM.fingerprint
  region            = local.json_data.TERRAFORM.region
}

错误是下一个:

│ Error: Incorrect attribute value type
│ 
│   on vcn.tf line 39, in resource "oci_core_vcn" "these":
│   39:   display_name = local.all_vcn
│     ├────────────────
│     │ local.all_vcn is tuple with 2 elements
│ 
│ Inappropriate value for attribute "display_name": string required.
╵

可能是我的错误,我错在哪里

谢谢

【问题讨论】:

    标签: oracle terraform terraform-provider-oci


    【解决方案1】:

    可能,而不是:

    all_cidr = [for my_cidr in local.vcn_data.vcn : my_vcn.cidr ]
    

    应该是:

    all_cidr = [for my_cidr in local.vcn_data.vcn : my_cidr.cidr ]
    

    更新

    您必须使用count 或for_each 来创建多个vcn:

    resource "oci_core_vcn" "these" {
      
      count = length(local.all_vcn)
    
      compartment_id  = local.json_data.COMPARTMENT.root_compartment
    
      display_name = local.all_vcn[each.index]
      cidr_block = local.all_cidr[each.index]
    }
    

    【讨论】:

    • 你说得对,我没有抄袭。更新了!
    • @Julio 我更新了答案,但如果您还有其他问题,最好为他们提出新问题。
    猜你喜欢
    • 2022-01-02
    • 2022-01-02
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多