检查变量是否存在 - Terraform 模板语法

2024-04-27

我正在尝试使用 terraform 模板语法检查模板文件中是否存在变量,但出现错误This object does not have an attribute named "proxy_set_header.

$ cat nginx.conf.tmpl

%{ for location in jsondecode(locations) }
location ${location.path} {
    %{ if location.proxy_set_header }
       proxy_set_header ${location.proxy_set_header};
    %{ endif }
}
%{ endfor }

我尝试过if location.proxy_set_header != "" and if location.proxy_set_header没有成功。

如何使用字符串模板检查变量是否存在?


如果您使用 Terraform 0.12.20 或更高版本,则可以使用新功能can https://www.terraform.io/docs/configuration/functions/can.html简洁地写出这样的支票:

%{ for location in jsondecode(locations) }
location ${location.path} {
    %{ if can(location.proxy_set_header) }
       proxy_set_header ${location.proxy_set_header};
    %{ endif }
}
%{ endfor }

The can如果给定的表达式可以无错误地计算,则函数返回 true。


该文档确实建议首选try https://www.terraform.io/docs/configuration/functions/try.html在大多数情况下,但在这种特殊情况下,如果该属性不存在,您的目标是根本不显示任何内容,因此这种等效方法try我认为对于未来的读者来说更难理解:

%{ for location in jsondecode(locations) }
location ${location.path} {
    ${ try("proxy_set_header ${location.proxy_set_header};", "") }
}
%{ endfor }

除了(主观上)对于意图更加不透明之外,这还忽略了try仅将其与属性查找和类型转换表达式一起使用的文档。因此我认为can由于其相对清晰,上述用法是合理的,但无论哪种方式都应该有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查变量是否存在 - Terraform 模板语法 的相关文章

随机推荐

  • Array.filter 与 $filter('filter')

    我应该在 Angular 应用程序中使用哪一个 为什么 array filter o gt o name myName or filter filter array name myName true 关键的区别是快捷方式或语法糖由提供 fi
  • 如何将 VBScript 转换为可执行 (EXE) 文件? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我四处寻找转换 VBScript 的信息 vbs 到可执行文件 并意识到大多数可用的工具实际上是将脚本包装在可执行文件中 尝试了一些工
  • 包含多个双引号的 CSV 拆分正则表达式

    我有一个包含文本的 CSV 列数据 每行用双引号分隔 一行中的示例文本类似于此 notice 新行和每行之前的空格是故意的 Lorem ipsum dolor sit amet consectetur adipisicing elit se
  • 我可以在 python 中获得没有 echo 的控制台输入吗?

    我可以在 python 中获取没有 echo 的控制台输入吗 Use getpass http docs python org library getpass html gt gt gt from getpass import getpas
  • Primefaces 中的过滤数据表仅有效一次

    我正在尝试使用 Primefaces 过滤数据表 就像这个例子 http www primefaces org showcase ui datatableFiltering jsf 在网络浏览器中 我输入要过滤的文本 它会工作一次 但是当我
  • Python Asyncio 子进程永远不会完成

    我有一个简单的 python 程序 我用它来测试带有子进程的 asyncio import sys time for x in range 100 print processing s 100 x sys stdout flush prin
  • cmd的字符集

    C Users Kolink gt php r echo C Users Kolink gt echo 正如你所看到的 一个程序输出一个 结果是 但使用echo命令给出所需的字符 并且 我可以配置 PHP 也许是脚本开头的某个命令 来输出正
  • 需要新版本后 Firebase 参考为空

    The new 文档 https firebase google com docs database server start authenticate with admin privileges提供了一种初始化 firebase 的简单方
  • 什么是受污染的对象,我们什么时候应该清除它们?

    什么时候需要对 Ruby 对象进行污染 什么时候应该消除它们的污染 受污染对象的概念如何使 Ruby 脚本在安全模式下运行 任何人都可以详细说明这一点 通过一些代码片段使概念清晰吗 什么是污染 根据定义 用户输入被污染了 例如 string
  • jQuery UI、可拖动、可放置、自动滚动

    我有一组可放置的 li 元素 它接受可拖动的图标 项目列表位于可滚动的 div 元素中 我在这里整理了一个简单的例子 http www nerdydork com demos dragscroll http www nerdydork co
  • 当用另一个图像替换它时,防止悬停时图像闪烁(CSS)

    当我在页面加载后第一次将光标悬停在徽标上时 它开始快速闪烁大约一秒钟 我考虑过使用精灵 但我不想将徽标设置为背景图像 我已经有了一个 这是我的 CSS 代码
  • R Shiny - 将 csv 下载到工作目录

    我有一个 Shiny 应用程序 我想在其中完成以下任务 1 用户按下按钮 2 数据框导出为 csv 保存在工作目录 包含 server R 和 ui R 中 或者最好保存在下一级目录中 我希望这种情况自动发生 因为最终我会将其与 check
  • 如何以编程方式将用户锁定到 iOS 6 中的单一应用程序模式?

    有一些与此相关的问题 但得到确切的答案 锁定 iPhone iPod iPad 使其只能运行一个应用程序 https stackoverflow com questions 5011774 lock down iphone ipod ipa
  • __syncthreads() 死锁

    如果只有部分线程执行 syncthreads 会导致死锁吗 我有一个这样的内核 global void Kernel int N int a if threadIdx x
  • 哪个对缓存最友好?

    我试图很好地掌握面向数据的设计以及如何在考虑缓存的情况下进行最佳编程 基本上有两种情况我无法完全确定哪个更好以及为什么 是拥有一个对象向量更好 还是拥有对象原子数据的多个向量更好 A 对象向量示例 struct A GLsizei mInd
  • NSFetchedResultsChangeUpdate 被触发而不是 NSFetchedResultsChangeDelete

    我有一个 NSFetchedResultsController 通过以下方式启动 NSEntityDescription myEntity NSEntityDescription entityForName MyEntity inManag
  • 逐列读取 CSV 文件

    我想从多列 csv 文件中读取特定列 并使用 Java 在其他 csv 文件中打印这些列 有什么帮助吗 以下是我逐行打印每个标记的代码 但我希望只打印多列 csv 中的几列 import java io BufferedReader imp
  • Ngx-datatable cellClass 不工作

    我尝试将自定义 css 附加到 ngx datatable 单元格
  • 将某些软件包的 nuget 软件包更新限制为当前版本

    有没有办法禁用项目中安装的特定 nuget 包的更新 我已经对几个 javascript 库包进行了一些本地修改 并且不想冒将来有人更新我的更改的风险 我从未创建过自己的 nuget 包 我猜一种选择可能是分叉现有的包 你可以尝试约束包 h
  • 检查变量是否存在 - Terraform 模板语法

    我正在尝试使用 terraform 模板语法检查模板文件中是否存在变量 但出现错误This object does not have an attribute named proxy set header cat nginx conf tm