Nova Essex のソースコードアーカイブを展開すると、下記のようなディレクトリ構成が現れます。
nova-2012.1/
Authors
babel.cfg
HACKING.rst
LICENSE
MANIFEST.in
openstack-common.conf
PKG-INFO
pylintrc
README.rst
run_tests.sh
setup.cfg
setup.py
tox
bin/ Novaの各種デーモン/コマンド用
contrib/ 雑多。boto_v6 や Red Hat 用パッチ
doc/ ドキュメント用
etc/ 設定ファイル用
nova/ Nova 本体 Python コード
nova.egg-info/ Nova の Egg パッケージ用
plugins/ プラグイン用
smoketests/ 結合テスト用
tools/ ツール類用
ここで少し nova-scheduler のコード(nova-2012.1/bin/nova-scheduler)を眺めてみましょう
# 冒頭コメント省略
"""Starter script for Nova Scheduler."""
import eventlet
eventlet.monkey_patch()
import gettext
import os
import sys
# If ../nova/__init__.py exists, add ../ to Python search path, so that
# it will override what happens to be installed in /usr/(local/)lib/python...
possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
os.pardir,
os.pardir))
if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
sys.path.insert(0, possible_topdir)
gettext.install('nova', unicode=1)
from nova import flags
from nova import log as logging
from nova import service
from nova import utils
if __name__ == '__main__':
utils.default_flagfile()
flags.FLAGS(sys.argv)
logging.setup()
utils.monkey_patch()
server = service.Service.create(binary='nova-scheduler')
service.serve(server)
service.wait()
簡素ですね。from nova import ... で4つのモジュールをインポートして、必要最低限のセットアップをしているだけです。
では、本体のコードはどこにあるのでしょうか?これらは nova-2012.1/nova/ 配下にありますので、こちらを覗いてみましょう。
nova-2012.1
nova/
__init__.py
block_device.py
context.py コンテキスト(リクエスト元情報)
crypt.py
exception.py Nova 内の例外定義
flags.py Nova 共通の設定項目管理
local.py TLS?
log.py Nova 共通のログ機構
manager.py
policy.py
quota.py テナントリソース定義
service.py Nova サービス基本ルーチン
test.py
utils.py 各種ユーティリティ(コマンド実行等)
version.py
wsgi.py WSGI 関連
auth/ 認証周り(主に nova-api 用)
CA/ 認証用シェルスクリプト、CA鍵置き場
cloudpipe/ VPN エンドポイント用
common/
compat/ 旧バージョンとの互換性用
db/ DB 用(いわゆるモデル)
image/ VM イメージ操作用
ipv6/ IPv6 関連コード
locale/ メッセージカタログ(i18n)
notifier/ Nova 共通の通知機構
openstack/ OpenStack 共通(現時点では設定ファイルライブラリのみ)
rootwrap/ root 権限実行コマンドを安全に実行するためのラッパー
rpc/ Nova コンポーネント間通信(AMQP等)
testing/ ?
tests/ ユニットテスト用(run_tests.sh から実行)
virt/ nova-compute のハイパーバイザ別ライブラリ
vnc/ VNC コンソール関連 ※現時点ではXVPのみ
api/ nova-api 本体
cert/ nova-cert 本体
compute/ nova-compute 本体
console/ nova-console 本体
consoleauth/ nova-consoleauth 本体
network/ nova-network 本体
objectstore/ nova-objectstore 本体(S3 互換)
scheduler/ nova-scheduler 本体
volume/ nova-volume 本体
先程 nova-api が import していた flags, log, service, utils がありますね。 特に service.py はサービスプロセスとしての基礎的な処理が含まれています。