My use case: we use Infoblox for our DNS. What I’m trying to do is automatically create a host record with the next available hostname that isn’t already in DNS. My plan was to loop through a formatted hostname, incrementing a number in that hostname until a hostname is found that isn’t already in Infoblox. Here’s what I have so far:
- name: Assign next available IP address in your choosen vlan
nios_host_record:
name: “{{ ‘hostname%02d’ | format(item) }}”
ipv4: - address: {nios_next_ip: ‘1.1.1.0/24’}
state: present
view: Internal
provider: “{{ provider }}”
loop: “{{ range(1, 5 + 1)|list }}”
register: loop_result
ignore_errors: true
So for this example, in the DNS, there’s already a hostname01, hostname02, hostname03. The output will be:
TASK [Assign next available IP address in your choosen vlan] *******************************************************************************************************************************
failed: [localhost] (item=1) => {“ansible_loop_var”: “item”, “attempts”: 1, “changed”: false, “code”: “Client.Ibap.Data.Conflict”, “item”: 1, “msg”: “The record ‘hostname01’ already exists.”, “operation”: “create_object”, “type”: “AdmConDataError”}
failed: [localhost] (item=2) => {“ansible_loop_var”: “item”, “attempts”: 1, “changed”: false, “code”: “Client.Ibap.Data.Conflict”, “item”: 2, “msg”: “The record ‘hostname02’ already exists.”, “operation”: “create_object”, “type”: “AdmConDataError”}
failed: [localhost] (item=3) => {“ansible_loop_var”: “item”, “attempts”: 1, “changed”: false, “code”: “Client.Ibap.Data.Conflict”, “item”: 3, “msg”: “The record ‘hostname03’ already exists.”, “operation”: “create_object”, “type”: “AdmConDataError”}
changed: [localhost] => (item=4)
changed: [localhost] => (item=5)
I’d like it to stop processing the loop at item=4, since that’s the first success. I’ve messed with a few different until statements at the end but nothing seems to really work. Thanks.