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

负载均衡_生物医学数据库_企业0元试用

小七 141 0

HashiCorp Terraform 0.12预览:第一类表达式

这是本系列文章的第二篇,重点介绍terraform0.12中的新特性。作为TerraForm0.12发布前的一部分,我们将发布一系列功能预览博客文章。本周的帖子是关于一流表达的。Terraform使用表达式进行动态配置和依赖关系。第一类表达式允许在字符串之外执行变量和操作,例如变量foo. 在terraform0.11及更早版本中,所有表达式都必须是现有字符串中插值的一部分,例如"${变量foo}". 这个简单的改变有着广泛的好处,在博客中可以看到。»第一类表达式下面的示例显示Terraform 0.11和更早版本的语法:#Terraform 0.11及更早版本的配置变量"ami"{}变量"实例类型"{}变量"vpc_security_group_ids"{type="列表"}资源"aws_instance""示例"{ami="${变型ami}"实例类型="${变量实例类型}"专有网络安全组标识="${var.vpc_安全性_组_id}"}转换为Terraform 0.12的相同示例:#Terraform 0.12配置变量"ami"{}变量"实例类型"{}变量"vpc_security_group_ids"{type="列表"}资源"aws_instance""示例"{ami=变型ami实例类型=变量实例类型专有网络安全组标识=var.vpc_安全性_组_id}»包含列表和地图的表达式terraform0.12中对表达式的改进使得可以更直接地将列表和映射用于表达式。在0.12之前的Terraform版本中,HCL解析器通过[…]和{…}序列支持list和map语法,但是不能将这种语法与表达式结合使用。这是旧HCL实现的一个伪制品,具有不同的结构和插值阶段,并且经常引起混淆。为了解决这个限制,Terraform提供了list和map函数,用于在插值表达式中构建列表。下面的示例显示了在Terraform 0.11及更早版本中的工作原理:#Terraform 0.11及更早版本的配置资源"aws_instance""示例"{# …#以下操作是因为列表结构是静态的专有网络安全组标识=${可变安全性组1}", "${可变安全性组2}"]#下面的方法行不通,因为插值语言不知道[…]语法专有网络安全组标识="${var.security_组_id!= "" ? [var.security_组_id] : []}"#相反,需要使用list()函数专有网络安全组标识="${var.security_组_id!= "" ? 列表(var.security_组_id):list()}"}下面的相同示例转换为Terraform 0.12:*#Terraform 0.12配置资源"aws_instance""示例"{# …专有网络安全组标识=var.security_组_id!= "" ? [var.security_组_id] : []}映射也是如此,它允许在表达式中的任何地方使用{…}语法。这是通常预期的行为,不幸的是,在以前的Terraform版本中并不起作用,但现在在Terraform0.12中可以正常工作。»重复块在0.12中,HCL也不再接受以下违反直觉的配置:#Terraform 0.11及更早版本的配置输出"奇怪"{值={foo="福"}值={bar="栏"}}由于它试图将嵌套的块结构扁平化为JSON的信息模型,HCL以前会将上面的解释为value=[{foo="foo"},{bar="bar"}]。虽然这是同一类型的重复块行为的逻辑结果,但它常常给用户造成混乱。还有许多其他类似的复杂行为,这些行为会导致结果数据结构不符合配置中给定的形状。在0.12中,HCL通过明确区分属性和块来解决这个问题。属性是使用赋值运算符=。块是键/值配置对的重复映射。上面的"奇怪"配置现在在HCL中产生错误,因为属性值可能只定义一次。错误消息将引导用户找到发生错误的确切文件、行和列。具有相同块类型的多个实例是有效的:#Terraform 0.12配置资源"aws_security_group""示例"{# …#"入口"被解析为块,因为没有等号入口{# ..}入口{# ..}}»升级指南terraform0.12将继续支持以前版本中的字符串插值语法。如上所述,在重复块中使用赋值运算符=将产生错误,必须省略=。这是一个突破性的变化,但将有一个直观的错误消息直接指向错误点。»下一个这是预览Terraform0.12系列博客文章的第2部分。第一类表达式将在今年夏天晚些时候发布Terraform0.12。要了解有关如何升级到Terraform0.12的更多信息,请阅读升级说明,随着Terraform0.12的发布,它将不断更新。如果您对这些更改有任何反馈或疑虑,请通过公共邮件列表与Terraform团队沟通。