如何借助nova-manage命令删除重复服务?

时间:2012-11-06 05:06:30

标签: openstack openstack-nova

我安装了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

之后,我将HOSTNAME中的/etc/sysconfig/network更改为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-manage service --help,但没有删除选项:(。

[root@test ~]# nova-manage service --help
--help does not match any options:
        describe_resource
        disable
        enable
        list

1 个答案:

答案 0 :(得分:1)

看看上面的示例,我怀疑你看到了重复,因为你有两个主机设置相同的主机。如果是这种情况,以下代码/答案可能不会帮助您太多。在整个设置中有一个隐含的假设,即nova工作进程运行的节点的主机名将是唯一的。

在最新的分支中,没有为此明确启用的命令,但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工作人员代理进程填充。