如何在自定义Terraform Provider资源中支持有序列表类型参数配置
问题原因
这个错误和policies字段的Type配置为schema.TypeList无关,核心是该字段在Provider Schema中被定义为嵌套块(Nested Block),而非可赋值的列表属性:
- Terraform对嵌套块的语法要求是直接重复声明块(即你当前默认支持的
policies { ... }写法),不支持用等号给块赋值列表 - 只有显式声明为属性的字段,才能使用
字段名 = 列表值的配置形式
你提到的是否要改为TypeSet的疑问也不成立,Type参数仅控制集合的内部处理逻辑(TypeList是有序可重复、TypeSet是无序去重),和配置语法没有关系,修改Type无法解决当前报错。
改造支持列表赋值的方法
你只需要调整policies字段的Schema配置即可:
- 找到
active_service_policies字段下policies对应的Schema定义 - 给该字段增加配置项
ConfigMode: schema.SchemaConfigModeAttr,强制Terraform将该字段识别为可赋值的属性,而非嵌套块 - 重新编译Provider后即可支持你想要的列表赋值写法
如果需要同时兼容旧的嵌套块写法和新的列表赋值写法,你可以额外添加状态迁移逻辑,合并两种输入形式的值,避免用户配置冲突。
内容的提问来源于stack exchange,提问作者Alex Cohen
相关产品推荐
相关产品推荐

