Как условно подготовить точку Azure к vpn сайта в Terraform?

Как условно подготовить VPN-соединение типа "точка-сеть" для текущего VPN-шлюза Azure? Я хочу P2S VPN для dev / qa VPN Gateway, но не для prod. Я пробовал использовать атрибут count с логической переменной, но terraform это не нравится (vpn_client_configuration.0: недопустимый или неизвестный ключ: count)

vpn_client_configuration {
    count = "${var.p2s_vpn_enabled}" 

    address_space =  ["${var.p2s_vpn_address_space}"]

    root_certificate {
      name = "${var.p2s_vpn_root_cert_name}"
      public_cert_data = "${var.p2s_vpn_root_cert_base64_data}"
    }       
  }

Terraform 11 для windows


person user2368632    schedule 17.06.2019    source источник
comment
какую версию terraform вы используете в настоящее время?   -  person BMW    schedule 18.06.2019
comment
Terraform 11 / Поставщик AzureRM 1.29.0   -  person user2368632    schedule 18.06.2019
comment
Что вы имеете в виду I want a P2S VPN for dev/qa VPN Gateway but not prod.? Если вам не нужно соединение P2S vpn, вам не нужно устанавливать блок vpn_client_configuration в блоке prod VPN, поскольку vpn_client_configuration является необязательным.   -  person Nancy Xiong    schedule 18.06.2019
comment
Среды @NancyXiong Dev / QA должны иметь конфигурацию P2S vpn. Продавать не следует. Попытка использовать один и тот же сценарий во всех средах путем введения условного развертывания с использованием атрибута terraform 'count'. Счетчик должен быть 1 в средах DEV / QA, но 0 в среде prod.   -  person user2368632    schedule 18.06.2019


Ответы (1)


Ошибка произошла из-за того, что параметр count работает с уровень ресурсов. vpn_client_configuration - это необязательный аргумент в блоке azurerm_virtual_network_gateway. Вы можете попробовать использовать count на уровне блокировки VPN-шлюза, примерно так,

resource "azurerm_virtual_network_gateway" "test" {
  count = "${var.p2s_vpn_enabled}"
  name                = "test"
  location            = "${azurerm_resource_group.test.location}"
  resource_group_name = "${azurerm_resource_group.test.name}"

  type     = "Vpn"
  vpn_type = "RouteBased"
...
}

Кроме того, есть хорошая статья о Terraform Советы и хитрости: циклы, операторы if и подводные камни

В Terraform логическое значение true преобразуется в 1, а логическое значение false преобразуется в 0.

Если вы установите для ресурса значение 1, вы получите одну копию этого ресурса, а если установите значение 0, этот ресурс вообще не будет создан.

Надеюсь, это может вам помочь.

person Nancy Xiong    schedule 18.06.2019