netbox-community / ansible_modules

NetBox modules for Ansible using Ansible Collections
GNU General Public License v3.0
305 stars 198 forks source link

[Bug]: Cannot assign parent interface if name is same as other virtual machine #778

Open Atoms opened 2 years ago

Atoms commented 2 years ago

Ansible NetBox Collection version

v3.6.0

Ansible version

ansible [core 2.12.4]
  config file = /home/asterns/projects/ansible/ansible.cfg
  configured module search path = ['/home/asterns/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/asterns/projects/ansible/.env/lib/python3.8/site-packages/ansible
  ansible collection location = /home/asterns/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/asterns/projects/ansible/.env/bin/ansible
  python version = 3.8.10 (default, Mar 15 2022, 12:22:08) [GCC 9.4.0]
  jinja version = 3.1.1
  libyaml = True

NetBox version

v3.1.9

Python version

3.8

Steps to Reproduce

Create 2 virtual servers and then create interfaces for those servers that are the same on both servers.

- hosts: "localhost"
  connection: local

  vars:
    netbox_url: "https://netbox.url/"
    netbox_token: "xxxxxxxxxxxxxxx"

  tasks:
  - name: Create virtual machine
    netbox.netbox.netbox_virtual_machine:
      netbox_url: "{{ netbox_url }}"
      netbox_token: "{{ netbox_token }}"
      data:
        name: "vm1"
        cluster: "cluster01"
        site: "zzz"
        virtual_machine_role: "Virtual Server"
      state: present

  - name: "Create VM1 interface enp1s0  "
    netbox.netbox.netbox_vm_interface:
      netbox_url: "{{ netbox_url }}"
      netbox_token: "{{ netbox_token }}"
      data:
        virtual_machine: "vm1"
        name: "enp1s0"
        enabled: true
        mode: Access
      state: present

  - name: Create VLAN interface enp1s0.72
    netbox.netbox.netbox_vm_interface:
      netbox_url: "{{ netbox_url }}"
      netbox_token: "{{ netbox_token }}"
      data:
        virtual_machine: "vm1"
        name: "enp1s0.72"
        enabled: true
        parent_vm_interface: "enp1s0"
        tagged_vlans: 
          - site: "zzz"
            vid: "72"
        mode: Tagged
      state: present

  - name: Create virtual machine
    netbox.netbox.netbox_virtual_machine:
      netbox_url: "{{ netbox_url }}"
      netbox_token: "{{ netbox_token }}"
      data:
        name: "vm2"
        cluster: "cluster01"
        site: "zzz"
        virtual_machine_role: "Virtual Server"
      state: present

  - name: "Create VM2 interface enp1s0  "
    netbox.netbox.netbox_vm_interface:
      netbox_url: "{{ netbox_url }}"
      netbox_token: "{{ netbox_token }}"
      data:
        virtual_machine: "vm2"
        name: "enp1s0"
        enabled: true
        mode: Access
      state: present

  - name: Create VLAN interface enp1s0.72
    netbox.netbox.netbox_vm_interface:
      netbox_url: "{{ netbox_url }}"
      netbox_token: "{{ netbox_token }}"
      data:
        virtual_machine: "vm2"
        name: "enp1s0.72"
        enabled: true
        parent_vm_interface: "enp1s0"
        tagged_vlans: 
          - site: "zzz"
            vid: "72"
        mode: Tagged
      state: present

Expected Behavior

2 virtual machines created both with 2 interfaces enp1s0 and enp1s0.72

Observed Behavior

$ ansible-playbook test.yaml

PLAY [localhost] ***********************************************************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************************************************************************************************************************
ok: [localhost]

TASK [Create virtual machine] **********************************************************************************************************************************************************************************************************************************************************
changed: [localhost]

TASK [Create VM1 interface enp1s0] *****************************************************************************************************************************************************************************************************************************************************
changed: [localhost]

TASK [Create VLAN interface enp1s0.72] *************************************************************************************************************************************************************************************************************************************************
changed: [localhost]

TASK [Create virtual machine] **********************************************************************************************************************************************************************************************************************************************************
changed: [localhost]

TASK [Create VM1 interface enp1s0] *****************************************************************************************************************************************************************************************************************************************************
changed: [localhost]

TASK [Create VLAN interface enp1s0.72] *************************************************************************************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => changed=false
  msg: More than one result returned for parent_vm_interface

PLAY RECAP *****************************************************************************************************************************************************************************************************************************************************************************
localhost                  : ok=6    changed=5    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

seems this is specific to virtual machines only, as it's working for devices.

Atoms commented 2 years ago

any updates ?

tweippert commented 3 months ago

Can confirm the issue, maybe the check should be only on interfaces within the same virtual machine?