ansible_modules icon indicating copy to clipboard operation
ansible_modules copied to clipboard

[Bug]: Cannot assign existing IP to network interface

Open cfiehe opened this issue 1 year ago • 5 comments

Ansible NetBox Collection version

v3.12.0

Ansible version

ansible [core 2.14.1]
  config file = /home/ansible/automation/projects/provisioning/ansible.cfg
  configured module search path = ['/home/ansible/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/ansible/.local/lib/python3.10/site-packages/ansible
  ansible collection location = /home/ansible/automation/projects/provisioning/collections
  executable location = /home/ansible/.local/bin/ansible
  python version = 3.10.6 (main, Mar 10 2023, 10:55:28) [GCC 11.3.0] (/usr/bin/python3)
  jinja version = 3.0.3
  libyaml = True

NetBox version

v3.4.7

Python version

3.10

Steps to Reproduce

If an IP address already exists in our Netbox, it cannot be assigned to an interface. The module always instructs the Netbox to create a new IP. This results in a Duplicate IP address exception, when Enforce unique space is enabled, or in a duplicate IP.

- name: Create an IP address
  netbox.netbox.netbox_ip_address:
    netbox_url: "{{ netbox_url }}"
    netbox_token: "{{ netbox_token }}"
    data:
      address: 10.1.60.232/24
      tenant: my_company
      vrf: my_company-RFC1918
      status: Active
    state: present

- name: Assign IP address to existing interface
  netbox.netbox.netbox_ip_address:
    netbox_url: "{{ netbox_url }}"
    netbox_token: "{{ netbox_token }}"
    data:
      address: 10.1.60.232/24
      assigned_object:
        virtual_machine: any_vm.local
        name: ens224
      tenant: my_company
      vrf: my_company-RFC1918
      status: Active
    state: present

Expected Behavior

The existing IP should be modified and should be attached to the specified interface.

Observed Behavior

The VRF my_company-RFC1918 uses the option Enforce unique space , that is why the assignment fails with a Duplicate IP address, because the module tries to create a new IP instead of modifying the existing one:

fatal: [any_vm.local -> localhost]: FAILED! => {"changed": false, "msg": "{\"address\":[\"Duplicate IP address found in VRF my_company-RFC1918: 10.1.60.232/24\"]}"}

cfiehe avatar Apr 09 '23 10:04 cfiehe

Hello,

My 2cents here as I’m looking of kind of the same topic. The "Enforce unique space" is the good way. As by having an unique address you’re being certain that this one will not be treated differently. The need here is about being able to update an ip record with the "state:present" attribute.

Zwordi avatar Oct 18 '23 11:10 Zwordi

I'm seeing exact same behaviour. My scenario is that sometimes I need to reserve bunch of IPs ahead of time to get network teams to update firewall rules (which can take days). Once firewall rules are in place I can then build VMs and I would like them to use reserved IPs.

Based on below I would expect to be able to assign an existing IP to a VM if the state is set to present.

https://github.com/netbox-community/ansible_modules/blob/devel/plugins/modules/netbox_ip_address.py#L51

With state C(present), if an interface is given, it will ensure
            that an IP inside this prefix (and vrf, if given) is attached
            to this interface. Otherwise, it will get the next available IP
            of this prefix and attach it.
            With state C(new), it will force to get the next available IP in
            this prefix. If an interface is given, it will also force to attach
            it.

d-zalewski avatar Feb 25 '24 20:02 d-zalewski