
いくつかの 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 は配列を返すため、 が必要になります。
これがあなたにさらなるインスピレーションを与えるかどうか見てみましょう。