はじめに
Ansible には lookup plugin という仕組みがあり、ファイルの内容を取得したり、指定したURLの情報を取得したりできます。(一覧はこちら)
たとえば、file
という lookup plugin であれば、 lookup("file", "ファイル名")
のような形式で指定します。
現状、lookup plugin 一覧に掲載されている lookup plugin 名は全て小文字です。Ansible 2.9 ままでは、大文字でも小文字でも関係なく呼び出せるのですが、開発中のバージョンで大文字小文字の区別をするようになりました。Ansible 2.10 に反映される予定で、Ansible 2.10 の Porting Guide にも追記されました。
挙動の確認のために試してみましたので、結果をまとめます。
動作確認環境(比較用に2つ用意)
- Ansible 2.9.4
- Ansible 2.10.0.dev0 (開発中の 2020/01/31 時点のこのコミットまで)
検証用 Playbook
file lookup plugin を利用する以下の Playbook を利用します。
- hosts: localhost gather_facts: no connection: local tasks: - name: 1 all lowercase debug: msg: '{{ lookup("file", "test.txt") }}' # すべて小文字(通常) - name: 2 start uppercase debug: msg: '{{ lookup("File", "test.txt") }}' # 大文字はじめ
Playbook 実行
Ansible 2.9.4 の場合
Ansible 2.9.4 で Playbook を実行します。
$ ansible-playbook -i localhost, lookup.yml PLAY [localhost] *********************************************************************************************** TASK [1 all lowercase] ***************************************************************************************** ok: [localhost] => { "msg": "Hello, Ansible!" } TASK [2 start uppercase] *************************************************************************************** ok: [localhost] => { "msg": "Hello, Ansible!" } PLAY RECAP ***************************************************************************************************** localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
file
でも File
でも正常に file lookup plugin を呼び出せて、ファイルの内容が表示されました。
Ansible 2.10.0.dev0(開発中)の場合
Ansible 2.10.0.dev0(開発中) で同じ Playbook を実行します。
$ ansible-playbook -i localhost, lookup.yml PLAY [localhost] *********************************************************************************************** TASK [1 all lowercase] ***************************************************************************************** ok: [localhost] => { "msg": "Hello, Ansible!" } TASK [2 start uppercase] *************************************************************************************** fatal: [localhost]: FAILED! => {"msg": "lookup plugin (File) not found"} PLAY RECAP ***************************************************************************************************** localhost : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
2つめのタスクの、大文字からはじめた File
という指定は "lookup plugin (File) not found"
というエラーになってしまいました。
さいごに
Ansible 2.10 で、lookup plugin 名の指定は、大文字小文字が区別されるようになることを確認しました。
2.9 などの stable バージョンでは区別されないので、あわてて対応する必要はありませんが、将来に備えて意識しておいたほうがよさそうです。感覚としては正しい仕様になったのかなと思います。