Как сделать модуль Terraform, определяющий ресурс aws_network_interface
, для необязательного назначения статического частного 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-адрес.
Модуль называется так
module "dns" {
count = 2
source = "./modules/linux-system"
[…]
private_ips = "${cidrhost(var.management_subnet_cidr, 12)},${cidrhost(var.management_subnet_cidr, 13)}"
[…]
}
или
module "jumphost" {
source = "./modules/linux-system"
[…]
}
Это решение не кажется идемпотентным: хотя первый terraform apply
завершается успешно,следующий запуск вызывает
* 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 omit
необходимо здесь.