2013-08-02 2 views
1

Я планировал создать службу, которая будет спать/просыпать неиспользуемые вычислительные узлы в среде openstack, для чего мне нужен IP-адрес вычислительных узлов. Есть ли какой-либо API или команда для получения IP-адресов (а не имя вычислительного узла) машин, присутствующих в сети openstack?Получить адрес Ip ​​для вычисления узлов в сети openstack

ответ

2

Существует два типа IP-адресов, используемых в настройке облачной среды OpenStack.

  1. Исправлено:

    Accessed только из сети OpenStack, То есть среди виртуальных машин.

  2. Плавающий:

    Может быть доступны из-за пределов облачной сети OpenStack, в основном работает на другом интерфейсе, и в целом этот IP становится доступным для общественности, чтобы получить доступ к этой виртуальной машины от внешнего netwrok.

Теперь вы знаете это, следуя приведенным здесь API. http://api.openstack.org/api-ref.html#ext-os-ext-ips

При получении IP-адреса через ответ JSON сначала вы должны проверить, является ли он фиксированным или плавающим.

Это должно ответить на ваш вопрос, я надеюсь. Если нет, сообщите пожалуйста.

+0

Фиксированные и плавающие IP-адреса назначаются экземплярам, ​​которые мне нужны, мне нужен Ip хоста i.e вычислительного узла, который запускает эти экземпляры. – R45c4l

+0

http://api.openstack.org/api-ref.html#identity-v2.0. сделать запрос POST на «v2.0/tokens», и он должен вернуть каталог услуг, содержащий JSON. Найдите в поле каталога услуг «тип»: «вычислите», и вы получите общедоступный URL-адрес вычислительного модуля. Экземпляры запускаются на этом общедоступном URL-адресе. (Обычно) –

0

Вы можете запросить базу данных nova и получить ip всех вычислительных узлов в таблицах compute_node. Я написал небольшую функцию в python, чтобы сделать это для одного из моих тестов.

def get_compute_nodes(parameters): 
    try: 
     password = parameters['password'] 
     db=_mysql.connect(user="root",passwd=password, db="nova") 
     query = """select host_ip from compute_nodes where deleted=0""" 
     db.query(query) 
     r=db.use_result() 
     results = r.fetch_row(maxrows=0) 
     return results 
    except Exception as exp: 
     print "Error in accessing the Nova database" 
     print exp 
+0

Привет, есть ли «официальный способ», как запрашивать базу данных? Я имею в виду, что Nova Conductor обрабатывает все запросы к базе данных, и ничто не должно идти прямо в базу данных, правильно? – RichArt

+0

Привет! Нет, к сожалению, нет «официального пути», рекомендованного OpenStack для запроса БД. Они разоблачили API, так что пользователям не нужно запрашивать БД. Вы также можете использовать OpenStack Python SDK, но в данный момент метод просто возвращает имя вычисления. Таким образом, метод должен быть изменен по мнению или вы можете написать новый, вызывающий REST API. Вы можете использовать библиотеку httplib в python для этого. Я попытаюсь написать и добавить его в качестве ответа. –

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