OpenStack 소스레벨 접근하기
[inatall script]
[API 사용하기]
# dev Doc
# SDK
- jcloud : 클라우드 관련하여 거의 모든 소스를 커버하고있음
> github에 올라간 잘 짜여진 예제 소스들 참고하자!
- pkgcloud
[contribute]
- openstack.org에서 회원으로 가입 한 후 개발자커뮤니티와 연동하여 개발
- 슬쉐에 공유된 부대표님 ppt보고 해보자
[writings]
- 개발자가 알아야할 가상화 정보를 많이... 가이드? 해주고있다..
-----------------------------------------------------------------------------------------
1. keystone
$ keystone user-list
$ keystone --debug user-list
: curl부분이 실제 실행되는 부분
root@ubjuno-contnet:~# which keystone
/usr/bin/keystone
$ vi /usr/bin/keystone
* 다른곳의 소스를 imporing만 하고있음.
그부분을 찾자!
root@ubjuno-contnet:~# ps -ef | grep keystone
keystone 2471 1 3 19:42 ? 00:01:03 /usr/bin/python /usr/bin/keystone-all
keystone 3849 2471 0 19:43 ? 00:00:00 /usr/bin/python /usr/bin/keystone-all
keystone 3850 2471 0 19:43 ? 00:00:00 /usr/bin/python /usr/bin/keystone-all
keystone 3851 2471 0 19:43 ? 00:00:00 /usr/bin/python /usr/bin/keystone-all
keystone 3852 2471 0 19:43 ? 00:00:00 /usr/bin/python /usr/bin/keystone-all
root 9110 8463 0 20:17 pts/1 00:00:00 grep --color=auto keystone
root@ubjuno-contnet:~#
root@ubjuno-contnet:~# which keystone-all
/usr/bin/keystone-all
root@ubjuno-contnet:~#
root@ubjuno-contnet:~# vi /usr/bin/keystone-
keystone-all keystone-manage
root@ubjuno-contnet:~# vi /usr/bin/keystone-all
* main을 찾아요. main이 구현되어있음.
* wsgi, 데몬으로 서비스가 http프로토콜의 경우 웹서버를 띄우지 않아도 웹서버에 올려준거처럼 되어있음
(일반적으로 wsgi는 웹서버의 기능을 떼어 위의 부가서비스들을 따로 운영하게 한다. 미니멀을 지향?, 해당 부가서비스들은 쓰레드로 동작되어 콜되어지는 형태)
* monkeypatch
- use_eventlet()에 넣어서 돌리면 스레드를 돌려서(green이라는 스레드 풀같은걸로) wsgi로 올려서 OpenStack상의 데몬을 띄운다.
=>임베디드 어쩌고저쩌고?
* 웹에서 쓰레드가 필요한 이유...? 웹서비스들을 스레드로 돌려야 가벼움(자원을 공유하므로)
* admin_workers / public_workers를 구분하여
server로 ㄱㄱ
root@ubjuno-contnet:~# vi /usr/lib/python2.7/dist-packages/keystone/openstack/common/service.py
- python 2,3버전 대는 완전 다름.
- 소스단에서의 가상화라는 것을 제공하는데(3버전), 가상화하여 묶어서 소스영향력을 줄인다.
* 파이썬 라이브러리들은 지속가능한 걸 선호해야함(너무 금방 사라져버리니까.. 안정화된 걸 골라써야햇)
* tree명령어로 keystone 구조보기
$ tree -L 1 /usr/lib/python2.7/dist-packages/keystone
* 파이썬도 컴파일을 하면 중간코드 형태로 파일이 떨어진다. (.pyc)
*
root@ubjuno-contnet:~# tree -L 1 /usr/lib/python2.7/dist-packages/keystone/auth/
/usr/lib/python2.7/dist-packages/keystone/auth/
├── controllers.py
├── controllers.pyc
├── core.py
├── core.pyc
├── __init__.py
├── __init__.pyc
├── plugins
├── routers.py
└── routers.pyc
1 directory, 8 files
root@ubjuno-contnet:~# tree -L 1 /usr/lib/python2.7/dist-packages/keystone/assignment/
/usr/lib/python2.7/dist-packages/keystone/assignment/
├── backends
├── controllers.py
├── controllers.pyc
├── core.py
├── core.pyc
├── __init__.py
├── __init__.pyc
├── routers.py
├── routers.pyc
├── schema.py
└── schema.pyc
1 directory, 10 files
root@ubjuno-contnet:~# tree -L 1 /usr/lib/python2.7/dist-packages/keystone/assignment/backends/
/usr/lib/python2.7/dist-packages/keystone/assignment/backends/
├── __init__.py
├── __init__.pyc
├── kvs.py
├── kvs.pyc
├── ldap.py
├── ldap.pyc
├── sql.py
└── sql.pyc
0 directories, 8 files
* identity controllers : 메소드와 url을 매핑해주는 로직
- v2 deprecated...
- v3_to_v2() : 현재 버전 2를 버리지 못하고 해당 함수등을 사용해서 v3로 그냥 맵핑을 시켜주는 형태로 가고있음. 나중에 v2는 한번에 버릴 수 있겠지..
root@ubjuno-contnet:~# vi /usr/lib/python2.7/dist-packages/keystone/assignment/backends/sql.py
* sql 만들기
* create table...
=> DDL, SQL RPM .. 왜 이부분에 프로그래머블하게 SQL을 만들어서 쿼리하는 식으로 가는건가?
-> 결론... sql을 몰라도 (여러 DB를 다룰때..) 정책적으로 SQL 생성이 가능하도록...
# ERD
여기까지 MVC!
-------------------------------------------------------------------------
root@ubjuno-contnet:~# vi /usr/lib/python2.7/dist-packages/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py
: ovs를 구동시키는 소스들이 다 들어있네
* 전통적인 아주 예전 스타일의 소스코드 스타일인 이유....
- 스레드 풀을 받아오기 위해 일수있어,
- 하지만 인프라에대한 소스인데 어쩜 이럴 수 있지?
root@ubjuno-contnet:~# vi /usr/lib/python2.7/dist-packages/neutron/agent/dhcp_agent.py
* dhcp agent
- 런처(server)처럼 떠있다가 dnsmasq를 제어하는 형식
할거 많다...............
------------------------------------------------------------------
453 tree -L 1 /usr/lib/python2.7/dist-packages/
454 tree -L 1 /usr/lib/python2.7/dist-packages/keystone
455 tree -L 1 /usr/lib/python2.7/dist-packages/keystone/auth/
456 tree -L 1 /usr/lib/python2.7/dist-packages/keystone/middleware/
457 tree -L 1 /usr/lib/python2.7/dist-packages/keystone/assignment/
458* tree -L 1 /usr/lib/python2.7/dist-packages/keystone/assignment/b
459 tree -L 1 /usr/lib/python2.7/dist-packages/
454 tree -L 1 /usr/lib/python2.7/dist-packages/keystone
455 tree -L 1 /usr/lib/python2.7/dist-packages/keystone/auth/
456 tree -L 1 /usr/lib/python2.7/dist-packages/keystone/middleware/
457 tree -L 1 /usr/lib/python2.7/dist-packages/keystone/assignment/
458* tree -L 1 /usr/lib/python2.7/dist-packages/keystone/assignment/b
459 tree -L 1 /usr/lib/python2.7/dist-packages/
------------------------------------------------------------------
[이 외...]
oslo
분산처리
하둡
디자인패턴
파이썬 <-> R
'Virtualization + Cloud > OpenStack' 카테고리의 다른 글
[OpenStack] IceHouse 설치 2 (with Neutron, multi node) - 2014.12 (0) | 2015.05.08 |
---|---|
[OpenStack] IceHouse 설치 1 (with Neutron, multi node) - 2014.12 (0) | 2015.05.08 |
[OpenStack] 인스턴스 테스트 (0) | 2015.04.22 |
[Glnace] Cloudbase-init을 사용하여 Windows 인스턴스 생성 (0) | 2015.04.21 |
[OpenStack] 정기세미나 참석 (2015.01) (0) | 2015.04.21 |