azurerm_resource_group_template_deployment игнорирование файла параметров

Я пытаюсь использовать terraform и встроенные шаблоны ARM, чтобы разрешить создание простого логического приложения в Azure. У меня есть блок ресурсов в терраформе как:

resource "azurerm_resource_group_template_deployment" "templateTEST" {
  name                = "arm-Deployment"
  resource_group_name = azurerm_resource_group.rg.name
  deployment_mode     = "Incremental" 
  template_content    = file("${path.module}/arm/createLogicAppsTEST.json")
  parameters_content = jsonencode({ 
    logic_app_name = { value = "logic-${var.prefix}" }
  })

}

и файл createLogicAppsTEST.json определяется (только несколько верхних строк как)

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "logic_app_name": {
            "defaultValue": "tsa-logic-dgtlbi-stage-001",
            "type": "string"
        }
    },
    "variables": {},
    "resources": [
        {
....

При первом развертывании и запуске, т.е. создавая ресурс приложения логики с использованием terraform и встроенного шаблона ARM, он создаст правильную передачу имени с учетом:

  parameters_content = jsonencode({ 
    logic_app_name = { value = "logic-${var.prefix}" }
  })

однако, если я когда-нибудь снова запускаю, terraform, похоже, игнорирует параметры, которые я передаю, и идет со значением по умолчанию из шаблона ARM как:

    "logic_app_name": {
        "defaultValue": "tsa-logic-dgtlbi-stage-001",
        "type": "string"
    }

Я обновил до последней версии как terraform (0.14.2), так и azurerm (2.40.0), но проблема не устранена. В настоящее время это делает ARM проблематичной, поскольку разные уровни разработки, тестирования и производства в моей компании имеют разные префиксы и имена, т. Е. prod-, dev-.

Есть ли настройка, чтобы терраформ действительно использовал параметры, которые я передаю с блоком ресурсов azurerm_resource_group_template_deployment?


person Sauron    schedule 11.12.2020    source источник


Ответы (2)


После моей проверки вы можете использовать поле ignore_changes во вложенном жизненном цикле блока. Он сообщит terraform об игнорировании при планировании обновлений связанного удаленного объекта.

Например,

resource "azurerm_resource_group_template_deployment" "templateTEST" {
  name                = "arm-Deployment"
  resource_group_name = azurerm_resource_group.rg.name
  deployment_mode     = "Incremental" 
  template_content    = file("${path.module}/arm/createLogicAppsTEST.json")
  parameters_content = jsonencode({ 
    logic_app_name = { value = "logic-${var.prefix}" }
  })

   lifecycle {
        
        ignore_changes = [template_content,]
    }

}

Однако в этом случае было бы лучше объявить пустые параметры без значений по умолчанию во встроенных шаблонах ARM, вместо этого вы можете передать реальные параметры через parameters_content.

Например, объявите такой параметр в шаблоне ARM. Это всегда будет использовать содержимое внешних параметров.

"logic_app_name": {
    "type": "string"
}
person Nancy Xiong    schedule 17.12.2020
comment
Я решил просто использовать старого провайдера, на самом деле есть открытый отчет об этой же проблеме на github - person Sauron; 18.12.2020
comment
Не могли бы вы показать отчет об ошибке? - person Nancy Xiong; 18.12.2020

Я решил просто использовать старого провайдера, на самом деле есть открытый отчет об этой же проблеме на github

person Sauron    schedule 18.12.2020