我的文件里面有如下内容。
dataDir=/var/lib/zookeeper
4lw.commands.whitelist=mntr,conf,ruok,stat
syncLimit=2
我想读取数据目录使用 Ansible 并将其设置为变量。我编写了以下代码,但正则表达式和存储变量都存在一些问题。
- 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.) 如何改进正则表达式以仅获取/var/lib/zookeeper?
Q2.) 我如何存储提取的值以便在另一个任务中使用?
答案1
您需要向正则表达式添加一个组,并添加第二个参数来指定要返回哪个组:
- set_fact:
my_var: "{{ zoo_config_content.stdout | regex_search('dataDir=(.+)', '\\1') | first }}"
这将返回一个包含单个元素的数组,因此我添加了| first
直接获取一个元素作为字符串的功能。
结果:
ok: [localhost] => {
"my_var": "/var/lib/zookeeper"
}
如果配置文件位于 Ansible 机器上,你可以让它更容易使用查找:
- set_fact:
my_var: "{{ lookup('file', 'zoo.cfg') | regex_search('dataDir=(.+)', '\\1') | first }}"