Terraform - объединить / объединить переменные со строкой - PullRequest
0 голосов
/ 14 января 2019

variables.tf

variable "env_name" {
  default = "some_client"
}

variable "azure_instance_names" {
  default = [
    "AD01",
    "AD01",
  ]
}

I ', пытаюсь создать публичный IP для столько экземпляров, сколько указано в переменной azure_instance_names (в нашем случае 2), у меня проблемы с именованием этого ресурса, я хочу создать имя путем объединения env_name и azure_instance_names переменная. Это должно быть одно слово, разделенное -, поэтому имя должно быть в env_name-azure_instance_names, например:

Желаемый выход

имя = some_client-AD01 some_client-AD02

Фактический объем производства:

имя = some_client AD01 some_client AD02

main.tf

resource "azurerm_public_ip" "datasourceip" {    
  count               = "${length(var.azure_instance_names)}"
  name                = "${join("-", list(format("%s %s", var.env_name, element(var.azure_instance_names, count.index))))}"
  location            = "${azurerm_resource_group.res_group.location}"
  resource_group_name = "${azurerm_resource_group.res_group.name}"
  allocation_method   = "Static"
}

В терраформе я получаю:

+ azurerm_public_ip.datasourceip[1]
      id:                      <computed>
      allocation_method:       "Static"
      fqdn:                    <computed>
      idle_timeout_in_minutes: "4"
      ip_address:              <computed>
      ip_version:              "IPv4"
      location:                "westeurope"
      name:                    "some_client AD01"
      resource_group_name:     "myrg1"
      sku:                     "Basic"
      tags.%:                  <computed>

Поскольку Azure не принимает имя ресурса более чем в одном слове i ', попытка соединить "-" с var.env_name, var.azure_instance_names, поэтому имя ресурса должно быть some_client-AD01

Хотя я указал функцию соединения i ', все равно получаю ту же ошибку:

azurerm_public_ip.datasourceip.1: Ошибка создания / обновления общедоступного IP-адреса "some_client AD01" (группа ресурсов "myrg1"): network.PublicIPAddressesClient # CreateOrUpdate: ошибка отправки запроса: StatusCode = 400 - Исходная ошибка: Code = "InvalidResourceName" Сообщение = "Имя ресурса some_client LBA-P-EU2B-AD01 недопустимо. Имя может содержать до 80 символов. Оно должно начинаться с символа слова и заканчиваться символом слова или ''. Имя может содержать символы слова или '.', '-', ''. " Детали = []

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Просто используйте интерполяцию полностью:

name = "${var.env_name}-${var.azure_instance_names[count.index]}"

Я также считаю, ${var.foo[i]} легче читать, чем ${element(var.foo, i)}.

0 голосов
/ 14 января 2019

Глупо !!, решение было простым:

вместо того, чтобы поместить обе переменные в функцию соединения, мне просто нужно объединить var.env_name и ${format("%s",element(var.azure_instance_names, count.index)) следующим образом:

name =  "${var.env_name}-${format("%s",element(var.azure_instance_names, count.index))}"



azurerm_public_ip.datasourceip[1]: Creating...
  allocation_method:       "" => "Static"
  fqdn:                    "" => "<computed>"
  idle_timeout_in_minutes: "" => "4"
  ip_address:              "" => "<computed>"
  ip_version:              "" => "IPv4"
  location:                "" => "westeurope"
  name:                    "" => "some_client-AD01"
  resource_group_name:     "" => "myrg1"
  sku:                     "" => "Basic"
  tags.%:                  "" => "<computed>"
azurerm_public_ip.datasourceip[0]: Creating...
  allocation_method:       "" => "Static"
  fqdn:                    "" => "<computed>"
  idle_timeout_in_minutes: "" => "4"
  ip_address:              "" => "<computed>"
  ip_version:              "" => "IPv4"
  location:                "" => "westeurope"
  name:                    "" => "some_client-AD02"
  resource_group_name:     "" => "myrg1"
  sku:                     "" => "Basic"
  tags.%:                  "" => "<computed>"
azurerm_public_ip.datasourceip[1]: Creation complete after 5s (ID: /subscriptions/2a325f88-e3dd-48c2-bf85-...PAddresses/some_client-AD01)
azurerm_public_ip.datasourceip[0]: Creation complete after 5s (ID: /subscriptions/2a325f88-e3dd-48c2-bf85-...PAddresses/some_client-AD02)

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...