mirror of
https://github.com/dredx/prole.git
synced 2026-09-24 16:24:32 +00:00
All samba-tool dns commands were using -P (machine account Kerberos) which
silently failed with no error — tasks reported changed=0 but records were
never written. Switch to -U Administrator --password={{ samba_dns_admin_pass }}
which uses the vault-protected admin credentials that were already defined
but never wired up.
Also fix regex patterns in record parsers: samba-tool output uses `A: IP`
and `PTR: fqdn` format, not `A IP` / `PTR fqdn` (space-separated), so
updated regex_findall patterns to match `TYPE:\s+value`.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
37 lines
1.5 KiB
YAML
37 lines
1.5 KiB
YAML
---
|
|
- name: Query existing PTR records
|
|
ansible.builtin.command:
|
|
cmd: samba-tool dns query {{ samba_dns_server }} {{ lan_reverse_zone }} {{ item.last_octet }} PTR -U Administrator --password={{ samba_dns_admin_pass }}
|
|
register: ptr_query
|
|
changed_when: false
|
|
failed_when: false
|
|
|
|
- name: Parse existing PTR records
|
|
ansible.builtin.set_fact:
|
|
ptr_existing_values: >-
|
|
{{
|
|
(ptr_query.stdout | default('') |
|
|
regex_findall('PTR:\\s+([A-Za-z0-9.-]+)\\.?') |
|
|
map('regex_replace', '\\.$', '') |
|
|
list)
|
|
}}
|
|
|
|
- name: Remove stale PTR records
|
|
ansible.builtin.command:
|
|
cmd: samba-tool dns delete {{ samba_dns_server }} {{ lan_reverse_zone }} {{ item.last_octet }} PTR {{ ptr_value }} -U Administrator --password={{ samba_dns_admin_pass }}
|
|
loop: "{{ ptr_existing_values | reject('equalto', item.fqdn) | list }}"
|
|
loop_control:
|
|
loop_var: ptr_value
|
|
when: (ptr_existing_values | reject('equalto', item.fqdn) | list | length) > 0
|
|
|
|
- name: Add expected PTR record
|
|
ansible.builtin.command:
|
|
cmd: samba-tool dns add {{ samba_dns_server }} {{ lan_reverse_zone }} {{ item.last_octet }} PTR {{ item.fqdn }} -U Administrator --password={{ samba_dns_admin_pass }}
|
|
register: ptr_add
|
|
changed_when: ptr_add.rc == 0
|
|
failed_when: >
|
|
ptr_add.rc != 0 and
|
|
('WERR_DNS_ERROR_RECORD_ALREADY_EXISTS' not in (ptr_add.stderr | default(''))) and
|
|
('Record already exists' not in (ptr_add.stderr | default('')))
|
|
when: item.fqdn not in ptr_existing_values
|