FilterScheduler 구성 요소를 사용하여 OpenStack 용 사용자 정의 필터를 만들려고합니다. FilterScheduler에 대한 문서는 다음과 같습니다. http://docs.openstack.org/developer/nova/devref/filter_scheduler.html#OpenStack에 사용자 정의 필터를 추가 할 때 ClassNotFound 예외가 발생했습니다.
이제 사용자 지정 필터를 만드는 방법에 대한 문서 작성 방법은 그리 많지 않습니다. 가리키고, 전체 문서는 다음과 같습니다
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
하지만 난 nova/scheduler/filters
폴더에이 파일 "test_filter.py"를 넣어 나는 다음과 같은 예외가 얻을 OpenStack은 다시 시작할 때 :
CRITICAL nova [-] Class test_filter could not be found: 'module' object has no attribute 'test_filter'
을
OpenStack이 등록 중이며 새 필터를 가져 오는 중으로 보이지만 약간의 오류가 발생했습니다.
scheduler_available_filters=nova.scheduler.filters.all_filters
scheduler_available_filters=nova.scheduler.filters.test_filter.TestFilter
scheduler_default_filters=TestFilter,RamFilter,ComputeFilter
======
UPDATE : 2000년 4월 15일 시간 BST 참고로,이 내 /etc/nova/nova.conf
파일의 releveant 섹션처럼 보이는 것입니다.
이 질문에 대한 업데이트는 여전히 어려움을 겪고 있습니다. OpenStack은 IRC 채널에 보리스-42와 함께 문제를 논의 후에 우리는 좀 더 조사 하였다 :
OpenStack은 스케쥴러가 그런 다음에 오류가는/usr/빈/노바 - 스케줄러
에서 서비스로 실행됩니다 : 이 설치의 소스 파일에 대한 /usr/lib/python2.7/dist-packages/nova/ 폴더를 사용하고 제안
"Inner Exception: 'module' object has no attribute 'test_filter' from (pid=32696) import_class /usr/lib/python2.7/dist-packages/nova/utils.py:78"
.
내 맞춤 "test_filter.py"를 /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
폴더에있는 다른 모든 파일이 나타납니다 원래 폴더에.
이렇게하면 정확히 같은 폴더가됩니다. 파일이 있거나 링크가 /usr/lib/python2.7/dist-packages/nova/scheduler/filters
폴더에 있으면 오류가 발생합니다.
scheduler_available_filters=nova.scheduler.filters.TestFilter
scheduler_default_filters=TestFilter