2

オープンスタックをインストールしました。すべてのサービスが正常に実行されています。

[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

これらのサービスから、古いサービスは実行されません。

host のサービスを削除したいlocalhost.localdomain

確認しましnova-manage service --helpたが、削除のオプションはありません:(。

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

1 に答える 1

1

上記の例を見ると、ホスト名が同じに設定された 2 つのホストがあるため、重複していると思われます。この場合、次のコード/回答はあまり役に立ちません。そのセットアップ全体には、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 ワーカー エージェント プロセスによってサービス リストが読み込まれるため、再び「表示」されることを期待してください。

于 2012-11-10T22:53:27.487 に答える