Uploaded image for project: 'Red Hat OpenStack Services on OpenShift'
  1. Red Hat OpenStack Services on OpenShift
  2. OSPRH-2700

Changing vnic type should be blocked at the neutron api for port that are attached to vms

XMLWordPrintable

    • Moderate

      This bug was initially created as a copy of
      Bug #2104525
      I am copying this bug because:

      we have discussed this at ptg in the past that currently the nutron API allows some attributes to be updated on the port that are not valid to update when the port is attached to a VM.

      the vnic_type is one of them as is the device_id (the uuid of the server that the port is attached too and there can be others.
      in this case the customer change the vnic type from direct to macvtap without detaching the port form the VM. in osp 13 detaching an seriov port was possible but buggy and attaching an sriov port was not supported.in 17 we now support sriov attach/detach. i suspect that is why they updated the port type in place but
      this is not a valid operation and should have resulted in a 409 conflict form the neutron API as that not only could invalidate the scheduling decision by changing the resource usage, as noted in the original bug it could break the nova-comptue agent.

      the original bug will be used to harden nova against this type of breakage but i am cloning this to the networking dfg to ask for an RFE or upstream bug fix to prevent updating the neutron port vnic_type and perhaps some other port updates that are only valid if the port is not attached to a vm.

      Description of problem:
      The port was initially created with vnic type direct and was changed with 'openstack port set --vnic-type macvtap $PORTID' after creation. The nova_compute container was restarted manually and gets into a restart loop.

      Customer managed to make the change work after rebooting the compute node.
      Customer wants to know if this behaviour is expected or if there's a way to do this chnage w/o rebooting the compute node.

      [stack@qasite1-compute002 ~]$ sudo docker exec nova_libvirt virsh dumpxml instance-00016b53
      <domain type='kvm' id='70'>
      <name>instance-00016b53</name>
      <uuid>4ef19e36-1af5-4a51-95d4-c50bce2236b7</uuid>
      <metadata>
      <nova:instance xmlns:nova="
      http://openstack.org/xmlns/libvirt/nova/1.0
      ">
      <nova:package version="17.0.13-36.el7ost"/>
      <nova:name>simon-test</nova:name>
      <nova:creationTime>2022-06-29 14:53:40</nova:creationTime>
      <nova:flavor name="m1.tiny">
      <nova:memory>512</nova:memory>
      <nova:disk>1</nova:disk>
      <nova:swap>0</nova:swap>
      <nova:ephemeral>0</nova:ephemeral>
      <nova:vcpus>1</nova:vcpus>
      </nova:flavor>
      <nova:owner>
      <nova:user uuid="d44542c3921f44b2a56ba0539b89a64f">simon-test</nova:user>
      <nova:project uuid="70d6aea90ccd4ed6bfee2451b4965508">admin</nova:project>
      </nova:owner>
      </nova:instance>
      </metadata>
      <memory unit='KiB'>524288</memory>
      <currentMemory unit='KiB'>524288</currentMemory>
      <vcpu placement='static' cpuset='1-17,19-35,37-53,55-71'>1</vcpu>
      <cputune>
      <shares>1024</shares>
      </cputune>
      <resource>
      <partition>/machine</partition>
      </resource>
      <sysinfo type='smbios'>
      <system>
      <entry name='manufacturer'>Red Hat</entry>
      <entry name='product'>OpenStack Compute</entry>
      <entry name='version'>17.0.13-36.el7ost</entry>
      <entry name='serial'>39373638-3935-584d-5138-333730323852</entry>
      <entry name='uuid'>4ef19e36-1af5-4a51-95d4-c50bce2236b7</entry>
      <entry name='family'>Virtual Machine</entry>
      </system>
      </sysinfo>
      <os>
      <type arch='x86_64' machine='pc-i440fx-rhel7.6.0'>hvm</type>
      <boot dev='hd'/>
      <smbios mode='sysinfo'/>
      </os>
      <features>
      <acpi/>
      <apic/>
      </features>
      <cpu mode='custom' match='exact' check='full'>
      <model fallback='forbid'>Skylake-Server-IBRS</model>
      <vendor>Intel</vendor>
      <topology sockets='1' cores='1' threads='1'/>
      <feature policy='require' name='ss'/>
      <feature policy='require' name='hypervisor'/>
      <feature policy='require' name='tsc_adjust'/>
      <feature policy='require' name='clflushopt'/>
      <feature policy='require' name='pku'/>
      <feature policy='require' name='md-clear'/>
      <feature policy='require' name='stibp'/>
      <feature policy='require' name='ssbd'/>
      <feature policy='require' name='ibpb'/>
      </cpu>
      <clock offset='utc'>
      <timer name='pit' tickpolicy='delay'/>
      <timer name='rtc' tickpolicy='catchup'/>
      <timer name='hpet' present='no'/>
      </clock>
      <on_poweroff>destroy</on_poweroff>
      <on_reboot>restart</on_reboot>
      <on_crash>destroy</on_crash>
      <devices>
      <emulator>/usr/libexec/qemu-kvm</emulator>
      <disk type='block' device='disk'>
      <driver name='qemu' type='raw' cache='none' io='native' discard='unmap'/>
      <source dev='/dev/sdd'/>
      <backingStore/>
      <target dev='vda' bus='virtio'/>
      <serial>1d31be17-2616-4b4f-a020-cc45207e2bb6</serial>
      <alias name='virtio-disk0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
      </disk>
      <controller type='usb' index='0' model='piix3-uhci'>
      <alias name='usb'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
      </controller>
      <controller type='pci' index='0' model='pci-root'>
      <alias name='pci.0'/>
      </controller>
      <interface type='hostdev' managed='yes'>
      <mac address='fa:16:3e:82:e0:fc'/>
      <driver name='vfio'/>
      <source>
      <address type='pci' domain='0x0000' bus='0x37' slot='0x04' function='0x3'/>
      </source>
      <vlan>
      <tag id='3969'/>
      </vlan>
      <alias name='hostdev0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
      </interface>
      <serial type='pty'>
      <source path='/dev/pts/0'/>
      <log file='/var/lib/nova/instances/4ef19e36-1af5-4a51-95d4-c50bce2236b7/console.log' append='off'/>
      <target type='isa-serial' port='0'>
      <model name='isa-serial'/>
      </target>
      <alias name='serial0'/>
      </serial>
      <console type='pty' tty='/dev/pts/0'>
      <source path='/dev/pts/0'/>
      <log file='/var/lib/nova/instances/4ef19e36-1af5-4a51-95d4-c50bce2236b7/console.log' append='off'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
      </console>
      <input type='tablet' bus='usb'>
      <alias name='input0'/>
      <address type='usb' bus='0' port='1'/>
      </input>
      <input type='mouse' bus='ps2'>
      <alias name='input1'/>
      </input>
      <input type='keyboard' bus='ps2'>
      <alias name='input2'/>
      </input>
      <graphics type='vnc' port='5900' autoport='yes' listen='192.168.20.103' keymap='en-us'>
      <listen type='address' address='192.168.20.103'/>
      </graphics>
      <video>
      <model type='cirrus' vram='16384' heads='1' primary='yes'/>
      <alias name='video0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
      </video>
      <memballoon model='virtio'>
      <stats period='10'/>
      <alias name='balloon0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
      </memballoon>
      </devices>
      <seclabel type='dynamic' model='selinux' relabel='yes'>
      <label>system_u:system_r:svirt_t:s0:c515,c780</label>
      <imagelabel>system_u:object_r:svirt_image_t:s0:c515,c780</imagelabel>
      </seclabel>
      <seclabel type='dynamic' model='dac' relabel='yes'>
      <label>+107:+107</label>
      <imagelabel>+107:+107</imagelabel>
      </seclabel>
      </domain>

      [stack@qasite1-compute002 ~]$
      (overcloud) [stack@qasite1-director ~]$ openstack server show 4ef19e36-1af5-4a51-95d4-c50bce2236b7
      ---------------------------------------------------------------------------------------------+

      Field Value

      ---------------------------------------------------------------------------------------------+

      OS-DCF:diskConfig AUTO
      OS-EXT-AZ:availability_zone nova
      OS-EXT-SRV-ATTR:host qasite1-compute002.localdomain
      OS-EXT-SRV-ATTR:hypervisor_hostname qasite1-compute002.nfvi-r1.stratus.int.bell.ca
      OS-EXT-SRV-ATTR:instance_name instance-00016b53
      OS-EXT-STS:power_state Running
      OS-EXT-STS:task_state None
      OS-EXT-STS:vm_state active
      OS-SRV-USG:launched_at 2022-06-29T14:53:46.000000
      OS-SRV-USG:terminated_at None
      accessIPv4  
      accessIPv6  
      addresses simon-sriov-0-1-test=192.168.69.2
      config_drive  
      created 2022-06-29T14:53:19Z
      flavor m1.tiny (m1.tiny)
      hostId 6040386c9879f232e873c9acf0935810eda062a4d5b1047ace63f8b4
      id 4ef19e36-1af5-4a51-95d4-c50bce2236b7
      image  
      key_name None
      name simon-test
      progress 0
      project_id 70d6aea90ccd4ed6bfee2451b4965508
      properties  
      security_groups name='default'
      status ACTIVE
      updated 2022-06-29T14:53:46Z
      user_id d44542c3921f44b2a56ba0539b89a64f
      volumes_attached id='1d31be17-2616-4b4f-a020-cc45207e2bb6'

      ---------------------------------------------------------------------------------------------+
      (overcloud) [stack@qasite1-director ~]$ openstack network show simon-sriov-0-1-test
      ---------------------------------------------------------------+

      Field Value

      ---------------------------------------------------------------+

      admin_state_up UP
      availability_zone_hints  
      availability_zones  
      created_at 2022-06-16T17:41:58Z
      description  
      dns_domain None
      id cd504b2d-fd24-4ceb-bfbc-1cc8442482ca
      ipv4_address_scope None
      ipv6_address_scope None
      is_default None
      is_vlan_transparent None
      mtu 9000
      name simon-sriov-0-1-test
      port_security_enabled True
      project_id 70d6aea90ccd4ed6bfee2451b4965508
      provider:network_type vlan
      provider:physical_network sriov-0-1
      provider:segmentation_id 3969
      qos_policy_id None
      revision_number 5
      router:external Internal
      segments None
      shared False
      status ACTIVE
      subnets a2749557-7def-4d15-a312-207223d90773
      tags  
      updated_at 2022-06-16T17:45:10Z

      ---------------------------------------------------------------+
      (overcloud) [stack@qasite1-director ~]$ openstack port list --network simon-sriov-0-1-test
      -------------------------------------------------------------------------------------------------------------------------------------------------------------

      ID Name MAC Address Fixed IP Addresses Status

      -------------------------------------------------------------------------------------------------------------------------------------------------------------

      f6c2d743-6f81-4dc8-981a-e5d55fc8a487 simon-test-sriov-port fa:16:3e:82:e0:fc ip_address='192.168.69.2', subnet_id='a2749557-7def-4d15-a312-207223d90773' ACTIVE

      -------------------------------------------------------------------------------------------------------------------------------------------------------------
      (overcloud) [stack@qasite1-director ~]$ openstack port show f6c2d743-6f81-4dc8-981a-e5d55fc8a487
      ---------------------------------------------------------------------------------------------------------+

      Field Value

      ---------------------------------------------------------------------------------------------------------+

      admin_state_up UP
      allowed_address_pairs  
      binding_host_id qasite1-compute002.localdomain
      binding_profile pci_slot='0000:37:04.3', pci_vendor_info='8086:154c', physical_network='sriov-0-1'
      binding_vif_details port_filter='False', vlan='3969'
      binding_vif_type hw_veb
      binding_vnic_type macvtap
      created_at 2022-06-16T18:06:11Z
      data_plane_status None
      description  
      device_id 4ef19e36-1af5-4a51-95d4-c50bce2236b7
      device_owner compute:nova
      dns_assignment None
      dns_name None
      extra_dhcp_opts  
      fixed_ips ip_address='192.168.69.2', subnet_id='a2749557-7def-4d15-a312-207223d90773'
      id f6c2d743-6f81-4dc8-981a-e5d55fc8a487
      ip_address None
      mac_address fa:16:3e:82:e0:fc
      name simon-test-sriov-port
      network_id cd504b2d-fd24-4ceb-bfbc-1cc8442482ca
      option_name None
      option_value None
      port_security_enabled True
      project_id 70d6aea90ccd4ed6bfee2451b4965508
      qos_policy_id None
      revision_number 30
      security_group_ids 7b7bfc8b-7676-4cc7-98bc-b61beae0bce4
      status ACTIVE
      subnet_id None
      tags  
      trunk_details None
      updated_at 2022-06-29T14:55:38Z

      ---------------------------------------------------------------------------------------------------------+

      How reproducible:
      Customer reproduced this in a Q&A environment.
      sosreport of the compute node is attached to the support case.

              jlibosva Jakub Libosvar
              jlibosva Jakub Libosvar
              Ella Shulman Ella Shulman
              rhos-dfg-networking-squad-neutron
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Created:
                Updated:
                Resolved: