Группы Ansible Regexp, шаблоны или что-то еще?

Группы Ansible Regexp, шаблоны или что-то еще?

Мне приходится использовать ansible для управления несколькими зонами DNS. Мы используем playbook и несколько шаблонов без каких-либо проблем. Однако серийный номер зоны(зон) вручную изменяется конечными пользователями, и часто они забывают его обновить.

Итак, я хочу создать задачу, которая будет анализировать текущий серийный номер из файла зоны, а затем обновлять его (формат 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 в этой форме возвращает массив.

Посмотрите, вдохновит ли это вас еще больше.

Связанный контент