У меня есть требование выполнить сложное объединение входных данных в Terraform 0.12. Я не могу понять, возможно ли это, но, возможно, я просто делаю что-то не так.
У меня есть две переменные:
variable "ebs_block_device" {
description = "Additional EBS block devices to attach to the instance"
type = list(map(string))
default = [
{
device_name = "/dev/sdg"
volume_size = 5
volume_type = "gp2"
delete_on_termination = false
},
{
device_name = "/dev/sdh"
volume_size = 5
volume_type = "gp2"
delete_on_termination = false
}
]
}
variable "mount_point" {
description = "Mount point to use"
type = list(string)
default = ["/data", "/home"]
}
Я хочу затем объединить эти источники внутри шаблона следующим образом:
#!/usr/bin/env bash
%{for e in merged ~}
mkfs -t xfs ${e.device_name}
mkdir -p ${e.mount_point}
mount ${e.device_name} ${e.mount_point}
%{endfor}
Где merged
будет содержать объединенные данные.
Похоже, что в языке шаблонов поддерживаются только простые циклы for, поэтому о слиянии здесь не может быть и речи.
Итак, я предполагаю, что в DSL должно происходить объединение данных. Но мне нужно сделать это:
- перебирает список ebs_block_devices, отслеживая индекс (например,
enumerate()
в Python или each.with_index
в Ruby)
- получить соответствующий элемент из списка mount_points
- добавить их в результирующую карту.
Моя проблема, в частности, заключается в том, что, похоже, нет эквивалента функции enumerate
в Python, и это мешает мне отслеживать индекс. Если бы это было так, я думаю, я мог бы сделать что-то вроде этого:
merged = [for index, x in enumerate(var.ebs_block_device): {
merge(x, {mount_point => var.mount_point[index]})
}]
Возможно ли такое преобразование данных, которое я сейчас пытаюсь сделать здесь, в Terraform? И если это невозможно, какова предпочтительная альтернативная реализация?