Terraform V1.0的发布代表了Terraform语言和工作流程的重要里程碑。 Terraform V1.0是用于描述和管理基础架构的稳定性格式。
在此版本中,我们'重新定义许多我们的意图与整个1.x版本兼容的多种地域性行为:
我们的目的是,为Terraform V1.0编写的Terraform模块将在整个V1.x版本中成功计划并应用成功,而无需更改。
我们还打算围绕工作流子集内置的自动化描述Inthis文档将在未更改所有未来V1.x版本中工作。
最后,我们打算与当前文档过多的方法协议构建的提供商将与针对相同操作系统和架构的所有未来的Terraform v1.xreleaess兼容。没有用于源代码修改或二进制重新编译。
简而言之,我们的目标是在V1.X之间升级直接升级,不需要对您的配置进行更改,没有额外的命令运行升级,并且对您的任何自动化无需更改'在Terraform上设置。
以下部分包括一些关于我们将获得v1.x系列的v1.x系列的一些具体指导。虽然较高级别,我们打算在升级到NewV1.x版本时,&#39打算进行任何将导致模块或自动化进行更改的更改。我们通常将在新的Terraformcli释放中处理兼容性问题,因为除非对该更改非常重要,否则在解决关键的安全性问题或与偏离依赖性的偏离依赖性的匹配中,否则控制。
主要的Terraform语言包括语言语法,顶级结构,如资源,模块和提供者块,"元争论"在这些块中,以及可用于在表达式中使用的操作符和内置函数的记录的语义和行为。
Terraform语言没有单一的正式规范,但Terraform网站上的文档的整义部分是语言特征和预期行为的申索。
以下顶级块及其定义的"元争论" (即,由Terraform核心而不是由外部插件定义的参数,而不是由外部插件)将保留其当前的功能:
资源和数据阻止待编辑资源,包括其嵌套块类型生命周期,连接和配置文件及其元参数提供程序。
我们还打算与所有表达式运算符和内置函数保持兼容性,异常对TerraForm.Workspace异常,其行为可能会随着未来变更的一部分而变为工作区模型。
我们打算将广泛的兼容性与Terraform语言功能留出,少数特定警告:*如果Terraform可以为其创建并应用计划,我们考虑有效的配置,而无需报告任何错误。
当前产生错误的配置可能会在未来版本的Wertraform中生成不同的识别或展示其他非错误行为。在应用程序中生成错误的配置在将来之前在较早的阶段生成类似的错误,因为我们通常会考虑更好地检测到作为早期相似的错误中的错误.generally alplaying,该文档申请中描述的兼容性承诺仅对有效的配置。处理无效配置Isalways可能会在未来的Terraform版本中进行更改。
如果一个特征的实际行为与我们显式作为特征的行为不同,我们通常会将其视为Bugand更改功能以匹配文档,尽管我们将避免此类更改,如果他们似乎可能导致广泛兼容性问题。我们无法承诺始终保留" bug兼容"使用以前的版本,但我们将仔细考虑这些修复,以尽量减少其影响。
任何实验特征可能会改变或可能完全从Futurerelease中除去。 Terraform始终在实验语言活动处于活动状态时会产生警告,让您意识到这一风险。我们在生产模块中推荐使用实验功能。
我们将介绍新的语言功能,如果您开始使用它们,那么您的配置Won' T与之前的现有Terraform版本有用,该功能尚未使用.Tsupport这些功能。
Terraform提供程序是单独的插件,可以独立地改变,因此不受这些兼容性的承诺。如果您升级您正在使用的任何提供商,则可能需要与这些提供商相关的提供商或资源配置。
少量功能仍然弃用,并用明确的警告interraform v1.0弃用。这些弃用周期将在未来的v1.x版本中结束,此时我们将删除相应的功能。
我们有一组经常使用的Terraform工作流,我们正在调用受保护的工作流程。我们不会删除这些命令,子命令,ANDFLAG,或对受保护的工作流功能进行后退 - 不兼容的更改。如果我们意外地改变了这些,我们会将对核心工作流的核心工作流程进行读取 - 作为要修复的错误。对于Alist的命令和选项组合,这些组合是ProtectedWorkFlows的一部分,请参阅受保护的工作流命令。我们是另一组命令,我们显式而不是表现出来的承诺,因为我们预计它们的功能要更换v1.x版本:请参阅可能的命令改变。
通过某些命令和通过退出状态代码提供的外部软件与Terraform交互的支持方式。我们可以使用新的对象属性扩展某些JSON格式,但我们将不会删除或对现有属性定义进行打破更改。
自然语言命令输出或日志输出不是任何新版本的稳定接口和可能更改。如果您编写解析此输出的软件,则升级Terraform时可能需要更新。如果您需要访问目前未通过其中一个机器可读的jsoninterfaces的数据访问,我们建议打开一个功能请求以讨论您的用例。
在整个V1.x系列版本中,我们打算选择德罗奇到较新的Terraform版本并在此之前使用它,而无需任何特殊升级步骤。
您应该能够从任何v1.x版本升级到任何稍后的v1.x版本。您可能还能够降级到早期的v1.x版本,但是该' tguaranteed:稍后的版本可能会引入新功能早期的版本,包括用于Terraform状态快照的新存储格式。
如果您使用稍后的V1.x发布中引入的功能,则您的配置Won' t与预测该功能的版本兼容。例如,如果在v1.3中添加语言功能,则开始使用它,yesterraform配置将不再与Terraform V1.2兼容。
Terraform提供商是使用ADEM记录的协议与Terraform通信的单独插件。因此,这些兼容性承诺只能覆盖"客户"由Terraform Core实施的本协议的一面;个人提供者的攻击者,包括他们所帮助的哪些资源类型,并由提供者开发团队决定通过提供者开发团队决定,可以独立于Terraform核心版本而改变。
如果您升级到提供者的新版本,那么您可能需要更改由该提供商解释的配置的部分,即使您仍在使用Terraform v1.x版本。
Terraform通常从实施提供商注册表协议的提供商注册表中安装提供商,版本1.所有Terraform v1.x版本将与特定协议保持兼容,因此所以正确实施的提供商注册管理机构将保持兼容。
Terraform还支持从本地文件系统目录(文件系统镜像)和从网络镜像(实现提供程序镜像协议)的设备安装.All Terraform V1.x版本将与这些安装方法兼容,包括隐含的本地镜像镜像。
特定的提供商注册管理机构或网络镜子独立地运行,因此他们自己的行为不受任何兼容的承诺。
Terraform V1.0IS版本5的提供程序插件协议的当前主要版本由协议缓冲区SMATECASERCRIB格式的组合定义,并通过其他散文文档识别预期的提供商行为。
我们将在整个Terraform v1.x版本中支持协议版本5。如果我们在稍后的版本中对协议版本5进行了新的次要修订,那么Weiill设计它们,使得现有插件将继续工作,只要正确实现协议即可继续工作。
我们可以在V1.x系列期间引入新的主要版本的协议。 IFSO,我们将继续支持协议版本5与这些新版本一起。单独提供者团队可能决定删除稍后版本的协议版本5IN的支持,在这种情况下,这些新提供者版本不会与所有Terraform V1.x发布不相容。
Terraform模块是以四格形式编写的可重用基础架构组件。一些模块"外部"在兵区utomaAutomoy从CustorConfiguration目录以外的位置安装它们,在这种情况下,它们的内容可以将其使用的提供商和Terraform本身的提供者的更改依赖于本地模块。
TerraForm支持从许多不同的模块源类型安装子模块。我们将继续在整个V1.x版本中支持所有现有的源类型。
其中一个受支持的源类型是实现模块注册表ProtocalVersion1的模块注册表1.所有Terraform V1.x版本将与该协议的Correctimplation兼容。
某些模块源类型直接与第三方定义的服务或协议一起工作。虽然我们不会删除Terraform'我们自己的客户侧面,我们无法保证他们的所有者将保留他们的业主运行,或者他们将与Terraform' S客户端互相兼容。
如果您的配置取决于外部模块,则较新版本的ThoseModules可能包括断开变化。外部模块不属于部分,因此不受这些兼容性的承诺。
我们将通过所有v1.x版本维护文件,本地-ex和远程exectrovisioner类型的兼容性。
有些额外的供应商特定的销售商是在先前的推荐版本中提供的,但在Terraform V0.13中弃用并删除了Interraform V0.15。
TerraForm支持从某种文件文件系统目录的插件加载其他配置程序。我们' ll继续支持,在整个跨越的v1.x版本中,但由于这样的插件与Terraformcore本身分开,因此他们自己的行为不能受到这些兼容性的影响。但是,我们将继续支持在整个V1.x版本中归于Terraform V1.0中的插件线协议,并且SocorRectly实施的备件插件应与未来表达释放保持兼容。
当您使用远程状态时,Terraform在网络上与远程服务进行交互,以便存储和管理Terraform状态的锁。
出于历史原因,包括所有支持的状态存储后端,包括Terraform CLI的Aspart,但并非所有支持的Terraformteam都支持。只有Terraform团队维护的以下后端是兼容性的兼容性:*本地(默认情况下,当您未使用远程状态时)* HTTP
其他状态存储后端由外部团队通过CONTAFORM CLI CodeBase的共同组件维护,因此它们的预期配置参数或行为即使在V1.x版本中也可能会发生变化,尽管我们将在可能的情况下仍然可以确保良好的迁移路径。
我们正在考虑允许外部状态存储后端实现VIA插件,类似于提供程序插件。如果我们介绍此类机制v1.x版本,那么您可能需要使配置更改为使用这些插件,并且可以从更高版本的Terraform CLI Defortequivallent插件中删除上面的陈列书以外的状态存储后端。
远程后端由Terraform云团队维护,因此ITSBehavior可能会随着Terraform Cloud的持续变化而变化。
将有一个支持的机制使用Terraform CLI与Terraform ClibThrougutout v1.x版本,但确切的细节可能会发生变化。 Terraform CloudeVolves独立于Terraform CLI,因此不受代表性的承诺。
Azurerm,Consul,S3和Kubernetes后备被Hashicorp的其他团队保持。这些团队打算通过V1.x版本继续在错误修复的错误修复的基本维护中,除非我们为这些后端的点开发的后端实施了一个插件,否则可能需要配置变换器来切换到插件等同物。
COS,OSS,PG,GCS和ETCDV3后端由OutsidoNtributors维护,并且不受这些兼容性的承诺。
艺术actory,etcdv2,manta和swift状态存储后端经常有任何维护者,因此保留在Terraform CLI上的最佳努力。它们可以在以后的v1.x版本中删除,并在与他们与之集成的服务的任何破坏更改的情况下,将不会更新。
在整个V1.X系列中,我们将继续在平台上进行官方版本,并根据需要进行更改以支持这些操作系统的NewRelease:
随着时间的推移,我们可能需要更新的这些操作系统。 Forexample,V1.x系列中的后续Terraform版本可能会为前提段版本的麦克斯或Windows或早期Linux内核发布结束。
我们在历史上为许多其他平台提供了官方版本,这是对这些平台的用户的便利性,我们没有目前的计划TOSTOP发布它们,但我们不能承诺在整个V1.x系列中追随其他平台的持续版本或错误。我们在上面列出的那些的任何平台上都没有经常测试。
我们可能会在稍后的v1.x版本中为新平台添加支持。如果是这样,则在该支持之前,早期的版本将无法在批准上提供。
所有Terraform插件(包括提供商插件)都是单独的程序,它为自己支持的平台策略。我们无法保证所有提供商目前支持或将继续支持上面的平台,尽管Terraform CLI本身将支持它们。
我们可以在整个V1.x系列中扩展或改进这些承诺,以便向新功能有关的承诺或澄清现有的承诺,如果我们的早期陈述尚不清楚。
对于新功能的承诺将是积累的,因为他们将在不缩回任何现有的意义上的意义上的意义上。对于唯一只申请稍后v1.x发布的承诺,我们将提到最早的版本适用于。
即使我们向本文档添加一个明确的语句,我们打算在以后的V1.x版本中添加的非实验功能至少通过V1.x系列的其余部分留下,除非其他出现。
以下是Terraform CLI子命令和选项列表,该子命令和选项为这些兼容性承诺而aresubject。如果您在此命令终于构建自动化,那么它应该与所有后来的V1.x发布兼容。
如上所述,与外部软件的兼容性是有限的,有限地是基本机器可读输出(-JSON和-RAW模式),退出代码。来自这些命令的自然语言输出可能会在稍后的版本中更改。
对于不在上面的列表中的命令或选项,我们仍然可以在可能的情况下避免断裂化,但可以' t承诺在整个v1.x系列中充分兼容性。如果您在Terraform周围建立自动化,请仅使用上面的Checands来避免升级时需要更改。
请注意,虽然Terraform' s内部日志(通过tf_logenvironment变量)以JSON格式可用,但这些日志行的特定语法结构不是支持的集成接口。日志可用作JSON仅用于帮助广告-Hoc通过Terraform Developers过滤和处理日志。
所有以下命令及其子命令和选项都不属于兼容性承诺,是因为我们在V1.x系列中有现有计划,或者我们意识到他们的缺点可能需要打破持续的维护更改。
虽然在仍然受支持时,您可以自由地使用这些命令,但是我们不推荐使用它们作为随着Automation的一部分,除非您愿意更新升级到稍后的V1.x版本的自动化。
虽然我们打算保留对未来发布中的命令相关的主要用例的支持,但我们无法保证保留用于满足这些用例的确切姓名或选项。
Terraform Codebase包括各种单位和集成测试,旨在指出我们在稳定性转换之前注意到在其运输之前的意外行为回归。
然而,Terraform是一个相对复杂的系统,许多不同的FeatureSthat可以以有趣的方式互动。在过去我们' ve看来,只有在结合两个或更多个特征时才出现的差异,我们ina wayn'它以前预期或书面自动化测试。
在每种情况下,我们都实现了一个改变来解决兼容性问题并添加一个或多个集成测试,表示特征的组合的行为。我们打算继续这种方法,所以我们可以随着时间的推移加工Terraform'测试覆盖。
我们打算通过现有的测试捕获这些承诺涵盖的行为的大多数意外变化。但是,我们也接受我们的测试延款从未完全覆盖过所有可能的功能互动或追求特定情况,因此我们的目标是在最终释放之前在最终包含之前包含在脱盐和测试版中的每个重要变化。
对于未成年版本,我们通常也将至少发出一个释放候选人来最终发布。发布候选人代表了计划的结论,并且我们修复了报告的任何回归所报告的任何回归,因此遵循的最终释放情况紧急匹配或几乎完全是其最近的候选人。
为了更模糊的特征组合,可以在预释放期间未检测到回归,从而包括最终释放。 如果有人在释放后不久发现并报告此类回归,那么Wewill将其视为一个错误,并修复它以恢复Futurerelease中的先前行为,除非是一个非常重要的理由,例如SecurlAdvisory等非常重要的理由。 在这些情况下,我们' ll通常推荐受影响的任何受影响的人保留在以前的版本,直到问题被修复并直接向前转到包含该修复的新版本。 你可以最小化 ......