# Ansible playbook to add a CNAME record to IPAM
#
# Example usage: ansible-playbook add-ipam-cname.yml --extra-vars \
#  '{"alias_fqdn":"ansibletestalias.sandbox.illinois.edu","target_fqdn":"ansibletest.sandbox.illinois.edu","extattrs":{"TechSvcNetDevice":"N/A"}}'
#
# Copyright (c) 2018 Board of Trustees University of Illinois
---
- import_playbook: ipam-provider.yml

- name: Add IPAM CNAME record
  hosts: localhost
  gather_facts: false
  vars:

    view: default
    alias_fqdn:
    target_fqdn:
    ttl:
    extattrs: {}
    comment:

  tasks:

    - assert: { that: "ansible_version.full is version('2.8', '>=')", quiet: true }

    - name: check required variables
      fail: msg="Required variable '{{ item }}' not set"
      when: not lookup('vars', item)
      loop:
        - alias_fqdn
        - target_fqdn

    - name: get existing record if any
      set_fact:
        # may return list or single object
        existing_record: "{{ lookup('nios', 'record:cname', filter={'view': view, 'name': alias_fqdn},
                                    return_fields=['view', 'name', 'canonical', 'ttl', 'use_ttl', 'extattrs', 'comment'],
                                    provider=ipam_provider) }}"

    - debug: var=existing_record
      when: DEBUG is defined

    - when: existing_record
      block:

      - name: check existing CNAME target
        fail:
          msg: Not overwriting existing CNAME '{{alias_fqdn}}' = '{{existing_record.canonical}}'
        when: existing_record.canonical != target_fqdn

    - name: create CNAME record
      when: not existing_record
      nios_cname_record:
        view: "{{ view }}"
        name: "{{ alias_fqdn }}"
        canonical: "{{ target_fqdn }}"
        state: present
        ttl: "{{ ttl|default(omit, true) }}"
        extattrs: "{{ extattrs|default(omit, true) }}"
        comment: "{{ comment|default(omit, true) }}"
        provider: "{{ ipam_provider }}"
