kam*_*dra 1 terraform terraform-provider-aws terraform0.12+
要求:我有一堆 EC2。我根据标签对其进行分组。在此示例中,组总数 = 4,每个组有 7 个 EC2:1 个父级 - 6 个子级。在这里我分享一个命名很重要的孩子的代码。
工作代码:这里我分享子 EC2 代码,该代码与名为 :ws_to_Child_Node_name_map_count 的地图类型的输入变量完美配合。现在我希望它是可扩展的(父子数量),我希望使用“在本地动态创建的地图”而不是使用输入变量。主.tf
resource "aws_instance" "ec2_instance_child" {
count = var.ec2_instance_child_count
tags = {
NodeName = "${lookup(var.ws_to_Child_Node_name_map_count, count.index+1, 99)}"
}
}
Run Code Online (Sandbox Code Playgroud)
变量.tf
variable "ws_to_Child_Node_name_map_count" {
type = map
default = {
"1"="1"
"2"="2"
"3"="3"
"4"="4"
"5"="5"
"6"="6"
"7"="1"
"8"="2"
"9"="3"
"10"="4"
"11"="5"
"12"="6"
"13"="1"
"14"="2"
"15"="3"
"16"="4"
"17"="5"
"18"="6"
"19"="1"
"20"="2"
"21"="3"
"22"="4"
"23"="5"
"24"="6"
}
}
variable "ec2_instance_child_count" {
description = "Number of instances to run"
default = "24" #number of group *6
}
Run Code Online (Sandbox Code Playgroud)
上面显示的地图我想使用两个变量动态创建,将来我将不再是常量。
variable "child_count" {
default = 6
}
variable "group_count" {
default = 4
}
Run Code Online (Sandbox Code Playgroud)
您在此处编写的映射表似乎描述了模运算的一种变体,该变体从一而不是零开始计数。
如果这是您的意图,您可以使用表达式动态计算此值,而不是生成单独的映射表。
variable "child_count" {
default = 6
}
variable "group_count" {
default = 4
}
resource "aws_instance" "example" {
count = var.child_count * var.group_count
tags = {
# The % symbol is Terraform's modulo operator
NodeName = ((count.index - 1) % var.child_count) + 1
}
}
Run Code Online (Sandbox Code Playgroud)
上面表达式中的- 1
and+ 1
允许您使用从一开始的计数而不是从零开始的计数。对于零基础的,这将减少到count.index % var.child_count
。
如果出于某种原因您仍然希望将映射表设置为本地值,则可以在表达式中执行上述for
计算:
locals {
lookup_table = {
for n in range(1, (var.child_count * var.group_count) + 1) :
n => ((n - 1) % var.child_count) + 1
}
}
Run Code Online (Sandbox Code Playgroud)
这使用该range
函数从 1 计数到总计数,然后生成一个映射,该结果的每个元素都有一个元素,其中该值是我在resource
上面的块中显示的相同模计算的结果。
从 Terraform 0.12 开始,永远不需要使用null_resource
ornull_data_source
作为转换列表的技巧,因为for
表达式语法现在可以满足相同的用例。
归档时间: |
|
查看次数: |
21034 次 |
最近记录: |