LoginSignup
10
19

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-07-04

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

10
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
19