almaops.vars
非推奨警告
このAnsibleロールはコレクション almaops.common
に置き換えられました。
almaops.vars
このロールは特定のディレクトリからの変数を含んでいます。
アイデア
大規模プロジェクトの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
同じ環境のホストを1つのグループ(例えば project-a-env01
と呼ぶ)に入れ、group_vars
の適切なファイルに変数をロードするディレクトリを指定します(以下の例のように)。
このアプローチの利点は、含まれる変数が常に最大の優先順位を持つこと(--extra-vars
は除外)、そのため環境パラメータをどこで探せば良いのか常に理解できることです。
ロール変数
vars_root: 環境を格納するディレクトリ
vars_group: 環境変数のディレクトリ、このパスはvars_rootに対して相対的です
vars_source: 指定された場合、このディレクトリからのみ変数をロードします
ロールのデフォルト
vars_source: "{{ vars_root }}/{{ vars_group }}"
例のプレイブック
このスニペットは、playbook_dir/vars/devからすべての*.yml
ファイルを含めます:
- hosts: dev環境にいるすべてのホストを含むグループ
roles:
- role: almaops.vars
vars_root: "{{ playbook_dir }}/vars"
vars_group: "dev"
このスニペットは、/home/user/my-envからすべての*.yml
ファイルを含めます:
- hosts: dev環境にいるすべてのホストを含むグループ
roles:
- role: almaops.vars
vars_source: "/home/user/my-env"
このスニペットは、playbook_dir/creds/dev、playbook_dir/env-vars/dev、playbook_dir/common-vars/my-dev-envからすべての*.yml
ファイルを含めます:
--- playbook.yml ---
- hosts: dev環境にいるすべてのホストを含むグループ
roles:
# 認証情報をロード
- role: almaops.vars
vars_root: "{{ playbook_dir }}/creds"
vars_group: "{{ credentials_library }}"
# この環境グループ(類似環境のグループ)特有の変数をロード
- role: almaops.vars
vars_root: "{{ playbook_dir }}/common-vars"
vars_group: "{{ env_group_name }}"
# 環境特有の変数をロード
- role: almaops.vars
vars_root: "{{ playbook_dir }}/env-vars"
vars_group: "{{ env_name }}"
--- group_vars/group-containing-all-hosts-for-dev-env.yml ---
credentials_library: "dev"
env_group_name: "dev"
env_name: "my-dev-env"
ライセンス
MIT