2013-04-12 2 views
1

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 

답변

0

난 당신이 /usr/lib/python2.7/dist-packages/nova/scheduler/filters에 파일을 넣어야 할 것 같아요 다음과 같이

nova.conf 파일이 업데이트되었습니다. 어디든 넣을 수 있고 경로가 PYTHONPATH에 있는지 확인할 수 있습니다.host_passes :

As metnion in example

방금 ​​BaseHostFilter로부터 상속 한 메소드를 구현해야하는 자신 만의 필터를 만들려면

. 호스트가 필터를 통과하면이 메서드는 True를 반환해야합니다. host_state (호스트 설명) 및 filter_properties 사전을 매개 변수로 사용합니다.

는 예를 들어, nova.conf는 다음 스케줄러 관련 설정을 포함 할 수있다 : 당신은 nova.scheduler.filters없이 myfilet.MyFilter을 언급해야

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

.

관련 문제