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

云数据库_小语种网站建设_返现

小七 141 0

宣布Terraform 0.12

我们非常自豪地宣布Terraform0.12的发布。terraform0.12是一个主要的更新,它包含了几十个改进和特性,跨越了Terraform功能的广度和深度。此版本的一些亮点包括:第一类表达式语法:直接表示引用和表达式,而不是使用字符串插值语法。通用类型系统:更自由地使用列表和映射,并将资源用作对象值。迭代构造:将一个集合转换和过滤到另一个集合中,并从集合生成嵌套的配置块。计划的结构化呈现:计划输出现在看起来更像配置,更容易理解。上下文丰富的错误消息:错误消息现在包括一个突出显示的配置片段,并且通常准确地建议需要更改什么来解决这些错误。完整的版本变更日志可以在这里找到。下面是一个Terraform配置的示例,其中显示了一些新的语言功能:data"consur_key_prefix""环境"{path="应用程序/示例/env"}资源"aws_elastic_beanstalk_environment""示例"{name="测试环境"application="测试"设置{命名空间="自动缩放:asg"name="MinSize"值="1"}动态"设置"{对于每个=data.consur_key_前缀.环境.var内容{命名空间="aws:弹性豆茎:美联社应用:环境"名称=设置.key值=整定值}}}输出"环境"{值={id=aws弹性豆茎_环境.example.id专有网络设置={对于弹性豆茎中的s_environment.example.all_设置:s、 名称=>s.value如果s.namespace=="美国焊接学会:ec2:专有网络"}}}»入门我们有许多资源可供新用户和现有用户使用。要了解有关0.12新功能的更多信息,您可以:查看更新的文档。访问HashiCorp学习中心。要开始使用0.12:下载TerraForm0.12版本。如果要从以前的版本升级,请阅读升级指南以了解所需的升级步骤。»一级表达式语法Terraform使用表达式将结果从一个资源传播到另一个资源的配置中,表达式中的引用创建依赖关系图,Terraform使用该图来确定应用步骤中的操作顺序。Terraform的早期版本要求将所有非文本表达式作为插值序列包含在字符串中,例如"${azurerm_shared"_image.image_定义_ubuntu.location}。terraform0.12允许在任何需要值的情况下直接使用表达式。以下示例显示了以前Terraform版本的语法:变量"base_network_cidr"{默认值="10.0.0.0/8"}资源"谷歌计算网络""示例"{name="测试网络"自动创建子网=假}资源"google_compute_subnetwork""示例"{计数=4name="测试子网"ip_cidr_range="${cidrsubnet(var.base U网络,4,计数.索引)}"region="美国中央1"network="${google计算_网络.自定义-test.self_链接}"}在Terraform 0.12中,表达式可以直接给出:变量"base_network_cidr"{默认值="10.0.0.0/8"}资源"谷歌计算网络""示例"{name="测试网络"自动创建子网=假}资源"google_compute_subnetwork""示例"{计数=4name="测试子网"ip_cidr_range=cidrsubnet(var.base U网络,4,计数.索引)region="美国中央1"网络=谷歌计算_网络.自定义-test.self_链接}在这个简单的例子中,差别很小,但是随着表达式和配置变得越来越复杂,这种更简洁的语法将通过关注重要的内容来提高可读性。有关Terraform 0.12表达式语法的更多信息,请参见表达式。»广义型系统Terraform最初只专注于使用字符串。虽然在随后的版本中引入了对数据结构(如列表和地图)的更好的支持,但许多最初的语言特性并不能很好地与它们配合使用,这使得数据结构的使用令人沮丧。这一点在使用模块组合模式时尤为明显,其中一个模块创建的对象需要传递给另一个模块。如果一个模块创建一个AWS VPC和一些子网,而另一个模块依赖于这些资源,那么我们之前需要将所有必需的属性作为单独的输出值和输入变量传递:"网络"模块{source="./modules/network"base_network_cidr="10.0.0.0/8"}"执政官集群"模块{source="./modules/aws consur cluster"专有网络标识=module.network.vpc_id专有网络cidr块=module.network.vpc_cidr_块子网标识=module.network.subnet_id模块}terraform0.12的通用类型系统提供了在模块之间传递对象和其他值的更多选项,从而使组合更加方便。例如,可以编写"network"模块来返回整个VPC对象和子网对象列表,允许它们作为一个整体进行传递:"网络"模块{source="./modules/network"base_network_cidr="10.0.0.0/8"}"执政官集群"模块{source="./modules/aws consur cluster"专有网络=模块.network.vpc子网=模块.网络.子网}或者,如果两个模块彼此耦合得更紧密,则可以选择只传递整个源模块本身:"网络"模块{source="./modules/network"base_network_cidr="10.0.0.0/8"}"执政官集群"模块{source="./modules/aws consur cluster"网络=模块.网络}此功能依赖于为模块中的输入变量指定复杂类型的能力。例如,aws conver cluster模块中的"network"变量可以这样声明:可变"网络"{类型=对象({vpc=对象({id=字符串cidr_block=字符串})子网=设置(对象({id=字符串cidr_block=字符串}))})}有关在模块之间和资源之间传递值时可以使用的不同类型的详细信息,请参阅类型约束。»迭代构造在以前的结构中,由于缺少其他版本的数据结构中的任何一种迭代,都不方便进行数据转换。Terraform 0.12引入了一个新的for运算符,它允许通过将输入元素映射和过滤到输出元素来从另一个集合中构建一个集合:当地人{公共实例{对于aws的i_实例.示例:i.availability_zone=>我。。。如果我联系公共地址}}此功能允许我们将以一种格式返回的收集数据调整为另一种更便于在其他地方使用的格式,例如将列表转换为地图,如上面的示例所示。输出元素可以是任意Terraform表达式的结果,包括另一个嵌套的for表达式!terraform0.12还引入了一种为资源动态生成嵌套配置块的机制。上面第一个例子中的动态"设置"块说明了这一特性。下面是另一个使用输入变量在特定区域集上分发Azure共享映像的示例:变量"source_image_region"{类型=字符串}变量"target_image_regions"{类型=列表(字符串)}resource"azurerm_shared_image_version""ubuntu"{name="1.0.1"gallery_name=azurerm_共享的图片_gallery.image_画廊.名称image_name=azurerm_共享_image.image_定义.名称resource_group_name=azurerm_资源_group.image_库.名称位置=变量源图像位置托管的映像标识=data.azurerm_图像.ubuntu.id版[计数.索引]动态"目标区域"{对于每个=可变目标图像区域内容{名称=目标_地区.价值区域复制副本计数=1}}}有关这些功能的详细信息,请参见以获取表达式和动态块。»平面图的结构渲染Terraform的早期版本将计划输出简化为键、值对的简单列表,即使使用具有深度嵌套配置块的资源类型也是如此。这往往会变得很难阅读,尤其是在对嵌套块进行更改时,很难确切地理解发生了什么更改。Terraform 0.12有一个全新的平面渲染器,它与Terraform的新类型系统集成,以类似配置语言的形式显示更改,并通过缩进表示嵌套结构:Terraform将执行以下操作:#库伯内特斯_pod.示例将更新到位~resource"kubernetes_pod""示例"{id="默认/地形示例"元数据{代=0标签={"app"="我的应用"}name="地形示例"namespace="默认值"资源版本="650"self_link="/api/v1/namespaces/default/pods/terraform示例"uid="5130ef35-7c09-11e9-be7c-080027f59de6"}~规格{活动的\u截止时间\u秒数=0dns_policy="群集优先"主机_ipc=假主机网络=假主机_pid=假node_name="minikube"restart_policy="始终"service_account_name="默认值"终止时间=30~集装箱{~图像="nginx:1.7.9" -> "nginx:1.7.10"image_pull_policy="如果不存在"名称