Terraform 导入(复杂)- 资源名称
Terraform import (complex) - resource names
我正在编写自定义 Terraform 提供程序,我想实现所谓的复杂案例。 IE。我的资源 returns 多个子资源。当我查看生成的 .tfstate
文件时,子资源的名称是从父资源的名称生成的。因此,例如,如果我有一个名为 'cluster' 的父资源,那么子资源将被命名为 'cluster'、'cluster-1'、'cluster-2' 等,这对我来说毫无用处。我找不到从提供者内部控制此结果的任何方法。是否可以 return 每个子资源的合理名称,基于子资源属性?
这是一个经过修剪的 .tfstate
示例,说明了我的意思。请注意每个 my_sub_resource
的 name
字段是如何从 my_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": []
}
]
}
]
}
据我所知,这无法修复。作为解决方法,我所做的不是拥有 2 个单独的资源,而是拥有一个具有多个子资源块的资源。每个子资源都可以有一个 name
属性,因此我有我需要的控制级别。例如
resource "provider_cluster" "cluster" {
cluster_app {
name = "app1"
}
cluster_app {
name = "app2"
}
cluster_app {
name = "app3"
}
}
我正在编写自定义 Terraform 提供程序,我想实现所谓的复杂案例。 IE。我的资源 returns 多个子资源。当我查看生成的 .tfstate
文件时,子资源的名称是从父资源的名称生成的。因此,例如,如果我有一个名为 'cluster' 的父资源,那么子资源将被命名为 'cluster'、'cluster-1'、'cluster-2' 等,这对我来说毫无用处。我找不到从提供者内部控制此结果的任何方法。是否可以 return 每个子资源的合理名称,基于子资源属性?
这是一个经过修剪的 .tfstate
示例,说明了我的意思。请注意每个 my_sub_resource
的 name
字段是如何从 my_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": []
}
]
}
]
}
据我所知,这无法修复。作为解决方法,我所做的不是拥有 2 个单独的资源,而是拥有一个具有多个子资源块的资源。每个子资源都可以有一个 name
属性,因此我有我需要的控制级别。例如
resource "provider_cluster" "cluster" {
cluster_app {
name = "app1"
}
cluster_app {
name = "app2"
}
cluster_app {
name = "app3"
}
}