Terraform-使用字符串连接/连接变量
变量.tfTerraform-使用字符串连接/连接变量,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变
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)}
更容易阅读