首页 > 解决方案 > Terraform - 使用字符串连接/连接变量

问题描述

变量.tf

variable "env_name" {
  default = "some_client"
}

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

我,尝试为azure_instance_names变量中指定的多个实例(在本例中为 2)创建公共 IP,我在命名此资源时遇到问题,我想通过加入env_nameazure_instance_names变量来创建名称。它必须是一个单词,以 分隔-,因此名称应在 env_name-azure_instance_names 中,例如:

期望的输出

名称=some_client-AD01 some_client-AD02

实际输出:

名称=some_client AD01 some_client AD02

主文件

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"
}

在 terraform apply 我得到:

+ 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" Message="资源名称 some_client LBA-P-EU2B-AD01 无效。名称最长可包含 80 个字符。必须以单词字符开头,必须以单词字符或“ ”结尾。名称可能包含单词字符或'.'、'-'、' '。详细信息=[]

标签: terraform

解决方案


一直使用插值:

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

我还发现${var.foo[i]}${element(var.foo, i)}.


推荐阅读