17
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Ansible Jinja2 filters 正規表現で変数の文字列を置換、抽出する

0.はじめに

Ansible で 動的に取得した変数値などを、replaceやtemplateモジュール、commandモジュールでのsedなどを利用せずに、Jinja2 filtersで正規表現を扱えないか調べたところregex_replaceが用意されていました。

1.使い方 サンプルプレイブック

以下は変数kb_msu"Windows8.1-KB3140735-x64.msu"を regex_replaceを利用して
例1)拡張子を置換して別の変数として定義
例2)真ん中の数字のみを抽出して別の変数として定義
debugモジュールで出力するサンプルのプレイブック

regex_raplace.yml
---
- hosts: localhost
  connection: local
  gather_facts: no
  vars:
    kb_msu: "Windows8.1-KB3140735-x64.msu"
    # 例1)kb_msuの拡張子を.msuから.xmlへ置換
    kb_xml: "{{ kb_msu | regex_replace('.msu','.xml') }}"
    # 例2) kb_msuの'-KB'と'-'との間の数字を抽出
    kb_no:  "{{ kb_msu | regex_replace('^.*-KB(\\d*)-.*msu$','\\1') }}"
  tasks:
    - debug: msg="kb_msu={{ kb_msu }} , kb_xml={{ kb_xml }} , kb_no={{ kb_no }}"

2.実行結果

# ansible-playbook regex_raplace.yml

PLAY [localhost] ***************************************************************

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "kb_msu=Windows8.1-KB3140735-x64.msu, kb_xml=Windows8.1-KB3140735-x64.xml , kb_no=3140735"
}

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0

3.参考

公式サイトでのJinja2 filtersの使い方(英語)はこちら
他にもいろいろと便利なフィルター(Windows関連や正規表現をエスケープしてくれるものなど)
が追加・更新?されていましたので、定期的に覗くと良いかもしれません。

なお、現時点(2016/07/04)では公式サイトには載っていないのですが、
正規表現関連としてはregex_searchregex_findallなども使えるようです。
Version 2.2.0から?でしょうか?(ansible 2.2.0 (devel 394430a61e) last updated 2016/06/28 13:25:07 (GMT +900)では使えました)

以下はAnsible-Webinar用コードの一部
https://github.com/privateip/Ansible-Webinar-Mar2016/blob/master/roles/network_facts/tasks/ios.yaml

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
17
Help us understand the problem. What are the problem?