云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

分布式数据库_百度云盘资料_9元

小七 141 0

Terraform Sentinel v2导入现在在技术预览中

我们很荣幸地宣布,Terraform Cloud的下一代Sentinel进口产品即将到来!这是一个完全重新设计的导入API,旨在更好地反映terraform0.12的更新数据模型,解决了现有terraform0.11api和0.12shim中的几个缺点。为了了解我们为什么发布新版本的导入,让我们讨论一下旧的Sentinel导入的历史、它们的使用中出现的一些问题,以及新导入以及Sentinel运行时中最近的更改是如何设计来解决这些缺点的。»旧的Sentinel进口(v0/v1)terraformcloud的Sentinel导入最初是围绕Terraform计划的底层细节设计的。导入直接连接到原始配置、二进制计划和较低级别的JSON状态,其中大部分数据由Terraform Cloud中特定运行的单个二进制计划数据提供。虽然这使得导入的实现相对简单,但用户体验更为复杂,暴露了Terraform 0.12之前的内部构件的某些缺点,例如:所有差异数据都是字符串,而不管实际的值类型是什么。这意味着,即使您要查找的属性是数字或布尔值,它仍将显示为字符串。为了避免不正确的匹配和运行时错误,有必要将转换为适当的类型。Diff是一个平面的,单层的地图。这意味着您不能使用选择器自然地选择特定字段,例如:null_资源.foo.diff.触发器.foois"bar"不起作用,需要写为null_resource.foo.difftriggers.foo"]是"bar"。所有状态属性都是字符串。与diff的问题类似,在tfstate中找到并在tfplan中的资源命名空间中应用的值都以字符串值的形式存储,从而产生类似于上述问题的比较问题。此外,由于主要遵循二进制计划中模块和数据的布局惯例,模块遍历历来都是用模块遍历函数来完成的。这些最终需要与其他功能相结合,以便有效地提取主题资源,从而创建重要的样板文件(示例可以在terraform指南存储库中的示例策略中看到)。当TerraForm0.12发布时,一种全新的数据交换格式,从底层二进制内部分离出来,创建了JSON输出格式,可以从Terraform show-JSON获取。反映了terraform0.12更丰富的数据内部结构,这些问题已经得到了解决,此外还有很多其他问题。然而,本着向后兼容的精神,我们最终将这种新的数据格式填充到现有的Sentinel API上,这意味着直到现在这些好处都无法实现。»介绍V2 Sentinel导入如果您的工作区运行的是terraform0.12版本,那么现在可以开始使用新的Sentinel导入,方法是将/v2附加到导入路径,即tfconfig/v2、tfplan/v2和tfstate/v2。请注意,这些导入处于技术预览阶段,尚未完全稳定。这很快就会改变,最终这些导入将成为使用中的默认导入,并且您必须将旧导入导入为tfconfig/v1、tfplan/v1和tfstate/v1。此计划可能特别与您的工作区的Terraform版本相关联,因此需要注意您特定组织的策略集。请注意,/v1导入路径现在也可用,因此如果您希望将来验证现有v1策略的向后兼容性,可以立即更新导入。让我们来看看v2导入带来的一些变化。»使用筛选器轻松发现资源其中一个最重要的变化是将数据布局重新构造为一系列集合,这种方式很容易通过最近添加的Sentinel过滤器表达式进行遍历。这是对我们在为资源发现和属性过滤而设计的策略中看到的大量样板文件的直接响应。让我们看看我们发布的一个示例策略是什么意思,其中我们限制了aws_ami数据源可以选择的所有者。从策略中可以看出,不仅要遍历模块,还需要基于属性的地址构造和资源筛选。这段代码现在可以大大简化。只需稍作修改,整个发现就可以放入一个过滤器表达式中,从而为我们提供了一个策略,并保留了对违规行为的报告:将"tfstate/v2"导入为tfstate导入"字符串"允许的所有者=["099720109477","099720109478",]冲突=过滤器tfstate.resources公司作为{r、 模式为"数据"和r、 类型为"aws_ami"和r。values.owner_id值不在允许的用户中}违反了{打印("数据源",v.address,"拥有未经授权的AMI所有者",v。values.owner_id值)}#主要规则main=规则{length(冲突)==0}»语义变化resource_changes集合中表示的diff(在较小程度上,output_changes)已被重新设计为与JSON输出格式中表示的数据更为匹配。这种格式比0.12之前的diff数据格式更具表现力。首先,更改的类型现在表示为操作列表,而不是一组标志。这使得筛选出特定种类的更改和标识某些操作(如先创建后销毁操作)变得更容易。例如,下面的筛选器将筛选出正在创建的所有资源,而不管这些资源是被替换还是新建的:实例=过滤器tfplan.resource_更改作为{r、 模式是"资源"和r、 类型为"aws_instance"和r。变更.行动包含"创建"}同时,此筛选器将选择只创建但未替换的实例:实例=过滤器tfplan.resource_更改作为{r、 模式是"资源"和r、 类型为"aws_instance"和r。变更.行动正在创建"]}此外,新的变更结构解决了与变更结构和变更类型有关的长期问题。现在,属性不再是diff集的平面映射,而是被组织到变更中的before和after值中,并且是完全类型化的,这意味着您现在将看到数字和布尔值由其正确的类型表示,并且列表和映射将被正确展开。下面这样的表达式现在可以正常工作:#其中r是空资源的资源更改#以前是r。difftriggers.foo"].new is"bar"。"r。更改后触发器.foo是"bar"#其中r是vsphere_虚拟机的资源更改#以前的r.diffmemory"].new为"1024"r。更改后内存是1024»原始数据我们还知道Sentinel的一些高级用法可能需要访问JSON输出生成的原始数据,或者可能存在更高级别集合可能无法覆盖的场景。这就是为什么现在可以访问tfplan/v2中raw键下的所有JSON计划数据。这些数据以映射的形式呈现,因此不需要额外的处理来通过Sentinel本身访问字段。但是,如果需要将其发送到外部端点,可以使用json标准导入重新序列化它。»入门有关新导入的更多信息,请查看Terraform Cloud文档中的以下页面:tfconfig/v2版TF计划/v2t状态/v2作为一个提醒,导入是在技术预览,API可能会有变化。当这些进口稳定后,我们将发布另一份声明。Sentinel提供Terraform云的治理层和Terraform Enterprise。有关详细信息,可以比较计划。要开始使用Terraform Cloud(没有Sentinel),您可以注册一个免费帐户。如果您对我们的销售团队感兴趣,可以问一下。最后,如果您是现有的TFC治理或TFE客户,并且您有关于新导入的反馈,请提交支持通知单并让我们知道!