Nova ソースコード構成

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/ ディレクトリ

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 はサービスプロセスとしての基礎的な処理が含まれています。

Table Of Contents

Previous topic

Nova ソースコードの歩き方

Next topic

service.py の迷宮

This Page