用于逻辑应用的 terraform 模板 - 在两种类型的触发器之间动态选择:重复和 http 请求

问题描述 投票:0回答:1

我有一个用于部署逻辑应用程序的 terraform 模板。 因为我有很多逻辑应用程序,所以我想以某种方式将其中一部分设置为使用基于重复的触发器,并将其中一部分设置为 HTTP 请求。

目前,我的所有逻辑应用程序都使用相同的模板,如下所示:

{
  "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
   ...
  },
  "triggers": {
    "recurrenceTrigger": {
      "type": "Recurrence",
      "recurrence": {
        "frequency": "Day",
        "interval": 1,
        "schedule": {
          "hours": [
            "${scheduleHour}"
          ],
          "minutes": [
            "${scheduleMinute}"
          ]
        },
        "timeZone": "${scheduleTimezone}"
      }
    }
  },
  "actions": {
    // Define your actions here
  },
  "outputs": {}
}

我正在考虑如何修改此模板以包含变量的条件输出并将其设置到我的逻辑应用程序中,并基于此选择要使用的触发器类型?

我正在尝试类似:

{
    "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      ...
    },
    "triggers": {
        "${use_http_trigger ? "HttpTrigger" : "Recurrence"}": ${
        use_http_trigger ? 
        {
          "type": "Http",
          "inputs": {
            "method": "POST",
            "uri": "http://www.example.com"
          }
        }
        :
        {
          "recurrence": {
            "frequency": "Day",
            "interval": 1,
            "schedule": {
              "hours": [
                "${scheduleHour}"
              ],
              "minutes": [
                "${scheduleMinute}"
              ]
            },
            "timeZone": "${scheduleTimezone}"
          },
          "evaluatedRecurrence": {
            "frequency": "Day",
            "interval": 1,
            "schedule": {
              "hours": [
                "${scheduleHour}"
              ],
              "minutes": [
                "${scheduleMinute}"
              ]
            },
            "timeZone": "${scheduleTimezone}"
          },
          "type": "Recurrence"
        }
      }
    },
    ...(rest of template)
 }

错误:条件结果类型不一致; true 和 false 结果表达式必须有 一致的类型。 “true”值包括对象属性“inputs”,而“false”值中不存在该属性..

您认为我的请求的解决方案是什么?代替上面的,使用 2 个单独的模板?不希望的,代码重复...等等。

*我的变量 use_http_trigger 是一个布尔值;

terraform azure-logic-apps azure-rm-template terraform-template-file
1个回答
0
投票

这是使用两个模板文件的示例:

variable "use_http_trigger" {
  type    = bool
  default = true
}

locals {
  tests = {
    aaa = { one = "111", two = "222" }
    bbb = { one = "777", two = "999" }
  }
}

resource "null_resource" "test" {
  for_each = local.tests
  triggers = {
    txt = templatefile(
      var.use_http_trigger ? "./foo.tftpl" : "./bar.tftpl",
      {
        name   = each.key,
        config = each.value
      }
    )
  }
}

只是一个简单的条件:

var.use_http_trigger ? "./foo.tftpl" : "./bar.tftpl",

我认为这会让你的代码更具可读性

© www.soinside.com 2019 - 2024. All rights reserved.