LoginSignup
6
4

More than 5 years have passed since last update.

oslo.config 設定ファイルの検索パス

Last updated at Posted at 2015-03-04

OpenStackで設定ファイル周りを簡単に操作するために開発、利用されているoslo.config。

参照する設定ファイルをcliのオプションで指定しなかった場合、規定のフォルダから、決められたファイル名で設定ファイルを検索してくれる。

フォルダはまず以下の順番で参照される。(https://github.com/openstack/oslo.config/blob/2.5.0/oslo_config/cfg.py#L498 _get_config_dirs関数)

  1. ~/.${project}/
  2. ~/
  3. /etc/${project}/
  4. /etc/

${project}は初期化時に指定した値。
以下のように指定していた場合、~/.foo/等から検索される。

from oslo.config import cfg

def init_oslo_config():
    cfg.CONF(project='foo')

ファイル名は以下のものか検索される。(https://github.com/openstack/oslo.config/blob/2.5.0/oslo_config/cfg.py#L542 find_config_files関数)

  • ${project}.conf
  • ${prog}.conf

${project}は上と同じで、${prog}はコレもまた、初期化時に指定するもの。

from oslo.config import cfg

def init_oslo_config():
    cfg.CONF(project='foo', prog='bar')

ただし、初期化時にprogを指定していなかった場合はプロセス名( os.path.basename(sys.argv[0]))が${prog}となる。

参照のルールは、

  • ファイルは両方参照する
  • 検索するファイル名で上記フォルダを順番にさがす。

例えば、${project}foo, ${prog}barで以下のようにファイルが存在する場合、設定ファイルとして参照されるのは/etc/foo/foo.conf, ~/bar.confになる。

  • ~/bar.conf
  • /etc/foo/foo.conf
  • /etc/foo/bar.conf
  • /etc/foo.conf
  • /etc/bar.conf

この挙動は以下のようにして確認が出来るので、想定外の設定ファイルが参照されている場合にやってみると良い。

from oslo.config import cfg
print cfg.find_config_files('foo', 'bar')

参照された設定ファイルに同じオプションが指定されている場合、${prog}が優先される。読み込まれる設定ファイルは後勝ちであり、${project}, ${prog}の順に参照されるため。

ただし、これらのファイルはプロセス起動時のパラメータに--config-fileを一つでも指定していると使われない。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4