Ansible 正規表示式群組、模式還是其他什麼?

Ansible 正規表示式群組、模式還是其他什麼?

我必須使用 ansible 來管理一些 DNS 區域。我們使用劇本和一些模板沒有任何問題。然而,區域的序號是由最終用戶手動修改的,並且很多時候他們忘記更新它。

因此,我想建立一個任務,從區域文件中解析當前序列,然後更新它(YYYMMMDDXX 格式)。

我目前主要關心的是如何獲得當前的連續劇。我目前的任務是:

- name: Get current serial in zone file
  lineinfile:
    path: "{{ bind_zone_file }}"
    regexp: "\s*(\d{10})\s*\;Serial"
    register: current_serial

當然,它按預期工作。然而,它並不是很有幫助,因為我需要用它做很多工作。

我的問題是:

如何只註冊正規表示式的 \1 部分?

答案1

這可能有點迂迴,但我也有類似的需求。我用了過濾器。將其應用到您的場景中,我認為看起來像這樣:

- name: Get current serial in zone file, in raw form
  lineinfile:
    path: "{{ bind_zone_file }}"
    regexp: "\s*(\d{10})\s*\;Serial"
    register: current_serial_raw

- name: Get current serial using a regex filter
  set_fact:
    current_serial: "{{ current_serial_raw | regex_search('\s*(\d{10})\s*\;Serial','\\1') | first }}"

\\1有趣的部分是regex_search 中的使用。| first之所以需要,是因為這種形式的 regex_search 會傳回一個陣列。

看看這是否能進一步激勵您。

相關內容