Terraform主机名:使用多个主机创建多个环境,并轻松修改主机数量和环境数量

时间:2020-10-29 13:33:51

标签: terraform

我使用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”。 如果期望重复,请在值表达式后使用省略号(...) 启用按键分组。

0 个答案:

没有答案