自定义terraform提供程序是否可以隐式生成输出变量,即无需terraform用户在其.tf文件中定义输出变量?
更多上下文-我们有一个系统可以调用用户的Terraform脚本,并希望检测资源的存在。是否可以确定是否使用了资源而不必解析用户的地形?这种想法是与该资源关联的提供者可以通过输出变量如何发布其存在,或产生一些外部副作用。
答案 0 :(得分:3)
这个问题的答案在某种程度上取决于您所说的“现有”资源的含义。根据您对模块输出的引用,我认为您可能打算表示以Terraform状态记录资源的一个或多个实例。如果是这样,您可以执行terraform show -json
以获得a JSON representation of what's currently recorded in the state。
在该JSON输出中,您可以遍历模块中的resources
数组以查看其中的所有资源实例。每个人都有一个address
属性,该属性以通常的Terraform语法(如aws_instance.example[0]
给出资源实例的地址。
如果您是说配置中是否存在 ,而与是否已在状态中创建和记录无关,则当前没有任何内置方法无需解析即可获取该答案Terraform配置本身。
HashiCorp有一个帮助程序库terraform-config-inspect
,该程序库与一个帮助程序相关联的小工具可以生成检查结果的JSON表示形式。使用它至少可以避免您不得不重新实现HCL解码,但是随着将来Terraform语言的发展,您可能需要继续升级到该库的更新版本。
例如,the Terraform Registry使用该库来提取有关模块的元数据。与Terraform本身进行的解析/解码相比,它的一个主要优点是,它尝试支持自Terraform 0.10以来的所有版本的Terraform语言,以便注册表可以提取模块的元数据,而不管它们编写的是哪个Terraform版本。对于。但是,它只能帮助实现向后兼容性,因为该库无法预测以后可以向该语言添加哪些新功能。