首页 > 解决方案 > Terraform 导入(复杂)- 资源名称

问题描述

我正在编写一个自定义 Terraform 提供程序,我想实现所谓的复杂案例。即我的资源返回多个子资源。当我查看生成的.tfstate文件时,子资源的名称是从父资源的名称生成的。因此,例如,如果我有一个名为“cluster”的父资源,那么子资源被命名为“cluster”、“cluster-1”、“cluster-2”等,这对我来说毫无用处。我无法从提供商内部找到任何控制此结果的方法。是否可以根据子资源属性为每个子资源返回一个合理的名称?

.tfstate这是我的意思的一个修剪的例子。注意name每个字段是如何my_sub_resourcemy_parent_resource资源name字段派生的。

{
  "version": 4,
  "terraform_version": "1.0.1",
  "serial": 1,
  "lineage": "9e9e660b-35fb-df03-119a-5e8d06e775f1",
  "outputs": {},
  "resources": [
    {
      "mode": "managed",
      "type": "my_sub_resource",
      "name": "parent",
      "provider": "***",
      "instances": [
        {
          "schema_version": 0,
          "attributes": {
            "parent": "e2e7c3c2-219d-4ab1-a981-330cc431c0df",
            "id": "9e2799fc-44d7-45eb-95bc-a8dd34c45ba1",
            "tag": "resource1"
          },
          "sensitive_attributes": []
        }
      ]
    },
    {
      "mode": "managed",
      "type": "my_sub_resource",
      "name": "parent-1",
      "provider": "***",
      "instances": [
        {
          "schema_version": 0,
          "attributes": {
            "parent": "e2e7c3c2-219d-4ab1-a981-330cc431c0df",
            "id": "2f4fa368-b7b2-44cb-a23d-ddb89696d55f",
            "tag": "resource2"
          },
          "sensitive_attributes": []
        }
      ]
    },
    {
      "mode": "managed",
      "type": "my_parent_resource",
      "name": "parent",
      "provider": "***",
      "instances": [
        {
          "schema_version": 0,
          "attributes": {
            "id": "e2e7c3c2-219d-4ab1-a981-330cc431c0df",
            "name": "parent"
          },
          "sensitive_attributes": []
        }
      ]
    }
  ]
}

标签: importterraformprovider

解决方案


据我所知,这无法解决。作为一种解决方法,我所做的不是拥有两个单独的资源,而是拥有一个具有多个子资源块的资源。每个子资源都可以有一个name属性,因此我有我需要的控制级别。例如

resource "provider_cluster" "cluster" {
  cluster_app {
    name = "app1"
  }
  cluster_app {
    name = "app2"
  }
  cluster_app {
    name = "app3"
  }
}

推荐阅读