Openstack 如何借助nova管理命令删除重复服务?

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 :-)

我安装了openstack。所有服务都已成功运行

[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])