Openstack:如何扩展 nova host-describe 命令?
Openstack: How do I extend the nova host-describe command?
我想通过使用数据库中的数据添加更多列来扩展 nova 命令 host-describe,但是我看不到来自 shell.py 的初始请求(通过方法 "do_host_describe" ) 传送到数据库。我搜索了相关文档,还使用了 PDB 来跟踪代码。 PDB 向我展示了请求是如何逐层构建的,但我无法弄清楚它被发送到哪里,以及谁捕获了它(谁最终也将正确的数据发回)。我的调查表明应该涉及 nova-api 服务,路径应该是
命令行 -> nova-api 服务 -> 数据库(然后再返回)
感谢您的指点,因为我不知道如何继续自己的工作!
简而言之:来自 "nova host-describe" 命令的请求如何到达数据库?我需要在哪里修改代码以允许显示的 table 包含更多 data/columns?
我目前正在使用 Icehouse 版本。
查看命令行客户端的源代码,我们可以在 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 对象上的属性来完成的。现有代码应该提供合理的示例。
我想通过使用数据库中的数据添加更多列来扩展 nova 命令 host-describe,但是我看不到来自 shell.py 的初始请求(通过方法 "do_host_describe" ) 传送到数据库。我搜索了相关文档,还使用了 PDB 来跟踪代码。 PDB 向我展示了请求是如何逐层构建的,但我无法弄清楚它被发送到哪里,以及谁捕获了它(谁最终也将正确的数据发回)。我的调查表明应该涉及 nova-api 服务,路径应该是
命令行 -> nova-api 服务 -> 数据库(然后再返回)
感谢您的指点,因为我不知道如何继续自己的工作!
简而言之:来自 "nova host-describe" 命令的请求如何到达数据库?我需要在哪里修改代码以允许显示的 table 包含更多 data/columns?
我目前正在使用 Icehouse 版本。
查看命令行客户端的源代码,我们可以在 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 对象上的属性来完成的。现有代码应该提供合理的示例。