terraform - 从 Terraform 0.11 升级到 0.12 期间的列表问题
问题描述
我在尝试重写一个在 Terraform 0.12 中工作的列表时遇到问题,该列表在 Terraform 0.11 中工作。
这是我的清单:
variable "master_authorized_networks_config" {
type = list(string)
description = "The list of CIDR blocks of master authorized networks."
default = [
{
cidr_blocks = [
{
cidr_block = "XXXXXX/32"
display_name = "XXXXX"
},
{
cidr_block = "XXXXXX/32"
display_name = "XXXXX"
},
{
cidr_block = "XXXXXX/32"
display_name = "XXXXX"
},
{
cidr_block = "XXXXXX/32"
display_name = "XXXXX"
},
]
},
]
我将它添加到模块中:
master_authorized_networks_config = var.master_authorized_networks_config
运行后terraform apply
出现以下错误:
Error: Invalid default value for variable
on ../../modules/xxx/xxx/variables.tf line 71, in variable "master_authorized_networks_config":
71: default = [
72: {
73: cidr_blocks = [
74: {
75: cidr_block = "XXXXXX/32"
76: display_name = "XXXXX"
77: },
78: {
79: cidr_block = "XXXXXX/32"
80: display_name = "XXXXX"
81: },
82: {
83: cidr_block = "XXXXXX/32"
84: display_name = "XXXXX"
85: },
86: {
87: cidr_block = "XXXXXX/32"
88: display_name = "XXXXX"
89: },
102: ]
103: },
104: ]
This default value is not compatible with the variable's type constraint:
element 0: string required.
我无法解决这个问题。你能帮助我吗?
解决方案
该错误告诉您,您的默认值与您告诉 Terraform 的类型约束不匹配 with type = list(string)
。该类型约束表示它必须是一个字符串列表,并且是来自 0.11 的默认值0.12upgrade
,您可能已经运行过该工具来获取该输出(如果您type = list
以前有过该工具)。
您可以将类型约束更改为list(object)
. 如果您简化了数据结构,以便您只有一个带有cidr_block
和display_name
键的对象列表,而不是一个带有键的对象cidr_blocks
列表,其中包含上述对象的列表,那么您甚至可以更精确地验证它:
variable "master_authorized_networks_config" {
type = list(object{
cidr_block = string
display_name = string
})
description = "The list of CIDR blocks of master authorized networks."
default = [
{
cidr_block = "XXXXXX/32"
display_name = "XXXXX"
},
# ...
]
}
或者,更简单的是,在提供默认值时,您可以选择让 Terraform 通过type
从变量中删除参数来自动推断预期的对象类型。然后,如果有人尝试传入与默认 Terraform 的类型不匹配的变量,则会在计划或验证时告诉您。
推荐阅读
- php - 如何处理'在mysql数据库中使用php提交字符串?
- function - Lisp/Scheme/Racket:如何用省略号定义函数
- php - 如何使用 PDO 从 PHP 中的单个 select 语句将孩子分配给父母?
- algorithm - COBOL 冒泡排序仅对表的最后一个元素进行排序
- vue.js - 使用 hotelroomdescription 搜索,如果匹配则使用 vuejs / javascript [es5] 显示相应的酒店和房间
- flutter - Flutter:在导航到不同屏幕/路线时保持相同小部件的最佳实践
- python - 在 PGM 格式文件中实现膨胀过滤器
- javascript - 用户注销,浏览器选项卡关闭事件
- javascript - 通过移动设备上的 Chrome/Safari 发生 Google CSE 故障 单击任一搜索图标/菜单图标时。如何使 Google CSE 默认主题搜索
- angular - 查看不更新值变化