はじめに
Ansible が内部的に利用している Jinja2 には select
という、リストに対して様々な操作をするフィルターがあります。
ドキュメントの例には載っていませんが、match
というキーワードを利用すると、正規表現をつかった抽出ができます。と、同僚に教わりました(感謝)。
この記事では、かんたんなサンプルを元に、リストの中から正規表現でマッチする要素を取り出す例をご紹介します。
- 動作確認環境
- Ansible 2.9.6
サンプル
リスト test_list
の各要素に対して、正規表現 .+[2-4].+
にマッチする要素のみに抽出するサンプルです。
Playbook
- hosts: localhost gather_facts: false vars: test_list: # 抽出対象のリスト - xxx1xxx - xxx2xxx - xxx3xxx - xxx4xxx - xxx5xxx tasks: - name: list match debug: msg: "{{ test_list | select('match', '.+[2-4].+') | list }}" # ポイント
実行例
Playbook を実行します。
$ ansible-playbook -i localhost, match.yml PLAY [localhost] ************************************************************************************************** TASK [list match] ************************************************************************************************* ok: [localhost] => { "msg": [ "xxx2xxx", "xxx3xxx", "xxx4xxx" ] } PLAY RECAP ******************************************************************************************************** localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
対象リストの各要素の中から、.+[2-4].+
にマッチする 3つがリストとして抽出できました。