示例: https: //www.terraform.io/docs/providers/kubernetes/r/service_account.html
我们看到这个:
resource "kubernetes_service_account" "example" {
metadata {
name = "terraform-example"
}
secret {
name = "${kubernetes_secret.example.metadata.0.name}"
}
}
Run Code Online (Sandbox Code Playgroud)
元数据不是列表,为什么秘密/名称值使用引用元数据.0?
提供者已将metadata块类型定义为在内部表示为对象列表。这在当今的 Terraform 提供程序中很常见,因为 Terraform v0.12 之前的 Terraform 版本要求提供程序仅在列表和集合之间进行选择,作为嵌套块类型的支持数据类型。
Terraform v0.12 及更高版本确实支持将单例块表示为单个对象,但早于 Terraform v0.12 版本的提供程序往往仍使用列表表示形式以实现向后兼容性。(在撰写本文时,大多数提供商在其新版本中仍然兼容 Terraform v0.11 和 v0.12。)
新的 kubernetes提供程序(在我撰写本文时仍在开发中)是专门为 Terraform v0.12 及更高版本构建的,因此它能够更直接地反映底层 Kubernetes 模式,包括将其视为metadata单个对象。有关新提供商版本的公告帖子包含以下示例:
resource "kubernetes_manifest" "example_crd" {
provider = kubernetes-alpha
manifest = {
apiVersion = "apiextensions.k8s.io/v1"
kind = "CustomResourceDefinition"
metadata = {
name = "testcrds.hashicorp.com"
labels = {
app = "test"
}
}
spec = {
group = "hashicorp.com"
names = {
kind = "TestCrd"
plural = "testcrds"
}
scope = "Namespaced"
versions = [
{
name = "v1"
served = true
storage = true
schema = {
openAPIV3Schema = {
type = "object"
properties = {
data = {
type = "string"
}
refs = {
type = "number"
}
}
}
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
可以通过更直观的方式访问这个新提供程序的元数据名称,因为它metadata是单个对象:
kubernetes_manifest.example_crd.manifest.metadata.name
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1892 次 |
| 最近记录: |