Grupos Ansible Regexp, padrões ou algo mais?

Grupos Ansible Regexp, padrões ou algo mais?

Tenho que usar o ansible para gerenciar algumas zonas DNS. Usamos um manual e alguns modelos sem nenhum problema. Porém, o número de série da(s) zona(s) é modificado manualmente pelos usuários finais e muitas vezes eles se esquecem de atualizá-lo.

Então, quero criar uma tarefa que irá analisar o serial atual do arquivo de zona e, em seguida, atualizá-lo (formato AAAMMMDDXX).

Minha principal preocupação no momento é como obter o serial atual. Eu tenho a tarefa atual:

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

Funciona como esperado, é claro. No entanto, não é muito útil, pois preciso trabalhar muito com ele.

Minha pergunta é:

Como registrar apenas a parte \1 da regex?

Responder1

Isso pode ser um pouco indireto, mas eu tinha uma necessidade semelhante. Eu usei um filtro. Aplicando isso ao seu cenário, acho que fica assim:

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

A parte interessante é o uso de \\1no regex_search. | firsté necessário porque regex_search neste formato retorna uma matriz.

Veja se isso te inspira ainda mais.

informação relacionada