1

FilterScheduler コンポーネントを使用して、OpenStack 用のカスタム フィルターを作成しようとしています。FilterScheduler のドキュメントはこちら: http://docs.openstack.org/developer/nova/devref/filter_scheduler.html#

現在、独自のカスタム フィルターを作成するためのドキュメントはあまりありません。実際、完全なドキュメントは次のとおりです。

If you want to create your own filter you just need to inherit from BaseHostFilter and implement one method: host_passes. This method should return True if host passes the filter. It takes host_state (describes host) and filter_properties dictionary as the parameters.

As an example, nova.conf could contain the following scheduler-related settings:

--scheduler_driver=nova.scheduler.FilterScheduler
--scheduler_available_filters=nova.scheduler.filters.standard_filters
--scheduler_available_filters=myfilter.MyFilter
--scheduler_default_filters=RamFilter,ComputeFilter,MyFilter

カスタムの「test_filter.py」を作成しました。これは、最も単純な標準フィルターである「all_hosts_filter.py」に非常に似ています。

ここにその全体があります:

from nova.scheduler import filters
from nova.openstack.common import log as logging

LOG = logging.getLogger(__name__)

class TestFilter(filters.BaseHostFilter):
    """NOOP host filter. Returns all hosts."""

    def host_passes(self, host_state, filter_properties):
        LOG.debug("COMING FROM: nova/scheduler/filters/test_filter.py")
        return True

しかし、このファイル「test_filter.py」をnova/scheduler/filtersフォルダーに入れて OpenStack を再起動すると、次の例外が発生します。

CRITICAL nova [-] Class test_filter could not be found: 'module' object has no attribute 'test_filter'

OpenStack が新しいフィルターを登録してインポートしようとしているようですが、何らかのエラーが発生しています。/etc/nova/nova.conf参考までに、これは私のファイルの関連セクションがどのように見えるかです:

scheduler_available_filters=nova.scheduler.filters.all_filters
scheduler_available_filters=nova.scheduler.filters.test_filter.TestFilter
scheduler_default_filters=TestFilter,RamFilter,ComputeFilter

======

更新: 2000 年 4 月 15 日 BST。

この質問の更新、まだ苦労しています。OpenStack IRC チャンネルで boris-42 の問題について議論した後、もう少し調査しました。

Openstack-scheduler は /usr/bin/nova-scheduler からサービスとして実行されます

次に、エラーがあります。

"Inner Exception: 'module' object has no attribute 'test_filter' from (pid=32696) import_class /usr/lib/python2.7/dist-packages/nova/utils.py:78"

これは、インストールのソース ファイルに /usr/lib/python2.7/dist-packages/nova/ フォルダーを使用していることを示唆しています。

カスタムの「test_filter.py」を入れる/usr/lib/python2.7/dist-packages/nova/scheduler/filtersと、上記のエラーが発生します。

ただし、よく調べてみると、フォルダー内の他のすべてのファイルは、 /usr/lib/python2.7/dist-packages/nova/scheduler/filters実際にはフォルダー内のファイルへのリンクであることがわかります。 /usr/share/pyshared/nova/scheduler/filters

そこで、「test_filter.py」を入れて /usr/share/pyshared/nova/scheduler/filters、元のフォルダーにシンボリックリンクを作成しました。

これにより、まったく同じフォルダーが作成されます。ファイルが存在するか、フォルダーにリンクが存在する限り /usr/lib/python2.7/dist-packages/nova/scheduler/filters 、エラーが発生します。

nova.conf ファイルは次のように更新されました。

scheduler_available_filters=nova.scheduler.filters.TestFilter
scheduler_default_filters=TestFilter
4

1 に答える 1

0

ファイルを に入れる必要はないと思います/usr/lib/python2.7/dist-packages/nova/scheduler/filters。どこにでも置くことができ、パスが にあることを確認してPYTHONPATHください。

例のメニオンとして

独自のフィルターを作成する場合は、BaseHostFilter から継承して、1 つのメソッド (host_passes) を実装するだけです。ホストがフィルターを通過した場合、このメソッドは True を返す必要があります。パラメータとして host_state (ホストを記述) と filter_properties ディクショナリを取ります。

例として、nova.conf には次のスケジューラー関連の設定を含めることができます。

......
--scheduler_available_filters=myfilter.MyFilter
.......

myfilet.MyFilterなしで言及する必要がありnova.scheduler.filtersます。

于 2013-04-18T05:35:54.130 に答える