2017-01-12 17 views
0

Я пишу скрипт для создания виртуальной машины на Openstack. Я могу получить ошибку, если плавающие IP-адреса будут исчерпаны в пуле. Как проверить, имеются ли плавающие IP-адреса в этом пуле или нет? Есть ли способ, когда openstack может автоматически выбирать пул из всех доступных пулов?Как проверить количество плавающих IP-адресов, доступных в пуле?

+0

Просьба указать код, какой API-интерфейс для скриптинга вы используете, какой-либо клиент командной строки или какой-либо API-интерфейс python или что? Проверьте документацию API-интерфейса скриптинга, который вы используете. –

+0

Это сценарий оболочки, я использую стандартный CLS OpenStack –

ответ

1

У вас есть выбор для работы с 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 
+0

У меня пока нет достаточной репутации, чтобы комментировать, поэтому я добавлю здесь комментарий для Atmesh: когда у вас загружена пользовательская среда openstack (даже admin в проекте администратора), поведение по умолчанию для всех команд показывает вам ТОЛЬКО что доступно в ВАШЕМ проекте. Есть некоторые исключения, но здесь это не актуально. В вашем плавающем списке IP, если вы работаете как член проекта, тогда список - это плавающие IP-адреса, доступные вам. Те, которые назначены в вашем проекте, можно увидеть в столбце «Фиксированный IP-адрес», показывая, на какой сервер назначен. –

+0

У меня две сети (IP-пулы/подсети). Я хочу знать количество IP-адресов, доступных в пуле. Если он исчерпан, я бы переключился на новый пул. Я не хочу знать количество FIP, доступных в моем арендаторе, я просто хочу знать, есть ли пул, откуда получает выделение IP, есть FIPs или нет. Угадывая из вашего комментария выше, его невозможно. –

+1

Atmesh: Возможно, вы неверно истолковали, так как то, что вы просите *, возможно. 1) Если пользователь может «перечислить» что-нибудь и вернуть предметы, то он доступен для использования. Все, включая FIP, не разделяемые или доступные для их проекта, не будут отображаться в «списке». 2) Чтобы узнать, доступны ли FIP, запрашивать и подсчитывать. Используя описанные выше OSC-скрипты для подсчета строк с «Нет» в них, имеется ненулевое значение счетчика FIP. 3) FIP поступают из внешних сетей, а «openstack floating ip list» всегда возвращает * все * доступные FIP, из * всех * внешних пулов. –

1

Вы можете посмотреть документацию сценариев 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.

+0

Вопрос заключается в том, как узнать количество плавающих IP-адресов, доступных в плавающем плагине. Полученное вами решение дает мне количество IP-адресов, которые выделены, но не связаны с виртуальными машинами. Я хочу знать количество плавающих IP-адресов, которые «могут» быть выделены из плавающего пула IP. –

+0

Может быть выделено vms ?? я думаю, что в приведенной выше таблице порт colomn отсутствует, поэтому они могут быть выделены виртуальным машинам. –

+0

Сэр, существует разница между распределением IP-проекта и ассоциированием выделенного IP-адреса с виртуальной машиной. –

 Смежные вопросы

  • Нет связанных вопросов^_^