terraform - Terraform - 使用字符串连接/连接变量
问题描述
变量.tf
variable "env_name" {
default = "some_client"
}
variable "azure_instance_names" {
default = [
"AD01",
"AD01",
]
}
我,尝试为azure_instance_names
变量中指定的多个实例(在本例中为 2)创建公共 IP,我在命名此资源时遇到问题,我想通过加入env_name
和azure_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 个字符。必须以单词字符开头,必须以单词字符或“ ”结尾。名称可能包含单词字符或'.'、'-'、' '。详细信息=[]
解决方案
一直使用插值:
name = "${var.env_name}-${var.azure_instance_names[count.index]}"
我还发现${var.foo[i]}
比${element(var.foo, i)}
.
推荐阅读
- ajax - 我试图做一个 QUnit 异步测试来检查 ajax 更新
- wordpress - 如何在 wordpress 中将帖子的图像显示为媒体库
- javascript - cefsharp ChromiumWebBrowser,我如何将 json 对象返回到 javascript,而不是字符串
- json - Jackson ObjectMapper 没有将 JSON 读取到 POJO
- javascript - 如何以角度从 Firebase 存储中读取文本文件
- node.js - 在猫鼬中更新多个文档
- image-processing - 可分离高斯模糊 - 优化垂直通道
- ruby-on-rails - 如何将文件从 froala 编辑器上传到 Rails 活动存储
- c - fread 从 Linux 磁盘读取扇区时返回 0
- c - 直接打印函数时混淆 printf 的工作原理