Terraform Openstack прикрепляет предварительно выделенные плавающие IP-адреса к экземпляру

У меня есть вариант использования, когда мне нужно повторно использовать отдельные плавающие IP-адреса. Есть ли способ сделать это в Terraform? Я пробовал:

`
data "openstack_networking_floatingip_v2" "fips" {
   status = "DOWN"
}
`

чтобы получить список отсоединенных IP-адресов, но я получаю сообщение об ошибке, говорящее, что существует более одного плавающего IP-адреса (что верно).

Есть ли хороший способ получить отсоединенные плавающие IP-адреса в качестве ресурса данных в терраформе? Альтернативой является передача массива доступных IP-адресов через сценарий оболочки с помощью команды, описанной здесь: Повторное использование отсоединенные плавающие IP-адреса в OpenStack


person Rudy    schedule 21.10.2020    source источник
comment
Я предполагаю, что нет способа получить отсоединенные плавающие IP-адреса в качестве ресурса данных в terraform, потому что единственный ресурс данных с ip в его имени - openstack_networking_floatingip_v2, и он возвращает только id из найденного одного плавающий IP-адрес: registry.terraform.io / Provider / terraform-provider-openstack /   -  person Yann Stoneman    schedule 22.10.2020
comment
Да, похоже, не существует ресурса данных openstack, который возвращал бы несколько IP-адресов, насколько я могу судить.   -  person Rudy    schedule 22.10.2020


Ответы (1)


Для всех, кто сталкивается с этим, вот я решил это сейчас:

Я использовал «внешний» ресурс данных для вызова openstack cli для получения списка доступных IP-адресов, разделенных запятыми. Команда openstack cli выглядит так:

openstack floating ip list --status DOWN -f yaml -c "Floating IP Address"  

Чтобы получить результат в формате, подходящем для внешнего ресурса данных terraform, я использовал скрипт python. Скрипт выводит объект json, который выглядит следующим образом: {ips = ip.1.2.3, ip.4.5.6, ip.7.8.9}

Внешний ресурс данных в терраформе выглядит так:

data "external" ips {
    program = ["python", "<path-to-python-script>"]
}

Оттуда я могу разделить разделенную запятыми строку IP-адресов в terraform и получить доступ к IP-адресам в виде массива:

output available_ips {
    value = split(",", data.external.ips.result.ips)
}

Это определенно не изящно, я бы хотел, чтобы ресурс данных openstack_networking_floatingip_v2 допускал эту функцию, я займусь открытием проблемы, чтобы добавить ее.

person Rudy    schedule 23.10.2020