Terraform代码的check块

check块是Terraform 1.5开始引入的新功能。
过去可以在resource块里的lifecycle块中验证基础设施的状态,check块填补了在apply后验证基础设施状态这一功能的空白。
check块允许定义在每次plan以及apply操作后执行的自定义的验证。check块定义的验证逻辑是作为planapply操作的最后一步执行的。

语法

可以定义一个包含本地名称的check块,其中可以定义一个有限作用范围的data块,以及至少一个的断言。
如下示例演示了加载Terraform官网并验证HTTP返回状态码为200。

check "health_check" {
  data "http" "terraform_io" {
    url = "https://www.terraform.io"
  }

  assert {
    condition = data.http.terraform_io.status_code == 200
    error_message = "${data.http.terraform_io.url} returned an unhealthy status code"
  }
}

有限作用范围的数据源

可以在check块使用任意Provider提供的任意数据源作为一个有限作用范围的数据源。
一个check块可以配一个可选的内嵌(也叫有限作用范围)数据源,该data块和普通的data块行为类似,但不能在定义它的check块以外引用它。
另外,如果一个有限作用范围的数据源运行时触发了任意错误,这些错误将被标记为警告,不会阻止Terraform继续执行操作。

可以使用有限作用范围的数据源在resourcelifecycle外验证相关基础设施片段的状态。
在上述例子里,如果terraform_io数据源在加载时发生错误,那么将会收到一个警告而不是中断执行的错误。

元参数

有限作用域的数据源支持depends_onprovider元参数,但不支持countfor_each元参数。depends_on元参数配合有限作用域数据源可以提供非常强大的能力。

假设上述例子中的Terraform网站是即将用同一目录下的Terraform代码部署的,在第一次创建Plan时因为网站还没有被创建,所以验证会失败,Terraform总是会在一开始显示一条让人分心的警告信息。可以给该内嵌数据源添加depends_on来确保该数据源依赖于某项组成基础设施的必要资源,例如负载均衡器。这样对该数据源的检查结果将保持known after apply直到依赖项创建完成。该策略避免了在配置阶段产生无意义的警告信息,直到在planapply操作的合适阶段执行检查。

该策略的一个问题是如果有限作用域数据源所依赖的资源发生了变化,那么check块将返回known after apply直到Terraform完成了对被依赖资源的更新。在某些情况下,这种行为将会引发一些问题。

推荐只有在内嵌数据源依赖于某项资源,但又没有显式的引用其数据时使用depends_on元参数。

断言

check块中使用assert块定义断言条件,每个check块必须声明至少一个或更多的assert块,每个assert块都包含了一个condition属性和一个error_message属性。

与其他自定义检查(输入变量中的validation以及lifecycle中的preconditionpostcondition)不同,check块中的assert断言不会影响Terraform执行操作,失败的断言将以警告信息的形式输出而不会中断后续的操作。这与其他诸如postcondition这样的自定义检查形成了对比,因为它们的检查失败会立即终止后续的plan以及apply操作,返回错误信息。

assert块中的断言条件表达式可以引用同一check块里的内嵌数据源数据,以及同一模块中的任意输入参数、资源、数据源、模块的输出值。

元参数

check块目前不支持元参数。

是使用check块还是其他自定义条件检查

check块提供了Terraform中最灵活的验证功能,可以在其中引用输出值、输入参数、资源以及数据源的值。的确可以使用check块取代所有其他的自定义条件检查,但这并不意味着应该要这么做。check与其他检查最大的区别在于check块不会中断Terraform的执行,需要将这种非阻塞性的行为特点计入考量来决定采取何种检查。

输出值与输入参数

输出值的precondition以及输入变量的validation都可以对输入输出值进行断言,这些检查是用来阻止Terraform在数据有问题时继续执行的。
举例来说,如果输入参数的值是无效的那么任由Terraform执行整个配置文件并没有什么意义,这种情况下,check块只会输出有关无效输入参数的警告,不会打断Terraform的执行,而 validation块则会警告输入参数值非法,并终止Terraform执行planapply操作。

resource块的precondition与postcondition

check块与resource块的precondition和postcondition的区别更加微妙。
precondition是自定义条件检查中最特殊的,因为它们是在资源的变更被计算或应用之前执行的检查。决定使用precondition还是postcondition的考量也适用于选择是使用 precondition还是check块。

可以在postconditioncheck块之间互换来验证资源和数据源。例如,可以把上述例子中的check块改写成postcondition,以下的postcondition块将会验证对Terraform网站的请求是否返回了状态码200

data "http" "terraform_io" {
  url = "https://www.terraform.io"

  lifecycle {
    postcondition {
        condition = self.status_code == 200
        error_message = "${self.url} returned an unhealthy status code"
    }
  }
}

checkpostcondition块都在planapply操作中验证了Terraform网站是否返回200状态码,它们的区别是发生错误时的行为。
如果是postcondition失败,那么将无法继续执行,Terraform会阻止任意后续的planapply操作。

推荐使用check块来验证基础设施的整体状态,仅在希望确保单一资源状态符合预期时使用postcondition

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/596537.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

语音识别简介

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

Android关于SparseArray面试题

问题1: 什么是SparseArray&#xff0c;它与HashMap有什么不同&#xff1f; 回答&#xff1a; SparseArray是一个用于优化特定情况下内存使用的数据结构&#xff0c;主要用于替代HashMap<Integer, Object>。SparseArray使用两个数组分别存储键和值&#xff0c;而不是使用…

最原理的一集——Mathtype公式编号设置(Mathtype7.8+Word)

版本 Mathtype7.8Office2019 Word 读完本文你将会 随心所欲&#xff0c;想怎么给公式编号就怎么给公式编号&#xff0c;想从(X.1)开始&#xff0c;就从(X.1)开始大概了解Mathtype公式设置原理给作者点赞 如果你想自己跟着文章做的话 请不要在自己的论文里边直接操作&#…

Docker私有仓库与Harbor部署使用

目录 一、本地私有仓库 1. 下载registry镜像 2. 在daemon.json文件中添加私有镜像仓库地址 ​编辑 3. 运行registry容器 4. Docker容器的重启策略如下 5. 为镜像打标签 6. 上传到私有仓库 7. 列出私有仓库的所有镜像 8. 列出私有仓库的centos镜像有哪些tag 9. 先删…

zTasker v1.88.1一键定时自动化任务

软件介绍 zTasker是一款完全免费支持定时、热键或条件触发的方式执行多种自动化任务的小工具&#xff0c;支持win7-11。其支持超过100种任务类型&#xff0c;50种定时/条件执行方法&#xff0c;而且任务列表可以随意编辑、排列、移动、更改类型&#xff0c;支持任务执行日志&a…

分布式锁之RedissonLock

什么是Redisson&#xff1f; 俗话说他就是看门狗&#xff0c;看门狗机制是一种用于保持Redis连接活跃性的方法&#xff0c;通常用于分布式锁的场景。看门狗的工作原理是&#xff1a;当客户端获取到锁之后&#xff0c;会对Redis中的一个特定的键设置一个有限的过期时间&#xff…

投资海外标的,首选跨境ETF!现在新开佣金低至万0.5!

全球资产配置的利器 随着经济的发展&#xff0c;全球资产配置成为中产阶级的关注方向。目前&#xff0c;全球资产配置的主要渠道包括直接开立境外账户、 QDII 基金、跨境 ETF 等。 现阶段通过跨境 ETF 投资境外股市是最便利、最具效率的方式之一。首先&#xff0c;与直接境外…

4. RedHat认证-进程管理

4. RedHat认证-进程管理 1.进程概念 进程就是正在运行中的程序或者命令 每一个进程都是运行的实体&#xff0c;都有自己的地址空间&#xff0c;并占有一定的资源空间 程序消耗的是磁盘资源、进程消耗的是内存和CPU资源 进程会占用四类资源&#xff08;CPU 、内存、磁盘、网…

会声会影电影片头怎么做 会声会影电影质感调色技巧 会声会影视频制作教程 会声会影下载免费中文版

片头通常通过一系列的图像、音乐和文字等元素来引入电影的主题和氛围。通过视觉和音频的呈现方式&#xff0c;给观众留下深刻的第一印象&#xff0c;为电影的故事铺设基础。这篇文章来学习一下会声会影电影片头怎么做&#xff0c;会声会影电影质感调色技巧。 一、会声会影电影…

力扣每日一题-拆炸弹-2024.5.5

力扣题目&#xff1a;拆炸弹 题目链接: 1652.拆炸弹 题目描述 代码思路 根据代码实现分为k等于0和k不等于0的情况。k等于0很容易处理&#xff0c;而k不等于0时&#xff0c;需要使用滑动窗口的方式来解决。先根据小于0或大于0确定一个窗口&#xff0c;然后移动&#xff0c;获…

【数据结构与算法】之五道链表进阶面试题详解!

目录 1、链表的回文结构 2、相交链表 3、随机链表的复制 4、环形链表 5、环形链表&#xff08;||&#xff09; 6、完结散花 个人主页&#xff1a;秋风起&#xff0c;再归来~ 数据结构与算法 个人格言&#xff1a;悟已往之不谏&#xff0c;知…

Llama3-Tutorial之Llama3本地Web Demo部署

Llama3-Tutorial之Llama3本地 Web Demo部署 Llama3-Tutorial之Llama3本地Web Demo部署章节。 参考&#xff1a; https://github.com/SmartFlowAI/Llama3-Tutorial 1. 环境配置 conda create -n llama3 python3.10conda activate llama3conda install pytorch2.1.2 torchvision0…

全球260多个国家的年通货膨胀率数据集(1960-2021年)

01、数据简介 全球年通货膨胀率是指全球范围内&#xff0c;在一年时间内&#xff0c;物价普遍上涨的比率。这种上涨可能是由于货币过度供应、需求过热、成本上升等原因导致的。通货膨胀率是衡量一个国家或地区经济状况和物价水平的重要指标&#xff0c;通常以消费者价格指数&a…

模板初阶篇

本篇目标 泛型编程函数模板类模板 一、泛型编程 下面是实现一个通用的交换函数 void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left, double& right) {double temp left;left right;right temp; } v…

使用cloudflare实现访问LLM-API

一直在找调用第三方 LLM-API 的方法&#xff0c;看到有人用 cloudflare 实现&#xff0c;就尝试了一下&#xff0c;果然成功了。 突然发现&#xff0c;cloudflare 的功能真是个好东西&#xff0c;功能远超于本文所述。 1 相关网站 中文官网 - https://www.cloudflare-cn.com/注…

vue3—项目创建

背景 初次学习vue3&#xff0c;需要从项目创建开始。 步骤 打开cmd命令行&#xff0c;进入项目存放目录下&#xff0c;执行创建命令&#xff1a; npm create vuelatest 这一指令将会安装并执行 create-vue&#xff0c;它是 Vue 官方的项目脚手架工具。你将会看到一些诸如 …

通过Samba实现Windows和Linux之间进行共享文件

关于Samba 在嵌入式系统开发应用平台中&#xff0c;我们会常使用比如tftp、nfs和samba等服务器&#xff0c;来进行文件的传输&#xff0c;其中tftp和nfs是在嵌入式Linux开发环境中经常使用的传输工具&#xff0c;而samba则是Linux和Windows之间的文件传输工具。samba是模仿Wind…

第三篇、利用潜空间生成超稳定动画

1、使用temporal-kit&#xff0c;生成拼接的图片 sides填写3&#xff0c;Height Resolution要填写原视频高度 * sides ,这里也就是三倍 因为原视频动作很快&#xff0c;frames per keyframe填写了2 发现在temp1目录的Input目录下生成了 3* 3的拼接图片 2、到图生图界面&#…

【动态规划】路径问题

1.不同路径 不同路径 思路&#xff1a; 状态表示 状态转移方程 class Solution { public:int uniquePaths(int m, int n) {// 创建dp表// 初始化// 填表// 返回值vector<vector<int>> dp(m 1, vector<int>(n 1));dp[0][1] 1;for(int i 1; i < m; i…

认识ansible 了解常用模块

ansible是什么&#xff1f; Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;Pubbet和Saltstack能实现的功能&#xff0c;Ansible基本上都可以实现。是自动化运维工具&#xff0…
最新文章