Terraform:如何在aws_网络_接口中选择分配静态专用IP?

Terraform:如何在aws_网络_接口中选择分配静态专用IP?,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我如何制作一个Terraform模块来定义aws\u network\u接口资源,以选择性地分配一个静态专用IP 在模块中,资源定义为 # Use this block if private_ips have been provided resource "aws_network_interface" "management_interface" { count = "${var.count}" subnet_id = "${var.management_net}" # Worka

我如何制作一个Terraform模块来定义
aws\u network\u接口
资源,以选择性地分配一个静态专用IP

在模块中,资源定义为

# Use this block if private_ips have been provided
resource "aws_network_interface" "management_interface" {
  count = "${var.count}"

  subnet_id = "${var.management_net}"
  # Workaround, see https://github.com/hashicorp/terraform/issues/12472
  private_ips = [ "${compact(list(element(split(",",var.private_ips), count.index)))}" ]

  tags {
    Name = "if-management"
  }
}
private_ips
如果请求动态私有IP地址,则为空字符串;如果应分配静态私有IP,则为coma分隔列表(每个实例一个元素)

模块的名称如下所示

module "dns" {
  count          = 2
  source         = "./modules/linux-system"
  […]
  private_ips    = "${cidrhost(var.management_subnet_cidr, 12)},${cidrhost(var.management_subnet_cidr, 13)}"
  […]
}

此解决方案似乎不是幂等的:当第一次
地形应用成功完成时,下一次运行会导致

* module.jumphost.aws_network_interface.management_interface: 1 error(s) occurred:

* aws_network_interface.management_interface: Failure to unassign Private IPs: InvalidParameterValue: Value (10.128.16.139) for parameter privateIpAddress is invalid. The primary IP address of an interface cannot be unassigned.
        status code: 400, request id: 672b6d7d-6396-48bf-8bd0-77ce764709be

有没有人对如何做好这件事有想法?看起来这里需要Ansible/Jinja2的
省略

看起来这在Terraform版本中是不可能的≤ 0.11. Hashicorp在这里介绍了很多帮助。最重要的可能是
null
值和可以处理列表的条件运算符(
)。
* module.jumphost.aws_network_interface.management_interface: 1 error(s) occurred:

* aws_network_interface.management_interface: Failure to unassign Private IPs: InvalidParameterValue: Value (10.128.16.139) for parameter privateIpAddress is invalid. The primary IP address of an interface cannot be unassigned.
        status code: 400, request id: 672b6d7d-6396-48bf-8bd0-77ce764709be