결론부터 말하면 아래의 github 주소를 보면 됩니다. https://github.com/sangwook/sangwook-openstack-ml2-driver

목적

OpenStack 의 Neutron 을 이해하고, ML2 Driver 를 이해하기 위함입니다. 그래서 단순히 로그만 출력하는 ML2 Driver 를 한 번 만들어 보는 것이 목적입니다.

과정

type_drivers 에 아무거나 입력하고 neutron 을 재시작하면 stevedore/extension.py 에서 extension 을 찾지 못했다는 에러가 출력됩니다. stevedore 가 무엇인지 찾아봤습니다. https://github.com/openstack/stevedore 에 있는, OpenStack 이 만든 플러그인 관리 도구입니다. 실행시간에 동적으로 extension(플러그인) 을 로딩합니다. 코드를 살짝 봤을 때는 setuptools 의 pkg_resources 를 사용하도록 구현되어 있습니다. 더 자세히는 안 보고 setuptools 방식으로 만들면 되는구나라고 생각했습니다.

다른 OpenStack 관련 플러그인들이 거의 모두 pbr 을 기반으로 패키징을 한다는 사실을 발견했습니다. pbr 이 무엇인지도 찾아봤습니다. http://docs.openstack.org/developer/pbr/ 에 있는, “Python Build Reasonableness” 의 약자입니다. OpenStack 이 만든 setuptools 를 감싸는 패키징 도구로, setup.cfg 파일에 메타데이터를 넣으면 자동으로 setuptools 에서 반복적으로 하던 일을 해 준다고 합니다. git 버전과 로그를 이용해서 이것저것을 해 주기 때문에 반드시 프로젝트가 git 저장소에 있어야 합니다.

처음에는 pbr 로 시도하다가 git 저장소가 필수라는 에러를 보고 그냥 setuptools 로 시도해 보기로 했습니다. 결과적으로 잘 동작합니다. 코드는 type_local.py 를 참고해서 작성했습니다.

p.s, 이 글은 아무도 안 읽을 게 분명해 보입니다. 저는 단순한 것을 아름답다고 생각하는데, OpenStack 은 저와는 철학이 많이 다르다는 걸 느끼는 요즘입니다.