Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Module Terraform导入模块状态_Module_Terraform_Hcl - Fatal编程技术网

Module Terraform导入模块状态

Module Terraform导入模块状态,module,terraform,hcl,Module,Terraform,Hcl,地形模块: resource "netbox_device" "device" { name = var.name site = var.site tenant = var.tenant rack = var.rack position = var.position type = var.type role = var.role status = var.status }

地形模块:

resource "netbox_device" "device" {
  name     = var.name
  site     = var.site
  tenant   = var.tenant
  rack     = var.rack
  position = var.position
  type     = var.type
  role     = var.role
  status   = var.status
}


resource "netbox_interface" "device_interface" {
  for_each = var.connections
  name     = each.key
  device   = netbox_device.device.id
}

resource "netbox_cable" "device_connections" {
  for_each         = var.connections
  device_a_name    = netbox_device.device.name
  interface_a_name = each.key
  device_b_name    = each.value.device
  interface_b_name = each.value.interface
}
主要舱单:

 19 module "cmp1_test" {
 20   source   = "../../modules/device"
 21   name     = "cmp1"
 22   site     = "example.site"
 23   rack     = "111"
 24   position = 15
 25   type     = "Generic-1U"
 26   role     = "cmp"
 27   connections = {
 28     "eth0" = { device = "san-s1-1", interface = "Ethernet 5" },
 29     "eth1" = { device = "san-s1-2", interface = "Ethernet 6" },
 30     "ipmi" = { device = "san-s1-1", interface = "Ethernet 7" }
 31   }
 32 }
需要导入资源状态:

  • 导入设备状态--确定
  • terraform import module.cmp1_test.netbox_device.device 2828--工作正常

  • 导入相关接口:
  • terraform导入模块、cmp1_测试、netbox_接口、设备_接口[“eth0”]330033

    出错了

    未找到匹配项: module.cmp1_test.netbox_interface.device_interface[eth0]

    导入所有资源的正确方法是什么


    创建后的tfstate如下所示:

     {
          "module": "module.cmp1_test",
          "mode": "managed",
          "type": "netbox_device",
          "name": "device",
          "provider": "provider.netbox",
          "instances": [
            {
              "schema_version": 0,
              "attributes": {
                "face": 0,
                "id": "2828",
                "name": "cmp1",
                "position": 15,
                "rack": "111",
                "role": "cmp",
                "serial": "",
                "site": "example.site",
                "status": "Planned",
                "tenant": "VPC",
                "type": "Generic-1U"
              },
              "private": "bnVsbA=="
            }
          ]
        },
        {
          "module": "module.cmp1_test",
          "mode": "managed",
          "type": "netbox_interface",
          "name": "device_interface",
          "each": "map",
          "provider": "provider.netbox",
          "instances": [
            {
              "index_key": "eth0",
              "schema_version": 0,
              "attributes": {
                "description": null,
                "device": 2828,
                "enabled": null,
                "form_factor": null,
                "id": "31303",
                "lag": null,
                "mgmt_only": null,
                "mode": null,
                "mtu": null,
                "name": "eth0",
                "type": 1200
              },
              "private": "bnVsbA==",
              "dependencies": [
                "module.cmp1_test.netbox_device.device"
              ]
            },
    
    

    您的shell正在解释资源地址中的引号,因此在Terraform能够解释它们之前删除它们

    如果您在类Unix系统(例如Linux、Mac OS X)上,您可以使用单引号将双引号逐字传递到Terraform:

    terraform import 'module.cmp1_test.netbox_interface.device_interface["eth0"]' 330033
    
    terraform import module.cmp1_test.netbox_interface.device_interface[\"eth0\"] 330033
    
    如果您使用的是Windows,请使用普通Windows命令提示符(不是PowerShell)并使用反斜杠转义将双引号逐字传递到Terraform:

    terraform import 'module.cmp1_test.netbox_interface.device_interface["eth0"]' 330033
    
    terraform import module.cmp1_test.netbox_interface.device_interface[\"eth0\"] 330033
    
    如果您使用的是PowerShell,则必须禁用它,以确保它不会尝试将参数解释为PowerShell表达式,使用“停止解析”符号
    -->%
    ,然后使用与上述普通Windows命令提示符相同的转义:

    terraform --% import module.cmp1_test.netbox_interface.device_interface[\"eth0\"] 330033
    

    你必须进口吗?为什么不销毁所有的旧资源,让Terraform重新创建它们呢?嗨,在我的例子中,Terraform与DCIM系统一起使用。现在,许多基础设施被添加到DCIM中。有时用户会从web界面进行更改。我们需要地形来简化过程,例如添加/替换/形状因子更改。此外,我不能重建设备,因为我们使用基于DCIM的动态库存。从该评论“代码>有时用户界面的变化发生在用户。也许TRARAFRATE资源不是最好的,您考虑使用数据源代替吗?谢谢。是的,忘记bash sybstrings是我的错。