Server Fault Asked by AnujAroshA on January 2, 2021
I’m having a content like below inside a file.
dataDir=/var/lib/zookeeper
4lw.commands.whitelist=mntr,conf,ruok,stat
syncLimit=2
I wanted to read the value for dataDir using Ansible and set it to a variable. I have written following code but regular expression and storing the variable both have some issues.
- name: Read zoo.cfg content
shell:
cmd: cat zoo.cfg
register: zoo_config_content
- set_fact:
my_var: "{{ zoo_config_content.stdout | regex_search('dataDir.*')}}"
- name: Print
debug:
var: my_var
Q1.) How can I improve the regular expression to get only /var/lib/zookeeper ?
Q2.) How can I store that extracted value to use in another task?
You need to add a group to your regex and a second parameter that specifies which group to return:
- set_fact:
my_var: "{{ zoo_config_content.stdout | regex_search('dataDir=(.+)', '\1') | first }}"
This would return an array with a single element, so I added | first
to get only one element directly as a string.
Result:
ok: [localhost] => {
"my_var": "/var/lib/zookeeper"
}
If the config file resides on the Ansible machine you can make it even easier using a lookup:
- set_fact:
my_var: "{{ lookup('file', 'zoo.cfg') | regex_search('dataDir=(.+)', '\1') | first }}"
Correct answer by Gerald Schneider on January 2, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP