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

免备案CDN_云vps主机_新注册优惠

小七 141 0

HashiCorp Terraform 0.12预览:富值类型

这是本系列文章的第六篇,重点介绍terraform0.12中的新特性。作为TerraForm0.12发布前的一部分,我们将发布一系列功能预览博客文章。本周的帖子是关于在变量和输出中添加富值类型的。Terraform变量和输出现在支持基本原语和简单的列表和地图。列表和地图尤其具有令人惊讶的局限性,这些限制会导致不直观和令人沮丧的错误。terraform0.12允许对输入变量和输出使用任意复杂的值,并且可以精确地指定这些值的类型。»复杂值由于0.12中引入了新的类型系统,Terraform现在允许在输入变量和属性中使用任意集合值。Terraform一直支持原始值(字符串、数字、布尔值),terraform0.7增加了对简单列表和地图的支持。不幸的是,由于上一代Terraform核心的局限性,列表和地图有许多令人惊讶的限制。terraform0.12消除了所有这些限制。在terraform0.12中,复杂对象现在可以作为输入传递给子模块,并作为输出返回给父模块。下面的示例显示了一个故意使用复杂对象作为变量的复杂模块:#Terraform 0.12配置"子网"模块{source="./subnets"parent_vpc_id="专有网络-abcd1234"网络={生产_a={网络编号=1可用性区="us-east-1a"}产量_b={网络编号=2可用性_zone="us-east-1b"}暂存装置a={网络编号=1可用性区="us-east-1a"}}}然后这些值将像Terraform中的任何其他值一样被访问。在上面的示例中,subnets模块可以使用新的Terraform 0.12 For Expression:For network In访问网络信息变量网络.»丰富的类型Terraform提供者和资源总是期望提供特定的数据类型。如果不匹配,Terraform将继续尝试自动将提供的值转换为预期的类型。如果这是不可能的,将产生一个错误。terraform0.12引入了一个功能强大的类型系统,模块作者可以使用该系统为输入变量指定期望的类型。如果可能,这将强制验证和正确转换值。这也改善了向模块用户显示的错误消息。Terraform一直支持一个非常简单的变量类型需求。下面的示例使用Terraform 0.12语法,但展示了Terraform中多年来一直可用的功能:#Terraform 0.12配置变量"环境名称"{类型=字符串}有经验的Terraform用户可能会注意到,区别在于字符串没有被引用。类型现在是Terraform中的一级值,可以直接使用。terraform0.12现在也可以表示复杂对象结构的类型,如前一节所示。这在Terraform的早期版本中是不可能的。下面的示例显示了上述示例的类型规范:#Terraform 0.12配置可变"网络"{类型=贴图(对象({网络号码=号码可用性区=字符串标记=映射(字符串)}))}这为Terraform配置或模块的用户带来了很好的验证,并显示了清晰的错误消息。»作为价值观的资源和模块基于此功能,Terraform 0.12现在允许在配置中使用整个资源作为对象值,包括将它们作为输出返回并作为输入变量传递:#Terraform 0.12配置输出"vpc"{值=aws_专有网络示例}此输出值的类型是从aws vpc资源类型的架构派生的对象类型。然后调用模块可以访问这个结果的属性,就像返回模块使用aws一样_专有网络示例,例如module.example.vpc.cidr_块。此功能也适用于模块本身,其表达式如下模块.vpc使用与模块的命名输出相对应的属性计算对象值。»升级指南新型系统没有引入任何突破性的变化。现有配置应继续按原样工作。terraform0.12仍然与Terraform的早期版本中的简单类型系统兼容。»下一个这是预览Terraform0.12系列博客文章的第6部分。这个新的富类型系统将在今年夏天晚些时候发布Terraform0.12。要了解有关如何升级到Terraform0.12的更多信息,请阅读升级说明,随着Terraform0.12的发布,它将不断更新。如果您对这些更改有任何反馈或疑虑,请通过公共邮件列表与Terraform团队沟通。