てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] lookup plugin 名は大文字小文字を意識しておいた方が良い(2.10から区別される)

はじめに

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つ用意)


検証用 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 バージョンでは区別されないので、あわてて対応する必要はありませんが、将来に備えて意識しておいたほうがよさそうです。感覚としては正しい仕様になったのかなと思います。