首页 > 解决方案 > Terraform 从 CIDR 块创建多个 IP

问题描述

我有变量cidr=10.11.12.0/16

和有计数的资源

resource "aws_network_interface" "first" {
  count     = "${length(var.instance_names)}"
  provider  = "aws.base"

  subnet_id = "${var.cidr}"

  private_ips = ["${concat(
      list(var.first_network_interface_private_ip),
      var.first_network_interface_private_ip_additional
  )}"]

  source_dest_check = "${var.first_network_interface_source_dest_check_enabled}"

security_groups = [
     "${concat(
      list(aws_security_group.this.id),
      var.first_network_interface_security_group_additional
    )}"
  ]

  depends_on = [
    "aws_security_group.this",
  ]

  tags = "${merge(
    var.tags_global,
    var.tags_module,
    map("Name", format("%s - First Interface", element(var.instance_names, count.index))),
    map("Description", format("%s", element(var.instance_names, count.index)))
  )}"
}

我希望每次迭代都获得不同的 IP

我遇到了这个 ,不知道如何从中提取前三个八位字节

10.11.12。,可能需要使用正则表达式从 CIDR 获取八位字节?或者我的问题还有其他解决方案吗?

标签: terraform

解决方案


弄清楚了

  private_ips = ["${concat(
      list(cidrhost(var.cidr , count.index + 249)),
      var.first_network_interface_private_ip_additional
  )}"]

为两台机器获取 10.11.12.249/250 IP


推荐阅读