Ansible

使用 Ansible regex_search 提取部分字元串並將輸出保存為變數

  • April 1, 2021

我在文件中有如下內容。

dataDir=/var/lib/zookeeper
4lw.commands.whitelist=mntr,conf,ruok,stat
syncLimit=2

我想使用 Ansible 讀取dataDir的值並將其設置為變數。我編寫了以下程式碼,但正則表達式和儲存變數都有一些問題。

 - 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.) 如何儲存提取的值以用於其他任務?

您需要將一個組添加到您的正則表達式和指定要返回哪個組的第二個參數:

- 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 }}"

引用自:https://serverfault.com/questions/1033936