Openstack 如何借助nova管理命令删除重复服务?
我安装了openstack。所有服务都已成功运行Openstack 如何借助nova管理命令删除重复服务?,openstack,openstack-nova,Openstack,Openstack Nova,我安装了openstack。所有服务都已成功运行 [root@test ~]# nova-manage service list Binary Host Zone Status State Updated_At nova-cert localhost.localdomain nova enabled :-)
[root@test ~]# nova-manage service list
Binary Host Zone Status State Updated_At
nova-cert localhost.localdomain nova enabled :-) 2012-11-06 04:25:36.396817
nova-scheduler localhost.localdomain nova enabled :-) 2012-11-06 04:25:41.735192
nova-network compute nova enabled :-) 2012-11-06 04:25:42.109157
nova-compute compute nova enabled :-) 2012-11-06 04:25:43.240902
之后,我将/etc/sysconfig/network
中的HOSTNAME
更改为myhost.mydomain
。然后重新启动服务。
现在我得到了服务的重复条目
[root@test ~]# nova-manage service list
Binary Host Zone Status State Updated_At
nova-cert localhost.localdomain nova enabled XXX 2012-11-06 04:25:36.396817
nova-cert myhost.mydomain nova enabled :-) 2012-11-06 05:25:36.396817
nova-scheduler localhost.localdomain nova enabled XXX 2012-11-06 04:25:41.735192
nova-scheduler myhost.mydomain nova enabled :-) 2012-11-06 05:25:41.735192
nova-network compute nova enabled :-) 2012-11-06 04:25:42.109157
nova-compute compute nova enabled :-) 2012-11-06 04:25:43.240902
从这些服务中,旧的服务没有运行
我想删除主机localhost.localdomain
的服务
我检查了nova管理服务--help,但没有删除选项:(
查看上面的示例,我怀疑您看到的是重复的,因为您有两台主机,它们的主机名设置相同。如果是这种情况,下面的代码/答案可能不会对您有太大帮助。在整个设置中,有一个隐式的假设,即nova worker进程运行的节点的主机名是唯一的 在最新的分支中,没有为此显式启用命令,但是下面有API,可以执行您想要执行的操作。下面是一段代码(未测试!),它应该可以执行您想要执行的操作;或者,如果您感兴趣,至少可以指向相关的API
from nova import context
from nova import db
hostname = 'some_hostname'
service_name = 'nova_service_you_want_to_destroy'
ctxt = context.get_admin_context()
service = db.service_get_by_args(ctxt, hostname, service_name)
#... pick one of these services ...
#... assign it to 'service'
db.service_destroy(ctxt, service[id])
注意:这将从数据库中删除该服务,如果该服务不存在(或出现其他错误),则会引发异常。如果该服务正在运行,则预期它将再次“显示”,因为服务列表由报告中的各种nova worker Agent进程填充
from nova import context
from nova import db
hostname = 'some_hostname'
service_name = 'nova_service_you_want_to_destroy'
ctxt = context.get_admin_context()
service = db.service_get_by_args(ctxt, hostname, service_name)
#... pick one of these services ...
#... assign it to 'service'
db.service_destroy(ctxt, service[id])