You can use the Ansible regex_search filter to find patterns in strings and extract matching content.
Quick Index:
Ansible regex_search example playbook
Here’s a basic example of how you can use it in an Ansible playbook:
---
- name: Example playbook with regex_search
hosts: localhost
gather_facts: false
tasks:
- name: Extract matching content from a string
set_fact:
matched_content: "{{ my_string | regex_search(my_pattern) }}"
vars:
my_string: "This is a codetryout example with 7777 and some other text."
my_pattern: '(\d+)'
- name: Display the matched content
debug:
var: matched_content
In this example:
- We define an Ansible playbook with a single task.
- In the task, we use the set_fact module to set the variable matched_content to the result of the regex_search filter.
- We specify the my_string variable, which contains the string you want to search within.
- We specify the my_pattern variable, which contains the regular expression pattern you want to search for. In this case, we’re searching for one or more digits.
- Finally, we use the debug module to display the matched content.
When you run this playbook, Ansible will search for the regular expression pattern in the provided string (my_string) and store the matched content in the matched_content variable. In this example, it will extract the digits “7777” from the string and display them.
You can customize the my_string and my_pattern variables to match your specific use case and regular expression requirements.
10 regex_search examples
Here are 10 Ansible examples that demonstrate how to use the regex search filter for various tasks:
- Extract IP Address from a String:
- set_fact:
ip_address: "{{ my_string | regex_search('\\d+\\.\\d+\\.\\d+\\.\\d+') }}"
vars:
my_string: "Server IP: 192.168.1.100"
- Extract Email Addresses from a Text:
- set_fact:
email_addresses: "{{ my_text | regex_search('\\S+@\\S+') }}"
vars:
my_text: "Emails: [email protected], [email protected]"
- Extract Numbers from a String:
- set_fact:
numbers: "{{ my_string | regex_search('\\d+') }}"
vars:
my_string: "There are 123 servers on this cluster"
- Extract URLs from Text:
- set_fact:
urls: "{{ my_text | regex_search('https?://\\S+') }}"
vars:
my_text: "Visit our website at https://codetryout.com."
- Extract Domain Names from a List:
- set_fact:
domains: "{{ my_list | map('regex_search', 'https?://(\\S+)') | select('defined') | map('extract', 1) | list }}"
vars:
my_list:
- "https://codetryout.com"
- "https://example.com"
- Extract Words Starting with ‘A’:
- set_fact:
words_with_a: "{{ my_text | regex_search('\\bA\\w*') }}"
vars:
my_text: "Ansible is awesome and so are Python!"
- Extract File Extensions from File Names:
- set_fact:
extensions: "{{ my_filenames | map('regex_search', '\\.([^\\.]+)$') | select('defined') | map('extract', 1) | list }}"
vars:
my_filenames:
- "reports.pdf"
- "logo.jpg"
- Extract Hexadecimal Colors from CSS:
- set_fact:
colors: "{{ css_code | regex_search('#[0-9A-Fa-f]{6}') }}"
vars:
css_code: "body { background-color: #FFFFFF; color: #00FF00; }"
- Extract Words in Parentheses:
- set_fact:
words_in_parentheses: "{{ my_text | regex_search('\\(([^)]+)\\)') }}"
vars:
my_text: "The (quick) brown (fox) jumps (over) the lazy dog."
- Extract First and Last Name from Full Name:
- set_fact:
first_name: "{{ full_name | regex_search('^\\w+') }}"
last_name: "{{ full_name | regex_search('\\w+$') }}"
vars:
full_name: "Code Tryout"
These examples cover a range of use cases for extracting specific content using regular expressions in Ansible. You can modify the regular expressions to match your specific requirements.