はじめに
Ansible 2.10 で path_join
というフィルターが追加されました。(対応PR)
Python の os.path.join
のように、与えられた文字列のリストを、ディレクトリの階層、ファイル名として扱い、/
を必要に応じて補いながら連結してくれます。
通常の文字列連結でもできなくもないですが、ディレクトリ名の末尾に /
があるかないかを気にせずに連結できる点が path_join
フィルターの良いろころだと思います。
- 動作確認環境
- ansible-base 2.10.1
サンプル
--- - hosts: localhost gather_facts: false tasks: - name: debug path debug: msg: "{{ item | path_join }}" loop: - ["dir", "file.txt"] - ["dir/", "file.txt"]
実行ログ
$ ansible-playbook -i localhost, path_join.yml PLAY [localhost] *************************************************************************************************************************************** TASK [debug path] ************************************************************************************************************************************** ok: [localhost] => (item=['dir', 'file.txt']) => { "msg": "dir/file.txt" } ok: [localhost] => (item=['dir/', 'file.txt']) => { "msg": "dir/file.txt" } PLAY RECAP ********************************************************************************************************************************************* localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ディレクトリ名のあとに /
があってもなくても、結果的には dir/file.txt
のように仕上げてくれました。