はじめに
2019年7月、Ansible の公式ドキュメントに、優先度に関する総合的なページができていました。
対象は以下の4つです。
- 設定
- コマンドライン引数
- Playbook Keywords
- 変数
今まで、変数の優先順位や、ansible.cfg
の優先順位のように、個別の説明ページはありました。今回はそれらの上位にあたるページのようです。
Playbook keywords の場合
たとえば、以下のように Play レベル、Task レベルそれぞれに connection
が指定されている場合、基本は Play レベルで指定されている ssh
で、2つめの Task は、Task レベルで指定されている paramiko
での方式になります。
- hosts: all connection: ssh tasks: - name: This task uses ssh. ping: - name: This task uses paramiko. connection: paramiko ping:
(引用元)
ところで
Playbook Keywords と 変数 はどちらが勝つ?
Playbook Keywords 内の対決、変数内の対決は上記のドキュメント経由で分かるのですが、「Playbook Keywords 対 変数」のようにジャンル(?)をまたいだ対決はどうなるのでしょうか。
例えば、コネクションプラグインの指定は複数の方法があります。Playbook Keyword としての connection: hogehoge
でも指定できますし、変数として、ansible_connection: hogehoge
も指定できます。
以下のツイートで、言及されていました。
Talking to @kirkbyers, it is not clear about connection precedence in @ansible. I had the same problem he did originally and I didn't do a good job documenting this.... Check out this quick example, which connection plugin will ios_facts use?, httpapi or network_cli? pic.twitter.com/KZjvlvLYK1
— Sean Cavanaugh (@IPvSean) October 10, 2019
勝ち | 負け | 補足 |
---|---|---|
Task レベルの ansible_connection 変数 |
Play レベルの connection キーワード |
|
インベントリの ansible_connection 変数 |
Play レベルの connection キーワード |
変数同士の対決であれば、Play レベルが勝つので、直感に反するという意見も |
混乱のもとになるので、コネクションプラグインの指定は変数による指定に統一したほうがいいと思います。