ansibleからwhenを消す。またはwhenのないrole切り替えについて
when
例えばOSによって処理を分けたいとき、以下のように条件式で分岐する。
- include: hoge.yml
when:
- ansible_distribution == "CentOS"
※ansible_distributionで構成管理対象OS名が取得可能
条件分岐のないrole切り替え
ansibleのwhenは、プログラミングにおけるif文なので増えるほど複雑さが増します。
個人的にはwhenは出来るだけ書きたくないなぁと思ったので以下のような書き方を考えてみました。
- hosts: all
tasks:
- name: update tasks
include_role:
name: "{{ ansible_distribution }}"
最初はinclude_roleではなく、roleで実現しようと思いましたが、そこではansible_distribution変数が読めなかったのでこのように実現しました。
ansible変数のスコープがまだ良くわかっておりません。
ちなみにroles配下は以下のようになっており、各種ディストリビューションに合わせたディレクトリを切っています。
roles
├── CentOS
│ └── tasks
│ └── main.yaml
└── Ubuntu
└── tasks
└── main.yaml
メリット
- 他のディストリビューションを後から追加する場合も
playbooks/main.yaml
を変更する必要はありません。roles
配下に新たなディレクトリを切ればOK- 保守性の高いPlaybookとなります
その他
調べててもこういう書き方があんまり出回っているように見えなかったので、実用性があるのか?ないのか?わかりません。
複雑な条件分岐がある場合だとroles
配下のディレクトリの切り方を工夫したり、変数と変数を組み合わせるみたいなことが起きそう(つらそう)
roleの命名規則を定めないと運用できないかも。
Author And Source
この問題について(ansibleからwhenを消す。またはwhenのないrole切り替えについて), 我々は、より多くの情報をここで見つけました https://qiita.com/D-kun/items/ff34095d5d63a1c1b915著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .