OPA build后.manifest的file_rego_versions字段丢失如何保留?
如何在OPA Build后保留.manifest中的file_rego_versions字段?
我想要在应用中支持多版本Rego策略,查阅OPA官方文档得知.manifest文件的file_rego_versions字段可实现该功能,但将包含该字段的.manifest放入policies目录执行opa build命令后,生成的bundle包中file_rego_versions字段被移除。以下是具体操作步骤及问题复现过程:
操作步骤
- 创建policies目录及
access_policy.rego文件,内容如下:
package example default validate_policy = false validate_policy { input.policyType == "onap.test.opa" input.policyVersion >= 1 input.taskLogic != null input.address.zip >= 12345 input.address.apt.doornum >= 101 input.phone.number >= 1000000 }
- 在policies目录下创建
.manifest文件,内容如下:
{ "revision":"2", "roots":["example"], "rego_version": 0, "file_rego_versions": { "/access_policy.rego": 0 } }
- 执行以下命令构建bundle并查看结果:
cd policies; opa build -b . -o /tmp/bundle.tar.gz; cd /tmp; tar -axf bundle.tar.gz /.manifest -O
执行后得到的.manifest内容丢失了file_rego_versions字段:
{"revision":"2","roots":["example"],"rego_version":0}
解决方法
要在构建后的bundle中保留file_rego_versions字段,需注意以下两点:
使用支持该字段的OPA版本
file_rego_versions是OPA bundle规范中较新引入的字段,需确保使用的OPA版本不低于v0.40.0(该版本正式支持此字段)。可以通过opa version命令检查当前版本,若版本过低则升级至最新稳定版。修正文件路径格式
.manifest中file_rego_versions的文件路径需为相对于bundle根目录的相对路径,而非绝对路径。将原配置中的"/access_policy.rego"改为"access_policy.rego",修正后的.manifest内容如下:
{ "revision":"2", "roots":["example"], "rego_version": 0, "file_rego_versions": { "access_policy.rego": 0 } }
修正后重新执行opa build命令,即可在生成的bundle的.manifest中保留file_rego_versions字段。
内容的提问来源于stack exchange,提问作者user27911082
相关产品推荐
相关产品推荐

