バージョン管理された人

subversionで管理されてます

NetBox の デフォルトで所属するグループ

NetBox はデフォルトで所属するグループを REMOTE_AUTH_DEFAULT_GROUPS で指定できる

netboxlabs.com

NetBox を直接 VM で動かしている場合、設定ファイルとなる Python のリストを設定すれば動くのだが、 Docker 版 NetBox だと指定方法が少し違う。 指定方法はどこにも書いてなくてコード読まないとわからない1。 コード読むと次のように _AS_LIST と指定してリスト形式で読み込むことがわかる。

REMOTE_AUTH_DEFAULT_GROUPS = _environ_get_and_map('REMOTE_AUTH_DEFAULT_GROUPS', '', _AS_LIST)

github.com

では _AS_LIST は環境設定値をどのように読み込んでいるか。 これは _environ_get_and_map 関数の中を見てもすぐにはわからない。

def _environ_get_and_map(variable_name: str, default: str | None = None, map_fn: Callable[[str], Any | None] = None) -> Any | None:
    env_value = environ.get(variable_name, default)

    if env_value == None:
        return env_value

    if not map_fn:
        return env_value
    
    return map_fn(env_value)

github.com

実際に重要なのはこの関数の第3引数である map_fn で、この定義は実はトップ変数で定義している。

_AS_BOOL = lambda value : value.lower() == 'true'
_AS_INT = lambda value : int(value)
_AS_LIST = lambda value : list(filter(None, value.split(' ')))

github.com

つまり、半角スペースを区切り文字としている。 そのため、複数グループを追加するよう Docker 版 NetBox に環境変数で指定する場合は次のようにする。

# デフォルトで group1 と group2 に新規ユーザーを追加する
REMOTE_AUTH_DEFAULT_GROUPS="group1 group2"

注意点として単純に半角スペースで区切っているだけなので、たとえば group 1 のようにスペースが混じると駄目。 本当に素朴に半角スペースで区切っているだけなので、よくあるバックスラッシュ (\) によるエスケープとか効かないことに注意。

まとめ

  • Docker 版 NetBox で複数個の値を設定できる環境変数は半角スペース区切りで指定する
  • エスケープとかないので、グループの名前に空白とか含めない方がいい
    • そもそも空白が含めないのかもしれないが

  1. というかそもそも Docker 版 NetBox の設定値はコード読まないとわからないことが多い。