【问题标题】:How to skip/ignore specific module in terraform if var is null or empty如果 var 为空或为空,如何跳过/忽略 terraform 中的特定模块
【发布时间】:2021-01-03 22:02:15
【问题描述】:

如果定义的变量为空或为空,是否有任何方法可以跳过 terraform 块/文件。而不是抛出错误。

我已经为 azure 创建了两个 terraform 脚本。

  1. 用于 Azure 自动化创建、运行手册创建。
  2. 用于创建事件网格。

在执行第一步之后,我必须手动生成一个 webhook URL(对于 webhook 生成没有这样的自动化支持)。生成 webhook URL 后,我需要在第二个资源中定义它。如果我定义了空/null 或无效的 URL,那么 terraform 会抛出错误。

下面是 terraform 代码。

data "local_file" "runbook_script" {
  filename = "${path.module}/envent-grid-runbook.ps1"
}
resource "azurerm_automation_runbook" "runbook" {
  name                    = "event-gird-notification"
  location                = var.location
  resource_group_name     = var.resource_group_name
  automation_account_name = azurerm_automation_account.CreateAutomation.name
  log_verbose             = true
  log_progress            = true
  description             = "This runbook is creted for event grid notification"
  runbook_type            = "PowerShell"

  content = data.local_file.runbook_script.content
  publish_content_link {
    uri = ""
  }
}

resource "azurerm_eventgrid_event_subscription" "key-vault" {
  name  = "test"
  scope = "/subscriptions/xxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxx/name"
  topic_name = "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxx/vault"
  webhook_endpoint  {
        url = var.webhook_url
  }

  included_event_types = [
                                "Microsoft.KeyVault.SecretNewVersionCreated",
                                "Microsoft.KeyVault.SecretNearExpiry",
                                "Microsoft.KeyVault.SecretExpired"
                        ]
  event_delivery_schema = "EventGridSchema"

}

如果我为 webhook ULR 变量定义了 null/empty var。然后低于错误。

Error: "webhook_endpoint.0.url": required field is not set

我创建了一个 Jenkins 作业,所有 terraform 代码都在一个作业中运行。如果代码失败,那么整个工作都会失败。这就是为什么在 var 为空或 null 时寻找跳过特定块/文件的解决方案的原因。

【问题讨论】:

    标签: azure terraform devops terraform-provider-azure


    【解决方案1】:

    我假设你想让整个 azurerm_eventgrid_event_subscription 资源可选,基于 var.webhook_url 你可以使用 count

    例如:

    resource "azurerm_eventgrid_event_subscription" "key-vault" {
    
      count = var.webhook_url == "" ? 0 : 1
    
      name  = "test"
      scope = "/subscriptions/xxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxx/name"
      topic_name = "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxx/vault"
    
      webhook_endpoint" {
            url = var.webhook_url
      } 
    
      included_event_types = [
                                    "Microsoft.KeyVault.SecretNewVersionCreated",
                                    "Microsoft.KeyVault.SecretNearExpiry",
                                    "Microsoft.KeyVault.SecretExpired"
                            ]
      event_delivery_schema = "EventGridSchema"
    
    }
    

    在上面的示例中,您可能需要根据 var.webhook_url 实际上必须考虑正确或不正确的值来调整条件。

    【讨论】:

    • 如果变量为空,我必须跳过整个资源块。 resource "azurerm_eventgrid_event_subscription" "key-vault" {
    猜你喜欢
    • 2015-12-14
    • 2017-11-03
    • 2021-08-09
    • 2013-04-16
    • 2021-01-01
    • 2018-03-29
    • 2020-06-05
    • 2017-08-31
    • 2021-12-22
    相关资源
    最近更新 更多