freehck.var_loader
freehck.var_loader
このロールは特定のディレクトリから変数を読み込みます。
アイデア
大規模なプロジェクトのCI/CDを開発している際に、環境変数を各環境に特化したディレクトリに保存し、それを読み込むのが非常に便利であることがわかりました。その後、認証情報と共通変数を別のディレクトリに分けると便利だと感じました。ディレクトリの構成は次のようになります:
.
├── common-vars
│ ├── project-A
│ │ └── dev
│ └── project-B
│ └── dev
├── credentials
│ ├── project-A
│ │ ├── dev
│ │ └── prod
│ └── project-B
│ ├── dev
│ └── prod
└── env-vars
├── project-A-env01
├── project-A-env02
├── project-A-prod
├── project-B-env01
├── project-B-env02
└── project-B-prod
同じ環境のホストを一つのグループ(例えば project-a-env01
と呼びます)にまとめ、group_vars
の適切なファイルで変数を読み込むディレクトリを指定します(下記の例のように)。
このアプローチの利点は、含まれている変数が常に最大の優先順位を持つため(--extra-vars
を除く)、環境パラメータをどこで探せばよいかが常に理解できることです。
ロール変数
var_loader_root: 環境を格納するディレクトリ
var_loader_group_name: 環境変数のディレクトリ、このパスは var_loader_root に対して相対的です
var_loader_src: 指定された場合、このディレクトリだけから変数が読み込まれます
ロールのデフォルト
var_loader_src: "{{ var_loader_root }}/{{ var_loader_group_name }}"
例プレイブック
このスニペットは、playbook_dir/vars/dev からすべての *.yml
ファイルを読み込みます:
- hosts: dev環境の全ホストを含むグループ
roles:
- role: freehck.var_loader
var_loader_root: "{{ playbook_dir }}/vars"
var_loader_group_name: "dev"
このスニペットは、/home/user/my-env からすべての *.yml
ファイルを読み込みます:
- hosts: dev環境の全ホストを含むグループ
roles:
- role: freehck.var_loader
var_loader_src: "/home/user/my-env"
このスニペットは、次の全ての *.yml
ファイルを読み込みます: playbook_dir/creds/dev、playbook_dir/env-vars/dev、playbook_dir/common-vars/my-dev-env
--- playbook.yml ---
- hosts: dev環境の全ホストを含むグループ
roles:
# 認証情報を読み込む
- role: freehck.var_loader
var_loader_root: "{{ playbook_dir }}/creds"
var_loader_group_name: "{{ credentials_library }}"
# この環境グループ(類似の環境のグループ)に特化した変数を読み込む
- role: freehck.var_loader
var_loader_root: "{{ playbook_dir }}/common-vars"
var_loader_group_name: "{{ env_group_name }}"
# 環境特有の変数を読み込む
- role: freehck.var_loader
var_loader_root: "{{ playbook_dir }}/env-vars"
var_loader_group_name: "{{ env_name }}"
--- group_vars/dev環境の全ホストを含むグループ.yml ---
credentials_library: "dev"
env_group_name: "dev"
env_name: "my-dev-env"
ライセンス
MIT
著者情報
Dmitrii Kashin, freehck@freehck.ru
ansible-galaxy install freehck.var_loader