当运行带有哨兵的导入“ tfconfig”时,我得到导入tfconfig不可用

时间:2019-08-23 04:48:37

标签: terraform

我正在与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.

我几个小时以来一直在寻找解决方案的任何想法。

谢谢

2 个答案:

答案 0 :(得分:2)

为了在Sentinel SDK中使用特定于Terraform的导入,您需要使用mock data生成要测试的数据结构。

通过Terraform Cloud运行Terraform时,成功的计划将生成一个Sentinel模拟文件,其中包含与Terraform Cloud根据该计划评估策略时本身将使用的数据相同的数据,因此您可以将模拟数据检查到存储库中,如下所示:您的策略测试套件的一部分。

您可以使用speculative plans(在启用了远程后端的命令行上运行terraform plan)来为要测试策略的有意无效的配置创建模拟数据,而无需推送这些无效的配置添加到您的版本控制系统中。

您可以对sentinel test包含引用这些模拟文件的mock对象的测试用例使用JSON definitions,然后这些测试用例评估的策略将能够导入{{ 1}},tfconfigtfplan,并获得与在Terraform Cloud中针对原始计划运行策略相同的结果。

答案 1 :(得分:0)

我有我的模拟数据和所有内容,但仍然出现此错误。

  

运行策略时出现运行时错误:   sure-policy.sentinel:3:1:导入“ tfplan”不可用

我意识到我已经忘记了策略目录根目录中的'sentinel.json'文件,该文件告诉了哨兵在哪里寻找模拟数据

https://www.terraform.io/docs/cloud/sentinel/mock.html

这是他们推荐默认目录设置的方式,但是您仍然需要该.json文件来告诉哨兵在哪里看 这就是sentinel.json文件的样子

enter image description here