
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 \\1
no regex_search. | first
é necessário porque regex_search neste formato retorna uma matriz.
Veja se isso te inspira ainda mais.