如何修复OPA规则中值比较的代码解析错误问题?
OPA规则中实现值比较的正确方式
错误原因
Rego不支持传统编程语言中if-else块内直接赋值的语法,你写的if { msg := ... } else { msg := ... }不符合Rego的语法规范,因此触发解析错误。
正确实现方式
方式一:使用三元表达式(Rego 1.10+支持)
这种方式最简洁,直接通过三元逻辑给msg赋值:
package example vm_name = input.planned_values.root_module.resources[0].values.name vm_name_length = count(vm_name) msg := if vm_name_length == 13 then "OK" else "Not ok"
方式二:使用Rego规则匹配
这是Rego的传统写法,通过定义带条件的规则来实现逻辑分支:
package example vm_name = input.planned_values.root_module.resources[0].values.name vm_name_length = count(vm_name) msg := "OK" { vm_name_length == 13 } msg := "Not ok" { vm_name_length != 13 }
验证执行
执行你原来的命令即可得到正确结果:
./opa eval -i tfplan.json -d test1.rego "data.example"
输出会包含msg字段,根据vm_name_length的值返回对应的"OK"或"Not ok"。
内容的提问来源于stack exchange,提问作者Gryzm024
相关产品推荐
相关产品推荐

