【发布时间】:2021-12-06 04:29:49
【问题描述】:
我的 Terrform 代码如下所示。这里我的参数文件有时有值,大部分时间是空 JSON {}
resource "azurerm_policy_assignment" "example" {
name = "example-policy-assignment"
scope = azurerm_resource_group.example.id
policy_definition_id = azurerm_policy_definition.example.id
description = "Policy Assignment created via an Acceptance Test"
display_name = "My Example Policy Assignment"
parameters = "${data.template_file.policy_parameters_file.rendered}"
所以我需要做一些验证来检查我的参数文件是否为空 json 然后我需要分配一个空字符串。
我尝试了下面的方法,但它不起作用
"${data.template_file.policy_parameters_file.rendered}" == {} ? "" : "${data.template_file.policy_parameters_file.rendered}"
需要此验证,因为状态文件已经将参数值设为“”。现在,如果我运行 terraform 计划,它会显示为
parameters = jsonencode({}) # forces replacement
强制替换。
如果我将参数硬编码为“”,一切顺利。所以为了处理这个问题,我需要找到一种方法来处理参数文件中空 json 的验证。如果 json 为空,我需要传递为 ""
【问题讨论】:
-
如果您将已弃用的
data.template_file更新为templatefile()的使用,是否可以解决您的问题? -
将
data.template_file修改为templatefile()将是一个更大的修改,因为原始代码将有许多基于循环的条件,以及处理许多文件的依赖关系。 (更通用的模块)。但是感谢这个指针。我会尝试在我的本地沙盒环境中模拟这一点,如果修复,我会回复你。 -
" 但它不起作用" - 不具体。到底发生了什么?有什么错误吗?
-
没有错误。由于状态文件已经像
parameters = ""当我现在运行 terraform 计划时,我得到了 OP 中提到的force replacement而不是对现有资源的更新。根据azurerm_policy_assignment的设计,它会在更改参数字段时重新创建新资源。但就我而言,它实际上并没有改变。我必须找到一种方法将参数字段作为“”
标签: terraform terraform-provider-azure