--- - name: Derive record name within zone from fqdn ansible.builtin.set_fact: samba_dns_record_name: >- {{ (item.fqdn | regex_replace('\\.?$','')) | regex_replace('\\.' ~ (prole_domain | regex_escape) ~ '$', '') }} - name: Query existing CNAME records ansible.builtin.command: cmd: samba-tool dns query {{ samba_dns_server }} {{ prole_domain }} {{ samba_dns_record_name }} CNAME -U {{ samba_dns_admin_user }}%{{ samba_dns_admin_pass }} register: cname_query changed_when: false failed_when: false - name: Parse existing CNAME record value ansible.builtin.set_fact: cname_existing_value: >- {{ (cname_query.stdout | default('') | regex_findall('\\bCNAME\\s+([a-zA-Z0-9.-]+)\\b') | first | default('')) }} - name: Remove stale CNAME record ansible.builtin.command: cmd: samba-tool dns delete {{ samba_dns_server }} {{ prole_domain }} {{ samba_dns_record_name }} CNAME {{ cname_existing_value }} -U {{ samba_dns_admin_user }}%{{ samba_dns_admin_pass }} when: - cname_existing_value | length > 0 - cname_existing_value != item.target - name: Add missing CNAME record ansible.builtin.command: cmd: samba-tool dns add {{ samba_dns_server }} {{ prole_domain }} {{ samba_dns_record_name }} CNAME {{ item.target }} -U {{ samba_dns_admin_user }}%{{ samba_dns_admin_pass }} register: cname_add changed_when: cname_add.rc == 0 failed_when: > cname_add.rc != 0 and ('WERR_DNS_ERROR_RECORD_ALREADY_EXISTS' not in (cname_add.stderr | default(''))) and ('Record already exists' not in (cname_add.stderr | default(''))) when: cname_existing_value != item.target