Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Terraform-使用字符串连接/连接变量_Terraform - Fatal编程技术网

Terraform-使用字符串连接/连接变量

Terraform-使用字符串连接/连接变量,terraform,Terraform,变量.tf variable "env_name" { default = "some_client" } variable "azure_instance_names" { default = [ "AD01", "AD01", ] } 我正在尝试为azure\u instance\u names变量(在本例中为2)中指定的尽可能多的实例创建公共IP,我在命名此资源时遇到问题,我希望通过加入env\u name和azure\u instance\u names变

变量.tf

variable "env_name" {
  default = "some_client"
}

variable "azure_instance_names" {
  default = [
    "AD01",
    "AD01",
  ]
}
我正在尝试为
azure\u instance\u names
变量(在本例中为2)中指定的尽可能多的实例创建公共IP,我在命名此资源时遇到问题,我希望通过加入
env\u name
azure\u instance\u names
变量来创建名称。它必须是一个单词,由
-
分隔,因此名称应位于env_name-azure_instance_name中,例如:

所需输出

name=
some_client-AD01
一些客户机-AD02

实际输出:

name=
some_客户端AD01
一些客户机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>
+azurerm\u public\u ip.datasourceip[1]
身份证件:
分配方法:“静态”
fqdn:
空闲超时(分钟):“4”
ip地址:
ip_版本:“IPv4”
地点:“西欧”
名称:“某些客户机AD01”
资源组名称:“myrg1”
sku:“基本”
标签。%:
因为Azure不接受超过一个单词i'中的资源名称,所以试图将“-”加入到
var.env\u name、var.Azure\u实例\u name
中,所以资源名称应该是
some\u client-AD01

虽然我指定了连接函数i',但仍然会出现相同的错误:

azurerm#u public_ip.datasourceip.1:创建/更新公共ip“some_client AD01”(资源组“myrg1”)时出错:network.publicIP地址客户端#CreateOrUpdate:发送请求失败:StatusCode=400--原始错误:Code=“InvalidResourceName”消息=“客户端LBA-P-EU2B-AD01的资源名称无效。该名称最多可包含80个字符。它必须以单词字符开头,并且必须以单词字符或“”结尾。名称可能包含单词字符或“.”、“-”和“.”。详细信息=[]


愚蠢的我!!,解决方法很简单:

我不需要将这两个变量都放入join函数中,只需要通过以下方式连接
var.env_name
${format(“%s”,元素(var.azure_instance_name,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.
name=“${var.env_name}-${format(“%s”,元素(var.azure_实例_name,count.index))}”
azurerm_public_ip.datasourceip[1]:正在创建。。。
分配方法:“”=>“静态”
fqdn:“”=>“”
空闲超时(分钟):=>“4”
ip地址:“”=>“”
ip_版本:“”=>“IPv4”
位置:“=>”西欧
名称:“=>”某些\u客户端-AD01
资源组名称:“”=>“myrg1”
sku:“”=>“基本”
标记。%:“”=>“”
azurerm_public_ip.datasourceip[0]:正在创建。。。
分配方法:“”=>“静态”
fqdn:“”=>“”
空闲超时(分钟):=>“4”
ip地址:“”=>“”
ip_版本:“”=>“IPv4”
位置:“=>”西欧
名称:“=>”某些\u客户端-AD02
资源组名称:“”=>“myrg1”
sku:“”=>“基本”
标记。%:“”=>“”
azurerm_public_ip.数据源ip[1]:5s后完成创建(ID:/subscriptions/2a325f88-e3dd-48c2-bf85-…Paddress/some_client-AD01)
azurerm_public_ip.数据源ip[0]:5s后完成创建(ID:/subscriptions/2a325f88-e3dd-48c2-bf85-…Paddress/some_client-AD02)
应用完成!资源:添加2个,更改0个,销毁0个。

愚蠢的我!!,解决方案很简单:

我不需要将这两个变量都放入join函数中,只需要通过以下方式连接
var.env_name
${format(“%s”,元素(var.azure_instance_name,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.
name=“${var.env_name}-${format(“%s”,元素(var.azure_实例_name,count.index))}”
azurerm_public_ip.datasourceip[1]:正在创建。。。
分配方法:“”=>“静态”
fqdn:“”=>“”
空闲超时(分钟):=>“4”
ip地址:“”=>“”
ip_版本:“”=>“IPv4”
位置:“=>”西欧
名称:“=>”某些\u客户端-AD01
资源组名称:“”=>“myrg1”
sku:“”=>“基本”
标记。%:“”=>“”
azurerm_public_ip.datasourceip[0]:正在创建。。。
分配方法:“”=>“静态”
fqdn:“”=>“”
空闲超时(分钟):=>“4”
ip地址:“”=>“”
ip_版本:“”=>“IPv4”
位置:“=>”西欧
名称:“=>”某些\u客户端-AD02
资源组名称:“”=>“myrg1”
sku:“”=>“基本”
标记。%:“”=>“”
azurerm_public_ip.数据源ip[1]:5s后完成创建(ID:/subscriptions/2a325f88-e3dd-48c2-bf85-…Paddress/some_client-AD01)
azurerm_public_ip.数据源ip[0]:5s后完成创建(ID:/subscriptions/2a325f88-e3dd-48c2-bf85-…Paddress/some_client-AD02)
应用完成!资源:添加2个,更改0个,销毁0个。

始终使用插值:

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

我还发现
${var.foo[I]}
${element(var.foo,I)}
更容易阅读

只要一直使用插值:

name = "${var.env_name}-${var.azure_instance_names[count.index]}"
我还发现
${var.foo[I]}
${element(var.foo,I)}
更容易阅读