Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ansible regex_search with variable

How to find a match using regex in ansible playbook where variable appears in the regex_search argument?

The following playbook doesn't find the match... when run using: ansible-playbook playbook.yml

- hosts: localhost
  gather_facts: no
  tasks:
     - set_fact:
          pattern: "{{ 'foobar' | regex_search('foo') }}"
     - set_fact:
          m: "{{ 'beefoo' | regex_search('bee{{ pattern }}') }}"     
     - debug:
          msg: "hi {{ m }}"
like image 897
rok Avatar asked Mar 07 '19 14:03

rok


2 Answers

Depends on the ansible's version you're using. As far as I know, you can use that expression in a version greater than 2.4.0. For lower versions you can use regex_search('^' + pattern | string).

So your code will be something like this:

- hosts: localhost
  gather_facts: no
  tasks:
     - set_fact:
          pattern: "{{ 'foobar' | regex_search('foo') }}"
     - set_fact:
          m: "{{ 'beefoo' | regex_search('bee' + pattern | string) }}"     
     - debug:
          msg: 'hi ' + m | string
like image 31
dloeda Avatar answered Oct 20 '22 12:10

dloeda


Wanted to share my complex case with positive look-ahead, positive look-behind and variable in regex_search for those who may need it.

- hosts: localhost
  gather_facts: no
  tasks:
     - set_fact:
          pattern: "{{ 'foobar' | regex_search('foo') }}"
     - set_fact:
          m: "{{ 'beefoo' | regex_search('(?<=prefix-' + pattern | string + '-)' + '([0-9.]+)' + '(?=suffix)') }}"     
     - debug:
          msg: "hi {{ m }}"
like image 128
rok Avatar answered Oct 20 '22 13:10

rok