Blob Blame History Raw
---
- name: Test dnsrecord
  hosts: ipaserver
  become: yes
  gather_facts: yes

  tasks:

  - name: Setup testing environment.
    include_tasks: env_setup.yml

  - name: Generate self-signed certificates.
    shell:
      cmd: |
        openssl req -x509 -newkey rsa:2048 -days 365 -nodes -keyout "private{{ item }}.key" -out "cert{{ item }}.pem" -subj '/CN=test'
        openssl x509 -outform der -in "cert{{ item }}.pem" -out "cert{{ item }}.der"
        base64 "cert{{ item }}.der" -w5000 > "cert{{ item }}.b64"
    with_items: [1]
    become: no
    delegate_to: localhost

  # tests
  - name: Ensure that dns record 'host01' is present
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      name: host01
      zone_name: "{{ testzone }}"
      record_type: AAAA
      record_value: ::1
    register: result
    failed_when: not result.changed

  - name: Ensure that dns record 'host01' is present, again
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      name: host01
      zone_name: "{{ testzone }}"
      record_type: AAAA
      record_value: ::1
    register: result
    failed_when: result.changed

  - name: Ensure that dns record 'host02' is present
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      name: host02
      zone_name: "{{ testzone }}"
      record_type: A
      record_value: "{{ ipv4_prefix }}.102"
    register: result
    failed_when: not result.changed

  - name: Ensure that dns record 'host02' is present, again
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      name: host02
      zone_name: "{{ testzone }}"
      record_type: A
      record_value: "{{ ipv4_prefix }}.102"
    register: result
    failed_when: result.changed

  - name: Modify record 'host02' with multiple A and AAAA record.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      records:
        - name: host02
          zone_name: "{{ testzone }}"
          record_type: A
          record_value:
            - "{{ ipv4_prefix }}.112"
            - "{{ ipv4_prefix }}.122"
        - name: host02
          zone_name: "{{ testzone }}"
          record_type: AAAA
          record_value: ::1
    register: result
    failed_when: not result.changed

  - name: Modify record 'host02' with multiple A and AAAA record, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      records:
        - name: host02
          zone_name: "{{ testzone }}"
          record_type: A
          record_value:
            - "{{ ipv4_prefix }}.112"
            - "{{ ipv4_prefix }}.122"
        - name: host02
          zone_name: "{{ testzone }}"
          record_type: AAAA
          record_value: ::1
    register: result
    failed_when: result.changed

  - name: Ensure 'host02' A6 record is present.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host02
      a6_data: ::1
    register: result
    failed_when: not result.changed

  - name: Ensure 'host02' A6 record is present, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host02
      a6_rec: ::1
    register: result
    failed_when: result.changed

  - name: Ensure 'host02' A6 record is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host02
      a6_rec: ::1
      state: absent
    register: result
    failed_when: not result.changed

  - name: Ensure 'host02' A6 record is absent, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host02
      a6_rec: ::1
      state: absent
    register: result
    failed_when: result.changed

  - name: Ensure that dns record 'host03' is present, with reverse record.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      name: host03
      zone_name: "{{ testzone }}"
      a_ip_address: "{{ ipv4_prefix }}.103"
      a_create_reverse: yes
    register: result
    failed_when: not result.changed

  - name: Ensure that dns record 'host03' is present, with reverse record, again
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      name: host03
      zone_name: "{{ testzone }}"
      record_type: A
      record_value: "{{ ipv4_prefix }}.103"
      create_reverse: yes
    register: result
    failed_when: result.changed

  - name: Delete all entries associated with host03
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host03
      del_all: yes
      state: absent
    register: result
    failed_when: not result.changed

  - name: Delete all entries associated with host03, again
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host03
      del_all: yes
      state: absent
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' has CNAME
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      record_type: CNAME
      record_value: "host04.{{ testzone }}"
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' has CNAME, again
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      cname_hostname: "host04.{{ testzone }}"
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' CNAME is absent
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      cname_rec: "host04.{{ testzone }}"
      state: absent
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' CNAME is absent, again
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      record_type: CNAME
      record_value: "host04.{{ testzone }}"
      state: absent
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' and 'host03' have CNAME, with cname_hostname
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      records:
        - name: host04
          cname_hostname: "host04.{{ testzone }}"
        - name: host03
          cname_hostname: "host03.{{ testzone }}"
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' has CNAME, with cname_hostname, again
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      cname_hostname: "host04.{{ testzone }}"
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' CNAME is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      cname_rec: "host04.{{ testzone }}"
      state: absent
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' has A record.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      ip_address: "{{ ipv4_prefix }}.104"
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' has A record, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      ip_address: "{{ ipv4_prefix }}.104"
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' has the same A record with reverse.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      a_rec: "{{ ipv4_prefix }}.104"
      reverse: yes
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' has the same A record with reverse, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      a_rec: "{{ ipv4_prefix }}.104"
      reverse: yes
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' has an A record with reverse, for NS record.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      ip_address: "{{ ipv4_prefix }}.114"
      reverse: yes

  - name: Ensure that 'host04' has an A record with reverse, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      ip_address: "{{ ipv4_prefix }}.114"
      reverse: yes
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' has AAAA record.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      aaaa_ip_address: fd00::0004
      aaaa_create_reverse: yes
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' has AAAA record, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      ip_address: fd00::0004
      reverse: yes
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' has AAAA record, without reverse.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      ip_address: fd00::0014
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' previous AAAA record, now has a reverse record.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      aaaa_rec: fd00::0014
      reverse: yes
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' previous AAAA record, now has a reverse record, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      aaaa_rec: fd00::0014
      reverse: yes
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' has PTR record.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ zone_prefix_reverse_24 }}"
      name: "124"
      ptr_hostname: "host04.{{ testzone }}"
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' has PTR record, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ zone_prefix_reverse_24 }}"
      name: "124"
      ptr_hostname: "host04.{{ testzone }}"
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' has PTR record is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ zone_prefix_reverse_24 }}"
      name: "124"
      ptr_rec: "host04.{{ testzone }}"
      state: absent
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' has PTR record is absent, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ zone_prefix_reverse_24 }}"
      name: "124"
      ptr_rec: "host04.{{ testzone }}"
      state: absent
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' has DNAME record.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      dname_target: "ipa.{{ testzone }}"
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' has DNAME record, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      dname_target: "ipa.{{ testzone }}"
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' DNAME record is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      dname_rec: "ipa.{{ testzone }}"
      state: absent
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' DNAME record is absent, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      dname_rec: "ipa.{{ testzone }}"
      state: absent
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' has a A record with reverse, for NS record.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      ip_address: "{{ ipv4_prefix }}.114"
      reverse: yes

  - name: Ensure that 'host04' has NS record.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      ns_hostname: host04
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' has NS record, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      ns_hostname: host04
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' NS record is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      ns_rec: host04
      state: absent
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' NS record is absent, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      ns_rec: host04
      state: absent
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' DLV record is present.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      dlv_key_tag: 12345
      dlv_algorithm: 3
      dlv_digest_type: 1
      # digest is sha1sum of 'host04."{{ testzone }}"'
      dlv_digest: 08ff468cb25ccd21642989294cc33570da5eb2ba
    register: result
    failed_when: result.failed or not result.changed

  - name: Ensure that 'host04' DLV record is present, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      dlv_key_tag: 12345
      dlv_algorithm: 3
      dlv_digest_type: 1
      dlv_digest: 08ff468cb25ccd21642989294cc33570da5eb2ba
    register: result
    failed_when: result.failed or result.changed

  - name: Ensure that 'host04' DLV record is present, with a different key tag.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      dlv_key_tag: 4321
      dlv_record: 12345 3 1 08ff468cb25ccd21642989294cc33570da5eb2ba
    register: result
    failed_when: result.failed or not result.changed

  - name: Ensure that 'host04' DLV second record is present.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      dlv_key_tag: 4321
      dlv_algorithm: 2
      dlv_digest_type: 2
      # digest is sha1sum of 'second record'
      dlv_digest: da39a3ee5e6b4b0d3255bfef95601890afd80709
    register: result
    failed_when: result.failed or not result.changed

  - name: Ensure that 'host04' DLV record is changed, in presence of multiple records.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      dlv_key_tag: 54321
      dlv_record: 4321 3 1 08ff468cb25ccd21642989294cc33570da5eb2ba
    register: result
    failed_when: result.failed or not result.changed

  - name: Ensure that 'host04' DLV record is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      dlv_record: 54321 3 1 08ff468cb25ccd21642989294cc33570da5eb2ba
      state: absent
    register: result
    failed_when: result.failed or not result.changed

  - name: Ensure that 'host04' DLV record is absent, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      dlv_record: 54321 3 1 08ff468cb25ccd21642989294cc33570da5eb2ba
      state: absent
    register: result
    failed_when: result.failed or result.changed

  - name: Ensure that 'host04' DLV record is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      dlv_record: 4321 2 2 da39a3ee5e6b4b0d3255bfef95601890afd80709
      state: absent
    register: result
    failed_when: result.failed or not result.changed

  - name: Ensure that dns record 'iron01' is present
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      name: iron01
      zone_name: "{{ safezone }}"
      ip_address: "{{ ansible_default_ipv4.address }}"
    register: result
    failed_when: not result.changed

  - name: Ensure that NS record for "{{ safezone }}" is present
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      name: iron01
      zone_name: "{{ safezone }}"
      ns_hostname: iron01
    register: result
    failed_when: not result.changed

  - name: Ensure that 'iron01' DS record is present.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ safezone }}"
      name: iron01
      ds_key_tag: 12345
      ds_algorithm: 3
      ds_digest_type: 1
      # digest is sha1sum of 'iron01."{{ safezone }}"'
      ds_digest: 84763786e4213cca9a6938dba5dacd64f87ec216
    register: result
    failed_when: not result.changed

  - name: Ensure that 'iron01' DS record is present, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ safezone }}"
      name: iron01
      ds_key_tag: 12345
      ds_algorithm: 3
      ds_digest_type: 1
      ds_digest: 84763786e4213cca9a6938dba5dacd64f87ec216
    register: result
    failed_when: result.changed

  - name: Ensure that 'iron01' DS record is present, with a different key tag.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ safezone }}"
      name: iron01
      ds_key_tag: 54321
      ds_rec: 12345 3 1 84763786e4213cca9a6938dba5dacd64f87ec216
    register: result
    failed_when: not result.changed

  - name: Ensure that 'iron01' DS record is present, with a different key tag, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ safezone }}"
      name: iron01
      ds_key_tag: 54321
      ds_rec: 12345 3 1 84763786e4213cca9a6938dba5dacd64f87ec216
    register: result
    failed_when: result.changed

  - name: Ensure that 'iron01' DS record is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ safezone }}"
      name: iron01
      ds_rec: 54321 3 1 84763786e4213cca9a6938dba5dacd64f87ec216
      state: absent
    register: result
    failed_when: not result.changed

  - name: Ensure that 'iron01' DS record is absent, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ safezone }}"
      name: iron01
      ds_rec: 54321 3 1 84763786e4213cca9a6938dba5dacd64f87ec216
      state: absent
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' AFSDB record is present.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      afsdb_subtype: 1
      afsdb_hostname: "host04.{{ testzone }}"
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' AFSDB record is present, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      afsdb_subtype: 1
      afsdb_hostname: "host04.{{ testzone }}"
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' AFSDB record subtype is 2.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      afsdb_subtype: 2
      afsdb_rec: "1 host04.{{ testzone }}"
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' AFSDB record subtype is 2, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      afsdb_subtype: 2
      afsdb_rec: "1 host04.{{ testzone }}"
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' AFSDB record is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      afsdb_rec: "2 host04.{{ testzone }}"
      state: absent
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' AFSDB record is absent, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      afsdb_rec: "2 host04.{{ testzone }}"
      state: absent
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' CERT record is present.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      cert_type: 1
      cert_key_tag: 1234
      cert_algorithm: 3
      cert_certificate_or_crl: "{{ lookup('file', 'cert1.b64') }}"
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' CERT record is present, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      cert_type: 1
      cert_key_tag: 1234
      cert_algorithm: 3
      cert_certificate_or_crl: "{{ lookup('file', 'cert1.b64') }}"
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' CERT record is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      cert_rec: "1 1234 3 {{ lookup('file', 'cert1.b64') }}"
      state: absent
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' CERT record is absent, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      cert_rec: 1 1234 3 "{{ lookup('file', 'cert1.b64') }}"
      state: absent
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' KX record is present.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      kx_preference: 10
      kx_exchanger: "keyex.{{ testzone }}"
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' KX record is present, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      kx_preference: 10
      kx_exchanger: "keyex.{{ testzone }}"
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' KX record is present with preference set to 20.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      kx_preference: 20
      kx_rec: "10 keyex.{{ testzone }}"
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' KX record is present with preference set to 20, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      kx_preference: 20
      kx_rec: "10 keyex.{{ testzone }}"
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' KX record is present with preference set to 20, one more time.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      kx_preference: 20
      kx_rec: "20 keyex.{{ testzone }}"
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' KX record is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      kx_rec: "20 keyex.{{ testzone }}"
      state: absent
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' KX record is absent, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      kx_rec: "20 keyex.{{ testzone }}"
      state: absent
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' MX record is present.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      mx_preference: 10
      mx_exchanger: "mail.{{ testzone }}"
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' MX record is present, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      mx_preference: 10
      mx_exchanger: "mail.{{ testzone }}"
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' MX record is present with preference set to 20.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      mx_preference: 20
      mx_rec: "10 mail.{{ testzone }}"
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' MX record is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      mx_rec: "20 mail.{{ testzone }}"
      state: absent
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' MX record is absent, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      mx_rec: "20 mail.{{ testzone }}"
      state: absent
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' LOC record is present.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      loc_lat_deg: 52
      loc_lat_min: 22
      loc_lat_sec: 23.000
      loc_lat_dir: N
      loc_lon_deg: 4
      loc_lon_min: 53
      loc_lon_sec: 32.00
      loc_lon_dir: E
      loc_altitude: -2.00
      loc_size: 0.00
      loc_h_precision: 10000
      loc_v_precision: 10
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' LOC record is present, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      loc_lat_deg: 52
      loc_lat_min: 22
      loc_lat_sec: 23.000
      loc_lat_dir: N
      loc_lon_deg: 4
      loc_lon_min: 53
      loc_lon_sec: 32.000
      loc_lon_dir: E
      loc_altitude: -2.00
      loc_size: 0.00
      loc_h_precision: 10000
      loc_v_precision: 10
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' LOC record is present, with loc_size 1.00.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      loc_size: 1.00
      loc_rec: 52 22 23.000 N 4 53 32.000 E -2.00 0.00 10000.00 10.00
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' LOC record is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      loc_rec: 52 22 23.000 N 4 53 32.000 E -2.00 1.00 10000.00 10.00
      state: absent
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' LOC record is absent, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      loc_rec: 52 22 23.000 N 4 53 32.000 E -2.00 1.00 10000.00 10.00
      state: absent
    register: result
    failed_when: result.changed

  - name: Ensure that '_sip._udp' service has NAPTR record.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _sip._udp
      naptr_order: 100
      naptr_preference: 10
      naptr_flags: "U"
      naptr_service: "SIP+D2U"
      naptr_regexp: "!^.*$!sip:info@example.com!"
      naptr_replacement: "."
    register: result
    failed_when: result.failed or not result.changed

  - name: Ensure that '_sip._udp' service has NAPTR record, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _sip._udp
      naptr_order: 100
      naptr_preference: 10
      naptr_flags: "U"
      naptr_service: "SIP+D2U"
      naptr_regexp: "!^.*$!sip:info@example.com!"
      naptr_replacement: "."
    register: result
    failed_when: result.failed or result.changed

  - name: Change '_sip._udp' service NAPTR record `preference` to 20.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _sip._udp
      naptr_preference: 20
      naptr_rec: '100 10 U SIP+D2U !^.*$!sip:info@example.com! .'
    register: result
    failed_when: result.failed or not result.changed

  - name: Ensure that '_sip._udp' service has NAPTR record.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _sip._udp
      naptr_order: 101
      naptr_preference: 11
      naptr_flags: "U"
      naptr_service: "SIP+D2U"
      naptr_regexp: "!^.*$!sip:debug@example.com!"
      naptr_replacement: "."

  - name: Ensure that '_sip._udp' service has NAPTR record.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _sip._udp
      naptr_order: 102
      naptr_preference: 12
      naptr_flags: "U"
      naptr_service: "SIP+D2U"
      naptr_regexp: "!^.*$!sip:prio@example.com!"
      naptr_replacement: "."

  - name: Change '_sip._udp' service NAPTR record `preference` to 50, when multiple records are present. (BZ 1881436)
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _sip._udp
      naptr_preference: 50
      naptr_rec: '100 20 U SIP+D2U !^.*$!sip:info@example.com! .'
    register: result
    failed_when: result.failed or not result.changed

  - name: Ensure that '_sip._udp' service has NAPTR record is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _sip._udp
      record_type: NAPTR
      record_value: '100 50 U SIP+D2U !^.*$!sip:info@example.com! .'
      state: absent
    register: result
    failed_when: result.failed or not result.changed

  - name: Ensure that '_sip._udp' service has NAPTR record is absent, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _sip._udp
      record_type: NAPTR
      record_value: '100 50 U SIP+D2U !^.*$!sip:info@example.com! .'
      state: absent
    register: result
    failed_when: result.failed or result.changed

  - name: Clear NAPTR records.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _sip._udp
      del_all: yes
      state: absent


  - name: Ensure that '_sip._udp' service has SRV record.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _sip._udp
      srv_priority: 10
      srv_weight: 10
      srv_port: 5060
      srv_target: "sip-server.{{ testzone }}"
    register: result
    failed_when: not result.changed

  - name: Ensure that '_sip._udp' service has SRV record, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _sip._udp
      srv_priority: 10
      srv_weight: 10
      srv_port: 5060
      srv_target: "sip-server.{{ testzone }}"
    register: result
    failed_when: result.changed

  - name: Ensure '_sip._udp' SRV record has priority equals to 4.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _sip._udp
      srv_priority: 4
      srv_weight: 10
      srv_port: 5060
      srv_target: "sip-server.{{ testzone }}"
      srv_rec: "10 10 5060 sip-server.{{ testzone }}"
    register: result
    failed_when: not result.changed

  - name: Ensure '_sip._udp' SRV record has priority equals to 4, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _sip._udp
      srv_priority: 4
      srv_weight: 10
      srv_port: 5060
      srv_target: sip-server."{{ testzone }}"
      srv_rec: "10 10 5060 sip-server.{{ testzone }}"
    register: result
    failed_when: result.changed

  - name: Ensurer '_sip._udp' SRV record has priority 2, weight 20
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _sip._udp
      srv_priority: 2
      srv_weight: 20
      srv_port: 5060
      srv_target: "sip-server.{{ testzone }}"
    register: result
    failed_when: not result.changed

  - name: Ensurer '_sip._udp' SRV record has priority 2, weight 20, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _sip._udp
      srv_priority: 2
      srv_weight: 20
      srv_port: 5060
      srv_target: "sip-server.{{ testzone }}"
    register: result
    failed_when: result.changed

  - name: Ensure that '_sip._udp' SRV record is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _sip._udp
      srv_record: "2 20 5060 sip-server.{{ testzone }}"
      state: absent
    register: result
    failed_when: not result.changed

  - name: Ensure that '_sip._udp' SRV record is absent, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _sip._udp
      srv_record: "2 20 5060 sip-server.{{ testzone }}"
      state: absent
    register: result
    failed_when: result.changed

  # SSHFP fingerprint generated with `ssh-keygen -r host04."{{ testzone }}"`
  - name: Ensure that 'host04' has SSHFP record.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      sshfp_algorithm: 1
      sshfp_fp_type: 1
      sshfp_fingerprint: d21802c61733e055b8d16296cbce300efb8a167a
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' has SSHFP record, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      sshfp_algorithm: 1
      sshfp_fp_type: 1
      sshfp_fingerprint: d21802c61733e055b8d16296cbce300efb8a167a
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' SSHFP record is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      sshfp_rec: 1 1 d21802c61733e055b8d16296cbce300efb8a167a
      state: absent
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' SSHFP record is absent, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      sshfp_rec: 1 1 d21802c61733e055b8d16296cbce300efb8a167a
      state: absent
    register: result
    failed_when: result.changed

  # Data is sha356sum of 'Some Text to Test', it should be created from
  # a real certificate.
  - name: Ensure that 'host04' has TLSA record present.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      tlsa_cert_usage: 3
      tlsa_selector: 1
      tlsa_matching_type: 1
      tlsa_cert_association_data: 9c0ad776dbeae8d9d55b0ad42899d30235c114d5f918fd69746e4279e47bdaa2
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' has TLSA record present, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      tlsa_cert_usage: 3
      tlsa_selector: 1
      tlsa_matching_type: 1
      tlsa_cert_association_data: 9c0ad776dbeae8d9d55b0ad42899d30235c114d5f918fd69746e4279e47bdaa2
    register: result
    failed_when: result.changed

  - name: Modify 'host04' has TLSA record.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      tlsa_matching_type: 0
      tlsa_rec: 3 1 1 9c0ad776dbeae8d9d55b0ad42899d30235c114d5f918fd69746e4279e47bdaa2
    register: result
    failed_when: not result.changed

  - name: Modify 'host04' has TLSA record, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      tlsa_matching_type: 0
      tlsa_rec: 3 1 1 9c0ad776dbeae8d9d55b0ad42899d30235c114d5f918fd69746e4279e47bdaa2
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' TLSA record is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      tlsa_rec: 3 1 0 9c0ad776dbeae8d9d55b0ad42899d30235c114d5f918fd69746e4279e47bdaa2
      state: absent
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' TLSA record is absent, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      tlsa_rec: 3 1 0 9c0ad776dbeae8d9d55b0ad42899d30235c114d5f918fd69746e4279e47bdaa2
      state: absent
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' has TXT record present.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      txt_data: Some Text
    register: result
    failed_when: not result.changed

  # - name: Ensure that 'host04' has TXT record present, again.
  #   ipadnsrecord:
  #     ipaadmin_password: SomeADMINpassword
  #     zone_name: "{{ testzone }}"
  #     name: host04
  #     txt_data: Some Text
  #   register: result
  #   failed_when: result.changed

  - name: Change value of  'host04' TXT record.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      txt_data: Some new Text
      txt_rec: Some Text
    register: result
    failed_when: not result.changed

  - name: Add a second TXT record to 'host04'.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      txt_rec: Some Other Text
    register: result
    failed_when: not result.changed

  - name: Add a second TXT record to 'host04', again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      txt_rec: Some Other Text
    register: result
    failed_when: result.changed

  - name: Ensure that one of 'host04' TXT record is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      txt_rec: Some new Text
      state: absent
    register: result
    failed_when: not result.changed

  - name: Ensure that one of 'host04' TXT record is absent, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      txt_rec: Some new Text
      state: absent
    register: result
    failed_when: result.changed

  - name: Ensure that 'host04' TXT record are all absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      txt_rec:
      - Some new Text
      - Some Other Text
      state: absent
    register: result
    failed_when: not result.changed

  - name: Ensure that 'host04' TXT record are all absent, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: host04
      txt_rec:
      - Some new Text
      - Some Other Text
      state: absent
    register: result
    failed_when: result.changed

  - name: Ensure that '_ftp._tcp' has URI record.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _ftp._tcp
      uri_priority: 10
      uri_weight: 1
      uri_target: ftp://ftp.host04.{{ testzone }}/public
    register: result
    failed_when: not result.changed

  - name: Ensure that '_ftp._tcp' has URI record, again
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _ftp._tcp
      uri_priority: 10
      uri_weight: 1
      uri_target: ftp://ftp.host04.{{ testzone }}/public
    register: result
    failed_when: result.changed

  - name: Change '_ftp._tcp' URI record weight to 3 and priority to 5.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _ftp._tcp
      uri_priority: 5
      uri_weight: 3
      uri_rec: 10 1 "ftp://ftp.host04.{{ testzone }}/public"
    register: result
    failed_when: not result.changed

  - name: Verify if modification worked.
    ipadnsrecord:
      uri_rec: 10 1 ftp://ftp.host04.{{ testzone }}/public
      state: absent
    register: result
    failed_when: result.changed


  - name: Change '_ftp._tcp' URI record weight to 3 and priority to 5, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _ftp._tcp
      uri_priority: 5
      uri_weight: 3
      uri_rec: 5 3 "ftp://ftp.host04.{{ testzone }}/public"
    register: result
    failed_when: result.changed

  - name: Ensure that '_ftp._tcp' URI record is absent.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _ftp._tcp
      uri_rec: 5 3 "ftp://ftp.host04.{{ testzone }}/public"
      state: absent
    register: result
    failed_when: not result.changed

  - name: Ensure that '_ftp._tcp' URI record is absent, again.
    ipadnsrecord:
      ipaadmin_password: SomeADMINpassword
      zone_name: "{{ testzone }}"
      name: _ftp._tcp
      uri_rec: 5 3 "ftp://ftp.host04.{{ testzone }}/public"
      state: absent
    register: result
    failed_when: result.changed

  # cleanup
  - name: Cleanup test environment.
    include_tasks: env_cleanup.yml

  - name: Remove certificate files.
    shell:
      cmd: rm -f "private{{ item }}.key" "cert{{ item }}.pem" "cert{{ item }}.der" "cert{{ item }}.b64"
    with_items: [1]
    become: no
    delegate_to: localhost
    args:
      warn: no  # suppres warning for not using the `file` module.