我正在与Terraform和哨兵一起学习。
我无法使用某些基本功能。
我在这里有一项政策:
import "tfconfig"
default_foo = rule { tfconfig.variables.foo.default is "bar" }
default_number = rule { tfconfig.variables.number.default is 42 }
main = rule { default_foo and default_number }
和此处的变量文件:
variable "foo" {
default = "bar"
}
variable "number" {
default = 42
}
但是当我跑步时:
sentinel apply policy.sentinel
我收到以下错误:
policy.sentinel:1:1: Import "tfconfig" is not available.
我几个小时以来一直在寻找解决方案的任何想法。
谢谢
答案 0 :(得分:2)
为了在Sentinel SDK中使用特定于Terraform的导入,您需要使用mock data生成要测试的数据结构。
通过Terraform Cloud运行Terraform时,成功的计划将生成一个Sentinel模拟文件,其中包含与Terraform Cloud根据该计划评估策略时本身将使用的数据相同的数据,因此您可以将模拟数据检查到存储库中,如下所示:您的策略测试套件的一部分。
您可以使用speculative plans(在启用了远程后端的命令行上运行terraform plan
)来为要测试策略的有意无效的配置创建模拟数据,而无需推送这些无效的配置添加到您的版本控制系统中。
您可以对sentinel test
包含引用这些模拟文件的mock
对象的测试用例使用JSON definitions,然后这些测试用例评估的策略将能够导入{{ 1}},tfconfig
和tfplan
,并获得与在Terraform Cloud中针对原始计划运行策略相同的结果。
答案 1 :(得分:0)
我有我的模拟数据和所有内容,但仍然出现此错误。
运行策略时出现运行时错误: sure-policy.sentinel:3:1:导入“ tfplan”不可用
我意识到我已经忘记了策略目录根目录中的'sentinel.json'文件,该文件告诉了哨兵在哪里寻找模拟数据
https://www.terraform.io/docs/cloud/sentinel/mock.html
这是他们推荐默认目录设置的方式,但是您仍然需要该.json文件来告诉哨兵在哪里看 这就是sentinel.json文件的样子