広告 Ansible

templateモジュールやcopyモジュールでワイルドカードを使う

↓のtaskを実行したところ、

- template: src=*.exp dest=/usr/local/sbin/ owner=root group=root mode=0755

↓のエラーが発生しました。

TASK [encrypt : template] *************************************************
fatal: [test01]: FAILED! => {"changed": false, "failed": true, "msg": "Unable to find '*.exp' in expected paths."}

templateモジュールはワイルドカードが使えると思い込んでいたのでびっくりしました。笑

「*」はワイルドカードとしてではなく、文字として扱われるのですね。

2〜3年Ansibleを触ってきているくせにこの体たらく!笑

ワイルドカードや正規表現を使って、複数のファイルをコピーしたい場合は with_fileglob を使うとよいようです。

http://docs.ansible.com/ansible/playbooks_loops.html#id4

↓みたいな感じに書いてやるとよいです。

- template: src={{ item }} dest=/path/to/dest_dir/
  with_fileglob:
    - ../templates/path/to/src_dir/*.j2

ファイルの指定を../templates/path/to/src_dir/*.j2としているのが気持ち悪いと思います。

ドキュメントにもありますが、with_fileglob は templates ディレクトリではなく files ディレクトリを見にいきます。

そのため、テンプレートファイルを files ディレクトリ以下に置く必要がありますがこれはちがう感がすごい。

しがし、files ディレクトリからの相対パスで templates ディレクトリを指定してやればOKです。

copyモジュールでワイルドカード使いたいときも相対パスを指定する以外は同様にしてやるとよいです。

Ansibleでワイルドカードが使えるようになって便利だね!わーい\(^o^)/

Sponsor Link

-Ansible