各サービスのファイル構成はどのようになっているのでしょうか? サンプルとして、nova-volume のソースコード一覧を見てみましょう。
nova-2012.1
nova/
volume/
__init__.py
api.py クライアントコード(別コンポーネント用)
manager.py サーバコード(nova-volume)
driver.py
iscsi.py
netapp.py
san.py
volume_types.py
xensm.py
nexenta/
ここで注目したいのは、api.py と manager.py です。
ファイル名 | 説明 |
api.py | クライアント用コード。あるサービスが別のサービスに指示を出す為の メソッド群(API)が含まれている。 |
manager.py | サーバ用コード。RPC で受けたリクエストは manager.py 上のパブリッ クメソッドにマッピングされて実行される。 |
基本的に nova-api 以外の nova の各サービスは api.py と manager.py が存在します。各サービスは関連する(指示を出す)別サービスの api.py を import し、自身の処理の中で別サービスの API メソッドをコールします。これにより、あるサービスは別サービスが管理する DB やリソースに関して直接記述する必要がなく、各サービスがそれぞれ別サービスの API を記述する無駄を避ける事ができます。
nova-api は例外で、REST クライアントからのリクエストを受け取り、他サービスに指示を出すのが基本なので、nova-api を REST で呼び出すための api.py が存在しません。