我使用Terraform在多个单独的环境中创建多个主机,并使用有关该环境中的环境号和主机号的信息来设置其主机名:
variable "envs" {
type = number
default = 1
}
variable "hosts" {
type = number
default = 1
}
variable "pr" {
# precision for hostname pattern (no relevance, just included for completeness):
# pr=1 gives 'host-1-1', pr=3 gives 'host-001-001'
type = number
default = 1
}
locals {
envs_hosts = var.envs * var.hosts
}
resource "<my provider server>" "server" {
# create envs * hosts = X servers, named 'host-<env number>-<host number>'
count = local.envs_hosts
hostname = format("host-%0${var.pr}d-%0${var.pr}d",
(count.index % var.envs) + 1,
ceil((count.index + 1) / var.envs))
...
}
运行该计划可以得出:
$ terraform plan -var 'envs=3' -var 'hosts=2' | grep hostname
+ hostname = "host-1-1"
+ hostname = "host-2-1"
+ hostname = "host-3-1"
+ hostname = "host-1-2"
+ hostname = "host-2-2"
+ hostname = "host-3-2"
我想自由地添加和删除一个环境中的环境数和主机数。如果环境数量发生变化,此方法还会强制更换某些旧服务器。我想保持旧的服务器/主机名不变,除非要删除它们。我目前的方法似乎太简单了,无法解决所有这些问题,所以我认为我需要考虑一些使用列表或地图的方法。对此有何评论?
这还不是什么大问题,但是在调整大小时,我在尝试输出新值时也了解了省略号:
output "host_ip" {
value = {
for host in <my provider server>.server:
host.hostname => host.ip_address
}
}
最终给出如下结果:
两个不同的项目在此“ for”表达式中产生了键“ host-3-2”。 如果期望重复,请在值表达式后使用省略号(...) 启用按键分组。