Openstack:如何扩展nova host-describe命令?

时间:2015-08-04 14:00:25

标签: openstack openstack-nova

我想通过添加更多列来包含来自数据库的数据来扩展nova命令host-describe,但是我无法看到来自shell.py的初始请求(通过方法" do_host_describe")前往数据库。我搜索了相关文档,并在代码中使用了PDB。 PDB向我展示了如何逐层构建请求,但是我无法确定它的发送位置以及捕获它的人(最终还会发回正确的数据)。我的调查表明应该涉及nova-api服务,而且路径应该是

命令行 - > nova-api服务 - >数据库(然后再回来)

我很感激任何指示,因为我不知道如何继续自己!

简而言之:来自" nova host-describe"的请求如何?命令到达数据库?我需要在哪里修改代码以允许显示的表包含更多数据/列?

我目前正在使用Icehouse发布。

1 个答案:

答案 0 :(得分: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 v2os-hosts扩展名由nova/api/openstack/compute/contrib/hosts.py提供。看起来好像show方法会为host-describe生成数据,因此这可能是您进行更改的地方。

openstack中的数据库访问通过sqlalchemy处理。通常,这意味着访问数据库字段是通过访问Python对象上的属性来完成的。现有代码应提供合理的示例。