Adding host records to Infoblox with Ansible
Entering tens or hundreds of DNS entries in Infoblox from the GUI is a slow process. Previously, I used the IBCLI which is showing its age. I am concerned future updates may make it obsolete at some point.
A more modern approach is a configuration tool like Ansible or the restAPI.
The following playbook has an array of key/value pairs which contain hostname and IP information for the host_record
task. It is much easier to update a text file with the basic key/value pairs then clicking several times for each host record in the GUI.
Ansible playbook:
---
- hosts: localhost
connection: local
vars:
local_nios_provider:
host: grid.example.com
username: jemurray
password: "your-password"
host_records:
- { host_name: test1.example.com, ipaddr: 127.0.0.1 }
- { host_name: test2.example.com, ipaddr: 127.0.0.1 }
- { host_name: test3.example.com, ipaddr: 127.0.0.1 }
tasks:
- name: Create host record
nios_host_record:
name: "{{ item.host_name }}"
ipv4addrs:
- ipv4addr: "{{ item.ipaddr }}"
state: present
provider: "{{ local_nios_provider }}"
loop: "{{ host_records }}"
Running the playbook:
(.venv) jemurray@mbp-2019:~/Documents/src/ansible/tasks/infoblox $ ansible-playbook ./add-host-record.yaml
PLAY [localhost] **********************************************************************************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************************************************************************************
ok: [localhost]
TASK [Create host record] *************************************************************************************************************************************************************
changed: [localhost] => (item={'host_name': 'test1.example.com', 'ipaddr': '127.0.0.1'})
changed: [localhost] => (item={'host_name': 'test1.example.com', 'ipaddr': '127.0.0.1'})
PLAY RECAP ****************************************************************************************************************************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0