Я пишу скрипт для создания виртуальной машины на Openstack. Я могу получить ошибку, если плавающие IP-адреса будут исчерпаны в пуле. Как проверить, имеются ли плавающие IP-адреса в этом пуле или нет? Есть ли способ, когда openstack может автоматически выбирать пул из всех доступных пулов?Как проверить количество плавающих IP-адресов, доступных в пуле?
ответ
У вас есть выбор для работы с API (например, с помощью curl) или с помощью CLI openstack, который вы использовали при отправке этого вопроса. CLI проще для прямого скриптинга. Вот как вы запрашиваете плавающие IP-адреса. Caveat: становится очень популярным использование вывода «-f json», а затем команда «jq» для полевых запросов. Вы также можете использовать '-f csv' или '-f value' и проанализировать с помощью grep или sed. Но, хотя вы, возможно, и не делали этого раньше, я рекомендую попробовать json и jq. Это стоит того, чтобы решить именно ту проблему, которую вы решаете.
(.. Имейте в виду, в колонке "None" является DISPLAY только текст Фактическое сохраненное значение поля 'нуль')
Дано:
[[email protected] ~]$ openstack floating ip list
+--------------------------------------+---------------------+------------------+--------------------------------------+
| ID | Floating IP Address | Fixed IP Address | Port |
+--------------------------------------+---------------------+------------------+--------------------------------------+
| 2492aa71-cadf-4011-9c4f-87f856cd2551 | 172.25.250.29 | 192.168.3.10 | 1e0b868b-8b3c-4e8d-8f11-d6ed15d0e750 |
| 74c9233e-1420-4681-aaa7-357843f48962 | 172.25.250.36 | None | None |
| f235dfae-a01c-4290-864d-89b83f9a8de9 | 172.25.250.37 | None | None |
+--------------------------------------+---------------------+------------------+--------------------------------------+
, который выглядит, как это в JSON:
[[email protected] ~]$ openstack floating ip list -f json
[
{
"Fixed IP Address": "192.168.3.10",
"ID": "2492aa71-cadf-4011-9c4f-87f856cd2551",
"Floating IP Address": "172.25.250.29",
"Port": "1e0b868b-8b3c-4e8d-8f11-d6ed15d0e750"
},
{
"Fixed IP Address": null,
"ID": "74c9233e-1420-4681-aaa7-357843f48962",
"Floating IP Address": "172.25.250.36",
"Port": null
},
{
"Fixed IP Address": null,
"ID": "f235dfae-a01c-4290-864d-89b83f9a8de9",
"Floating IP Address": "172.25.250.37",
"Port": null
}
]
Использование 'jq' для анализа этого вывода, позвольте мне сначала перефразировать на английском языке. Трубопровод в jq подобен трубопроводу в оболочке bash. Итак, «возьмите весь массив» | msgstr "выбрать это поле равным этому значению" | «вернуть это другое поле». При необходимости может возвращать несколько полей.
[[email protected] ~]$ openstack floating ip list -f json | jq '.[] | select(.["Fixed IP Address"] == null) | .["Floating IP Address"] '
"172.25.250.36"
"172.25.250.37"
Если вы не хотите получать результаты в кавычках, попросите сырой выход (-r для краткости).
[[email protected] ~]$ openstack floating ip list -f json | jq --raw-output '.[] | select(.["Fixed IP Address"] == null) | .["Floating IP Address"]'
172.25.250.36
172.25.250.37
Это доступные плавающие IP-адреса. Если вы потянете их в массив, вы можете запросить массив, чтобы узнать, сколько у вас есть.
[[email protected] ~]$ floats=($(openstack floating ip list -f json | jq --raw-output '.[] | select(.["Fixed IP Address"] == null) | .["Floating IP Address"]'))
[[email protected] ~]$ echo ${#floats[@]}
2
У меня пока нет достаточной репутации, чтобы комментировать, поэтому я добавлю здесь комментарий для Atmesh: когда у вас загружена пользовательская среда openstack (даже admin в проекте администратора), поведение по умолчанию для всех команд показывает вам ТОЛЬКО что доступно в ВАШЕМ проекте. Есть некоторые исключения, но здесь это не актуально. В вашем плавающем списке IP, если вы работаете как член проекта, тогда список - это плавающие IP-адреса, доступные вам. Те, которые назначены в вашем проекте, можно увидеть в столбце «Фиксированный IP-адрес», показывая, на какой сервер назначен. –
У меня две сети (IP-пулы/подсети). Я хочу знать количество IP-адресов, доступных в пуле. Если он исчерпан, я бы переключился на новый пул. Я не хочу знать количество FIP, доступных в моем арендаторе, я просто хочу знать, есть ли пул, откуда получает выделение IP, есть FIPs или нет. Угадывая из вашего комментария выше, его невозможно. –
Atmesh: Возможно, вы неверно истолковали, так как то, что вы просите *, возможно. 1) Если пользователь может «перечислить» что-нибудь и вернуть предметы, то он доступен для использования. Все, включая FIP, не разделяемые или доступные для их проекта, не будут отображаться в «списке». 2) Чтобы узнать, доступны ли FIP, запрашивать и подсчитывать. Используя описанные выше OSC-скрипты для подсчета строк с «Нет» в них, имеется ненулевое значение счетчика FIP. 3) FIP поступают из внешних сетей, а «openstack floating ip list» всегда возвращает * все * доступные FIP, из * всех * внешних пулов. –
Вы можете посмотреть документацию сценариев API, который вы используете, но из командной строки, чтобы перечислить все плавающие IP-адреса, выделенные для текущего проекта, выполните команду:
$ openstack floating ip list
+--------------------------------------+---------------------+------------------+------+
| ID | Floating IP Address | Fixed IP Address | Port |
+--------------------------------------+---------------------+------------------+------+
| 760963b2-779c-4a49-a50d-f073c1ca5b9e | 172.24.4.228 | None | None |
| 89532684-13e1-4af3-bd79-f434c9920cc3 | 172.24.4.235 | None | None |
| ea3ebc6d-a146-47cd-aaa8-35f06e1e8c3d | 172.24.4.229 | None | None |
+--------------------------------------+---------------------+------------------+------+
вы можете сделать некоторые команды редактирование строки, чтобы извлечь ip colmn и иметь счетчик ip.
Вопрос заключается в том, как узнать количество плавающих IP-адресов, доступных в плавающем плагине. Полученное вами решение дает мне количество IP-адресов, которые выделены, но не связаны с виртуальными машинами. Я хочу знать количество плавающих IP-адресов, которые «могут» быть выделены из плавающего пула IP. –
Может быть выделено vms ?? я думаю, что в приведенной выше таблице порт colomn отсутствует, поэтому они могут быть выделены виртуальным машинам. –
Сэр, существует разница между распределением IP-проекта и ассоциированием выделенного IP-адреса с виртуальной машиной. –
Просьба указать код, какой API-интерфейс для скриптинга вы используете, какой-либо клиент командной строки или какой-либо API-интерфейс python или что? Проверьте документацию API-интерфейса скриптинга, который вы используете. –
Это сценарий оболочки, я использую стандартный CLS OpenStack –