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