2015-08-04 4 views
0

Я хотел бы расширить командную строку команды nova, добавив больше столбцов с данными из базы данных, однако я не вижу, как исходный запрос от shell.py (методом «do_host_describe») перемещается в базу данных. Я искал соответствующую документацию, а также использовал PDB для выполнения кода. PDB показал мне, как запросы создаются слоем для слоя, но я не могу понять, куда он отправлен, и кто его ловит (кто также в конечном итоге отправит правильные данные обратно). Мои исследования показывают, служба новоподобных апи должны быть вовлечены, и что путь должен бытьOpenstack: Как продлить команду nova host-describe?

Командная строка -> новоподобных апи сервис -> База данных (и обратно)

Я благодарен за любые указатели с момента Я в недоумении, как продолжать самостоятельно!

Вкратце: как запрос команды «nova host-describe» достигает базы данных? Где мне понадобится изменить код, чтобы позволить отображаемой таблице включать больше данных/столбцов?

В настоящее время я использую выпуск Icehouse.

ответ

1

Глядя на источнике для клиента командной строки, мы можем видеть в novaclient/v2/shell.py, что команда host-describe просто отображается информацией, возвращаемой cs.hosts.get(...), где cs является результатом вызова novaclient.client.Client.

В get метод приводит к вызову к /os-host/ REST конечной точки, которые вы можете увидеть, запустив nova с --debug:

DEBUG (session:195) REQ: curl -g -i -X GET http://openstack.local:8774/v2/5b358dbdb37841c8b119834c94a0b943/os-hosts/openstack.local -H "User-Agent: python-novaclient" -H "Accept: application/json" -H "X-Auth-Token: {SHA1}766b819cdf615d221818c388c666d54415af8d16" 
INFO (connectionpool:203) Starting new HTTP connection (1): openstack.local 
DEBUG (connectionpool:383) "GET /v2/5b358dbdb37841c8b119834c94a0b943/os-hosts/openstack.local HTTP/1.1" 200 477 
DEBUG (session:224) RESP: [200] date: Tue, 04 Aug 2015 14:20:50 GMT connection: keep-alive content-type: application/json content-length: 477 x-compute-request-id: req-9d421331-a4cd-4db4-833d-967224dd24db 
RESP BODY: {"host": [{"resource": {"project": "(total)", "memory_mb": 7794, "host": "openstack.local", "cpu": 1, "disk_gb": 78}}, {"resource": {"project": "(used_now)", "memory_mb": 1536, "host": "openstack.local", "cpu": 1, "disk_gb": 10}}, {"resource": {"project": "(used_max)", "memory_mb": 1024, "host": "openstack.local", "cpu": 1, "disk_gb": 10}}, {"resource": {"project": "f4e7e158cb154de5ab503bd7096b8981", "memory_mb": 1024, "host": "openstack.local", "cpu": 1, "disk_gb": 10}}]} 

+-----------------+----------------------------------+-----+-----------+---------+ 
| HOST   | PROJECT       | cpu | memory_mb | disk_gb | 
+-----------------+----------------------------------+-----+-----------+---------+ 
| openstack.local | (total)       | 1 | 7794  | 78  | 
| openstack.local | (used_now)      | 1 | 1536  | 10  | 
| openstack.local | (used_max)      | 1 | 1024  | 10  | 
| openstack.local | f4e7e158cb154de5ab503bd7096b8981 | 1 | 1024  | 10  | 
+-----------------+----------------------------------+-----+-----------+---------+ 

Глядя на источник nova, мы можем видеть, что для вычислений API v2 , расширение os-hosts предоставляется nova/api/openstack/compute/contrib/hosts.py. Похоже, что метод show генерирует данные для host-describe, так что это, вероятно, то, где вы внесете свои изменения.

Доступ к базе данных в openstack обрабатывается через sqlalchemy. В общем, это означает, что доступ к полям базы данных осуществляется путем доступа к атрибутам объектов Python. Существующий код должен содержать разумные примеры.

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