def test_vmi_sync_create( minimalistic_topology, vmware_controller, vcenter_api_client, vnc_test_client, vmware_dpg, vmware_vm, ): # User creates a DPG (dpg-1) and the event is properly handled dpg_created_update = vcenter_api_client.create_dpg(vmware_dpg) vmware_controller.handle_update(dpg_created_update) # CVFM shuts down # User creates a VM (vm-1) in dpg-1 and the event is not handled vcenter_api_client.create_vm(vmware_vm) # CVFM starts up - sync vmware_controller.sync() # VPG (esxi-1_dvs-1) should be created in VNC created_vpg = vnc_test_client.read_vpg( models.generate_uuid("esxi-1_dvs-1")) assert created_vpg is not None # VMI (esxi-1_dvs-1_dpg-1) should be created in VNC and should be # attached to VPG (esxi-1_dvs-1) created_vmi = vnc_test_client.read_vmi( models.generate_uuid("esxi-1_dvs-1_dpg-1")) utils.verify_vnc_vmi( created_vmi, vmi_name="esxi-1_dvs-1_dpg-1", vpg_name="esxi-1_dvs-1", vn_name="dvs-1_dpg-1", vlan=5, ) utils.verify_vmi_bindings(created_vmi, created_vpg)
def test_create_vmi_bindings(vnc_api_client, vnc_lib, vmi_1, vpg_1): vpg_1.physical_interface_refs = [ { "to": ["default-global-system-config", "qfx-1", "xe-0/0/1"] }, { "to": ["default-global-system-config", "qfx-2", "xe-0/0/2"] }, ] vnc_api_client.create_vmi_bindings(vmi_1, vpg_1) updated_vmi = vnc_lib.virtual_machine_interface_update.call_args[0][0] utils.verify_vmi_bindings(updated_vmi, vpg_1)
def test_vm_created( minimalistic_topology, vnc_test_client, vmware_controller, vcenter_api_client, vmware_vm, vmware_dpg_1, ): dpg_created_update = vcenter_api_client.create_dpg(vmware_dpg_1) vmware_controller.handle_update(dpg_created_update) vm_created_update = vcenter_api_client.create_vm(vmware_vm) vmware_controller.handle_update(vm_created_update) vmis = vnc_test_client.read_all_vmis() assert len(vmis) == 1 vpgs = vnc_test_client.read_all_vpgs() assert len(vpgs) == 1 created_vpg = vpgs["esxi-1_dvs-1"] created_vmi = vmis["esxi-1_dvs-1_dpg-1"] utils.verify_vnc_vpg( vnc_vpg=created_vpg, vpg_name="esxi-1_dvs-1", pi_names=["xe-0/0/0"], vmi_names=["esxi-1_dvs-1_dpg-1"], ) utils.verify_vnc_vmi( vnc_vmi=created_vmi, vmi_name="esxi-1_dvs-1_dpg-1", vpg_name="esxi-1_dvs-1", vn_name="dvs-1_dpg-1", vlan=5, ) utils.verify_vmi_bindings(created_vmi, created_vpg)
def test_vm_created_on_two_nodes( topology_with_spine_switch, vnc_test_client, vmware_controller, vcenter_api_client, vmware_vm_1, vmware_vm_2, vmware_vm_3, vmware_vm_4, vmware_vm_5, vmware_dpg_1, vmware_dpg_2, vmware_dpg_3, ): # dpg-1 created on dvs-1 dpg_created_update = vcenter_api_client.create_dpg(vmware_dpg_1) vmware_controller.handle_update(dpg_created_update) # dpg-2 created on dvs-1 dpg_created_update = vcenter_api_client.create_dpg(vmware_dpg_2) vmware_controller.handle_update(dpg_created_update) # dpg-3 created on dvs-2 dpg_created_update = vcenter_api_client.create_dpg(vmware_dpg_3) vmware_controller.handle_update(dpg_created_update) # vm-1 created on host esxi-1 with single interface in (dvs-1, dpg-1) vm_created_update_1 = vcenter_api_client.create_vm(vmware_vm_1) vmware_controller.handle_update(vm_created_update_1) # vm-2 created on host esxi-2 with two interfaces in (dvs-1, dpg-1) and ( # dvs-2, dpg-3) vm_created_update_2 = vcenter_api_client.create_vm(vmware_vm_2) vmware_controller.handle_update(vm_created_update_2) # vm-3 created on host esxi-1 with two interfaces in (dvs-1, dpg-1) and ( # dvs-2, dpg-3) vm_created_update_3 = vcenter_api_client.create_vm(vmware_vm_3) vmware_controller.handle_update(vm_created_update_3) # VM4 created on host esxi-1 with one interface in (dvs-1, dpg-2) vm_created_update_4 = vcenter_api_client.create_vm(vmware_vm_4) vmware_controller.handle_update(vm_created_update_4) # VM5 created on host esxi-2 with one interface in (dvs-1, dpg-2) vm_created_update_5 = vcenter_api_client.create_vm(vmware_vm_5) vmware_controller.handle_update(vm_created_update_5) vpgs = vnc_test_client.read_all_vpgs() assert len(vpgs) == 4 created_vpg = vpgs["esxi-1_dvs-1"] utils.verify_vnc_vpg( vnc_vpg=created_vpg, vpg_name="esxi-1_dvs-1", pi_names=["xe-0/0/1", "xe-0/0/5"], vmi_names=["esxi-1_dvs-1_dpg-1", "esxi-1_dvs-1_dpg-2"], ) created_vpg = vpgs["esxi-1_dvs-2"] utils.verify_vnc_vpg( vnc_vpg=created_vpg, vpg_name="esxi-1_dvs-2", pi_names=["xe-0/0/2", "xe-0/0/6"], vmi_names=["esxi-1_dvs-2_dpg-3"], ) created_vpg = vpgs["esxi-2_dvs-1"] utils.verify_vnc_vpg( vnc_vpg=created_vpg, vpg_name="esxi-2_dvs-1", pi_names=["xe-0/0/3", "xe-0/0/7"], vmi_names=["esxi-2_dvs-1_dpg-1", "esxi-2_dvs-1_dpg-2"], ) created_vpg = vpgs["esxi-2_dvs-2"] utils.verify_vnc_vpg( vnc_vpg=created_vpg, vpg_name="esxi-2_dvs-2", pi_names=["xe-0/0/4", "xe-0/0/8"], vmi_names=["esxi-2_dvs-2_dpg-3"], ) vmis = vnc_test_client.read_all_vmis() assert len(vmis) == 6 for vmi in list(vmis.values()): if "dpg-1" in vmi.name: expected_vlan = 5 elif "dpg-2" in vmi.name: expected_vlan = 6 elif "dpg-3" in vmi.name: expected_vlan = 7 utils.verify_vnc_vmi(vnc_vmi=vmi, vlan=expected_vlan) vpg_name = "_".join(vmi.name.split("_")[:-1]) utils.verify_vmi_bindings(vmi, vpgs[vpg_name])
def test_dpg_reconfiguration( topology_with_two_nodes, vnc_test_client, vcenter_api_client, vmware_controller, vmware_dpg, vmware_vm_1, vmware_vm_2, ): # dpg-1 created in dvs-1 with VLAN 5 dpg_created_update = vcenter_api_client.create_dpg(vmware_dpg) vmware_controller.handle_update(dpg_created_update) # vm-1 created on host esxi-1 with single interface in (dvs-1, dpg-1) vm_created_update_1 = vcenter_api_client.create_vm(vmware_vm_1) vmware_controller.handle_update(vm_created_update_1) # vm-2 created on host esxi-2 with single interface in (dvs-1, dpg-1) vm_created_update_2 = vcenter_api_client.create_vm(vmware_vm_2) vmware_controller.handle_update(vm_created_update_2) vmis = vnc_test_client.read_all_vmis() assert len(vmis) == 2 vpgs = vnc_test_client.read_all_vpgs() created_vmi = vmis["esxi-1_dvs-1_dpg-1"] utils.verify_vnc_vmi( vnc_vmi=created_vmi, vmi_name="esxi-1_dvs-1_dpg-1", vpg_name="esxi-1_dvs-1", vn_name="dvs-1_dpg-1", vlan=5, ) created_vpg = vpgs["esxi-1_dvs-1"] utils.verify_vmi_bindings(created_vmi, created_vpg) created_vmi = vmis["esxi-2_dvs-1_dpg-1"] utils.verify_vnc_vmi( vnc_vmi=created_vmi, vmi_name="esxi-2_dvs-1_dpg-1", vpg_name="esxi-2_dvs-1", vn_name="dvs-1_dpg-1", vlan=5, ) # dpg-1 VLAN reconfigured from 5 to 15 dpg_reconfigured_update = vcenter_api_client.reconfigure_dpg( vmware_dpg, 15) vmware_controller.handle_update(dpg_reconfigured_update) vmis = vnc_test_client.read_all_vmis() assert len(vmis) == 2 vpgs = vnc_test_client.read_all_vpgs() created_vmi = vmis["esxi-1_dvs-1_dpg-1"] utils.verify_vnc_vmi( vnc_vmi=created_vmi, vmi_name="esxi-1_dvs-1_dpg-1", vpg_name="esxi-1_dvs-1", vn_name="dvs-1_dpg-1", vlan=15, ) created_vpg = vpgs["esxi-1_dvs-1"] utils.verify_vmi_bindings(created_vmi, created_vpg) created_vmi = vmis["esxi-2_dvs-1_dpg-1"] utils.verify_vnc_vmi( vnc_vmi=created_vmi, vmi_name="esxi-2_dvs-1_dpg-1", vpg_name="esxi-2_dvs-1", vn_name="dvs-1_dpg-1", vlan=15, ) created_vpg = vpgs["esxi-2_dvs-1"] utils.verify_vmi_bindings(created_vmi, created_vpg)
def test_add_new_node( topology_update_msg_timeout, minimalistic_topology, vnc_test_client, vmware_controller, vcenter_api_client, vmware_dpg_1, vmware_dpg_2, vmware_vm_1, vmware_vm_2, vnc_monitor, lock, sync_finished, ): topology_update_msg_timeout = 1 vnc_monitor_greenlet = gevent.spawn(vnc_monitor.start) # create a DPG dpg_created_update = vcenter_api_client.create_dpg(vmware_dpg_1) vmware_controller.handle_update(dpg_created_update) # create a VM in a DPG vm_created_update = vcenter_api_client.create_vm(vmware_vm_1) vmware_controller.handle_update(vm_created_update) with lock: # change topology - add a new node and a new dvs supported by this node existing_pi_uuid = vnc_test_client.read_all_physical_interface_uuids()[ 0 ] existing_pi = vnc_test_client.read_physical_interface(existing_pi_uuid) pr = vnc_test_client.read_physical_router(existing_pi.parent_uuid) pi = vnc_test_client.create_physical_interface( "xe-0/0/1", "11:22:33:44:55:03", pr ) esxi = vnc_test_client.create_node("esxi-2", "10.10.10.12") port = vnc_test_client.create_port( "eth1", "11:22:33:44:55:01", esxi, "dvs-2" ) vnc_test_client.add_port_to_physical_interface(pi, port) vcenter_api_client.add_host("esxi-2") sync_finished.wait() # create a new DPG in the new DVS dpg_created_update = vcenter_api_client.create_dpg(vmware_dpg_2) vmware_controller.handle_update(dpg_created_update) # create a new VM in the new DPG vm_created_update = vcenter_api_client.create_vm(vmware_vm_2) vmware_controller.handle_update(vm_created_update) # verify that VPGs and VMIs exist for all VMs and DPGs vmis = vnc_test_client.read_all_vmis() assert len(vmis) == 2 vpgs = vnc_test_client.read_all_vpgs() assert len(vpgs) == 2 created_vpg_1 = vpgs["esxi-1_dvs-1"] created_vmi_1 = vmis["esxi-1_dvs-1_dpg-1"] created_vpg_2 = vpgs["esxi-2_dvs-2"] created_vmi_2 = vmis["esxi-2_dvs-2_dpg-2"] utils.verify_vnc_vpg( vnc_vpg=created_vpg_1, vpg_name="esxi-1_dvs-1", pi_names=["xe-0/0/0"], vmi_names=["esxi-1_dvs-1_dpg-1"], ) utils.verify_vnc_vmi( vnc_vmi=created_vmi_1, vmi_name="esxi-1_dvs-1_dpg-1", vpg_name="esxi-1_dvs-1", vn_name="dvs-1_dpg-1", vlan=5, ) utils.verify_vnc_vpg( vnc_vpg=created_vpg_2, vpg_name="esxi-2_dvs-2", pi_names=["xe-0/0/1"], vmi_names=["esxi-2_dvs-2_dpg-2"], ) utils.verify_vnc_vmi( vnc_vmi=created_vmi_2, vmi_name="esxi-2_dvs-2_dpg-2", vpg_name="esxi-2_dvs-2", vn_name="dvs-2_dpg-2", vlan=6, ) utils.verify_vmi_bindings(created_vmi_1, created_vpg_1) utils.verify_vmi_bindings(created_vmi_2, created_vpg_2) vnc_monitor_greenlet.kill()
def test_remove_node( topology_update_msg_timeout, topology_with_two_nodes, vnc_test_client, vmware_controller, vcenter_api_client, vmware_dpg_1, vmware_dpg_2, vmware_vm_1, vmware_vm_2, vnc_monitor, lock, sync_finished, ): topology_update_msg_timeout = 1 vnc_monitor_greenlet = gevent.spawn(vnc_monitor.start) # create a DPG dpg_created_update = vcenter_api_client.create_dpg(vmware_dpg_1) vmware_controller.handle_update(dpg_created_update) # create a VM in a DPG vm_created_update = vcenter_api_client.create_vm(vmware_vm_1) vmware_controller.handle_update(vm_created_update) # create a new DPG in the new DVS dpg_created_update = vcenter_api_client.create_dpg(vmware_dpg_2) vmware_controller.handle_update(dpg_created_update) # create a new VM in the new DPG vm_created_update = vcenter_api_client.create_vm(vmware_vm_2) vmware_controller.handle_update(vm_created_update) with lock: # change topology - remove a node (esxi-2) and a dvs (dvs-2) supported # by this node vnc_test_client.vnc_lib.physical_interface_delete( ["default-global-system-config", "qfx-1", "xe-0/0/2"] ) vnc_test_client.vnc_lib.port_delete( ["default-global-system-config", "esxi-2", "eth2"] ) vnc_test_client.vnc_lib.node_delete( ["default-global-system-config", "esxi-2"] ) sync_finished.wait() # verify that VPGs and VMIs exist for all VMs and DPGs vmis = vnc_test_client.read_all_vmis() assert len(vmis) == 1 vpgs = vnc_test_client.read_all_vpgs() assert len(vpgs) == 1 created_vpg_1 = vpgs["esxi-1_dvs-1"] created_vmi_1 = vmis["esxi-1_dvs-1_dpg-1"] utils.verify_vnc_vpg( vnc_vpg=created_vpg_1, vpg_name="esxi-1_dvs-1", pi_names=["xe-0/0/0"], vmi_names=["esxi-1_dvs-1_dpg-1"], ) utils.verify_vnc_vmi( vnc_vmi=created_vmi_1, vmi_name="esxi-1_dvs-1_dpg-1", vpg_name="esxi-1_dvs-1", vn_name="dvs-1_dpg-1", vlan=5, ) utils.verify_vmi_bindings(created_vmi_1, created_vpg_1) vnc_monitor_greenlet.kill()