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

游戏服务器_腾讯云虚拟机_免费6个月

小七 141 0

HashiCorp Terraform 0.12预览:广义Splat运算符

这是本系列文章的第四篇,重点介绍terraform0.12中的新特性。作为TerraForm0.12发布前的一部分,我们将发布一系列功能预览博客文章。本周的文章是关于新的广义splat算子的。Terraform一直支持一种特殊语法,从使用count参数创建的一组资源中获取属性值的列表,称为"splat expression"。在terraform0.12中,我们将其通用化以处理任何列表值,并将其称为"splat运算符"»Splat运算符在Terraform 0.11及更早版本中,使用count创建的一组资源的属性值可以通过一个称为"splat表达式"的方法获得。下面的示例显示了这一点:#Terraform 0.11及更早版本的配置输出"实例名称"{value=谷歌计算_实例.main姓名*}splat表达式以前是一个特殊的大小写操作,只适用于具有count的资源上的属性,不适用于任何其他列表值。对于terraform0.12,我们将该操作泛化为对任何列表值都有效,并将语法称为"splat操作符"下面的示例显示了splat运算符在没有设置count的单个资源上用于任意列表值。#Terraform 0.12配置输出"instance_ip_addrs"{value=谷歌计算_instance.example.network_接口.*地址}在上面的示例中,特定的单计数资源google_compute_实例.示例,并使用splat运算符将网络接口地址列表展平为单个列表。»全展开运算符terraform0.11及更早版本中的splat语法有一个限制,它只允许访问给定列表中项目的命名属性。这导致了一些常见的和令人困惑的表达式,比如google_compute_实例.main.*姓名[计数.索引]作为访问由特定索引标识的实例名称的方法。terraform0.12现在允许将其更直观地表示为google_compute_实例.main[计数.索引].name,保留旧格式以保持向后兼容性。0.12支持splat运算符的一个新变体"full splat operator",它可以方便地访问给定列表中的属性和索引:#Terraform 0.12配置输出"instance_net_ip_addrs"{value=谷歌计算_instance.example.network_接口[*]。访问配置[0]。已分配\u nat_ip}将星号符号放在索引括号内而不是用作属性名会激活完整的splat行为,导致access_config[0]被解释为访问每个网络接口的一部分。在TerraForm0.11和更早版本中复制此行为需要函数调用和非直观语法。我们建议对所有新配置使用完整的splat语法,因为它的行为通常更直观。为了向后兼容,保留了旧的语法,但不建议使用。»升级指南terraform0.12在大多数情况下继续支持以前的splat操作符使用,但是引入了两个重要的突破性变化。首先,在terraform0.12中,对count集的资源的处理略有改变。引用没有索引的资源现在会生成所有实例的列表,而不是第一个实例的别名。对于任何设置了count的资源(即使它被设置为1),第一个实例必须通过索引[0]来访问,比如aws_实例.示例[0].id。下面的示例在Terraform 0.12中的行为将有所不同:#Terraform 0.11及更早版本的配置资源"aws_instance""web"{计数=1...}输出"id"{value="${aws_实例.web.id}"//Value是索引0的ID}转换为Terraform 0.12的示例:#Terraform 0.12配置资源"aws_instance""web"{计数=1...}输出"id"{value="${aws_实例.web[0].id}"}在大多数情况下,Terraform 0.12将由于此更改而出错。如果期望值不是列表,则将显示错误。一如既往,请检查计划输出,以验证Terraform是否按预期运行,并捕获任何必要的配置更改。第二个突破性的变化是删除了splat表达式的一些遗留向后兼容性行为。Terraform的早期版本要求splat表达式以插值形式出现在列表构造函数中,比如${aws_实例.示例.*.id}"],但在Terraform 0.9.6中取消了此要求,并且此表单已被弃用。在terraform0.12中,该表达式现在生成一个列表列表,因为splat表达式本身生成一个列表,然后外部括号将其包装成另一个列表。这是通常预期的行为,但对于长期使用Terraform的用户来说,这可能会令人惊讶。»下一个这是预览Terraform0.12系列博客文章的第4部分。通用splat操作符将在今年夏天晚些时候发布terraform0.12。要了解有关如何升级到Terraform0.12的更多信息,请阅读升级说明,随着Terraform0.12的发布,它将不断更新。如果您对这些更改有任何反馈或疑虑,请通过公共邮件列表与Terraform团队沟通。