Ansible 正規表現グループ、パターン、または何か他のもの?

Ansible 正規表現グループ、パターン、または何か他のもの?

いくつかの DNS ゾーンを管理するために、Ansible を使用する必要があります。プレイブックといくつかのテンプレートを問題なく使用しています。ただし、ゾーンのシリアル番号はエンドユーザーによって手動で変更され、更新を忘れることがよくあります。

そこで、ゾーン ファイルから現在のシリアルを解析して更新する (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 は配列を返すため、 が必要になります。

これがあなたにさらなるインスピレーションを与えるかどうか見てみましょう。

関連情報