Skip to content

Commit

Permalink
add network system of multi-host migration
Browse files Browse the repository at this point in the history
add support for network system.

Signed-off-by: Houqi (Nick) Zuo <[email protected]>
  • Loading branch information
nickzhq committed Sep 3, 2024
1 parent 133a137 commit e794ed5
Show file tree
Hide file tree
Showing 5 changed files with 249 additions and 0 deletions.
1 change: 1 addition & 0 deletions virttest/vt_netmgr/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from .vt_netmgr import vt_netmgr
192 changes: 192 additions & 0 deletions virttest/vt_netmgr/vt_netmgr.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
"""
The upper-level network manager.
from virttest.vt_netgr import vt_netmgr
"""

import logging

from virttest.vt_cluster import cluster
from virttest.vt_resmgr.resources.network import network as nt
from virttest.vt_resmgr.resources.network import port

LOG = logging.getLogger("avocado." + __name__)


class _VTNetworkManager(object):
"""
The Network Manager.
"""

def __init__(self):
self._networks = list()
self._ports = list()

def startup(self):
LOG.info(f"Start the network manager!")

def teardown(self):
LOG.info(f"Stop the network manager!")

def define_network_config(self, params):
"""
Translate the parameters of user layer to parameters of vt framework
layer.
:param params: The parameters of user level.
:type params: dict.
:return: The parsed parameters in vt framework layer.
:rtype: dict.
"""
pass

def create_network(self, network_params, vm_name):
"""
Create the network by its cartesian params.
:param network_params: The network tag defined in cartesian params.
:type network_params: String.
:param vm_name: The vm name.
:type vm_name: String.
:return: The uuid of created network.
:rtype: String.
"""
network_obj = nt.Network(network_params, vm_name)
network_obj.create()
self._networks.append(network_obj)
return network_obj.uuid

def delete_network(self, descriptor):
"""
Delete the networks by its descriptor.
:param descriptor: The network name or the uuid.
:type descriptor: String.
"""
be_deleted = []
for obj in self._networks:
if descriptor in (
obj.uuid,
obj.name,
):
obj.delete()
be_deleted.append(obj)

for obj in be_deleted:
self._networks.remove(obj)

def get_network_by_name(self, network_name, vm_name):
"""
Filter the networks based on the network name and vm name.
NOTE: return all networks if descriptor is None.
:param network_name: The network name.
:type network_name: String.
:param vm_name: The vm name.
:type vm_name: String.
:return: The uuid of network or None If not found.
:rtype: String.
"""
for obj in self._networks:
if network_name in (obj.name,) and vm_name in (obj.vm_name,):
return obj.uuid
return None

def query_network(self, uuid):
"""
Get the network by an uuid.
:param uuid: The uuid.
:type uuid: String.
:return: The configuration of network or None if not found.
e.g.: {"uuid": uuid,
"name": name,
"vm_name": vm_name,
"type": type,
"spec": spec}
:rtype: dict.
"""
for obj in self._networks:
if uuid in (obj.uuid,):
return {
"uuid": obj.uuid,
"name": obj.name,
"vm_name": obj.vm_name,
"type": obj.type,
"spec": obj.spec,
}
return None

def create_port(self, name, network_uuid, vm_name, mac_nic, net_type):
"""
Create the port by its params.
:param name: The port name.
:type name: String.
:param network_uuid: The network uuid which this port belongs to.
:type network_uuid: String.
:param vm_name: The vm name.
:type vm_name: String.
:param mac_nic: The mac address.
:type mac_nic: String.
:param net_type: The net type.
:type net_type: String.
"""
port_obj = port.Port(name, network_uuid, vm_name, mac_nic, net_type)
port_obj.create()
self._networks.append(port_obj)

def delete_port(self):
pass

# TODO:
# delete?
def get_port_by_name(self, nic_name, context):
"""
Filter the ports based on the nic name and
context(vm name or network uuid).
:param nic_name: The network name or the uuid.
:type nic_name: String.
:param context: The vm name or network_uuid.
:type context: String.
:return: The uuid of network or None If not found.
:rtype: String.
"""
for obj in self._ports:
if nic_name in (obj.name,) and (
context in (obj.vm_name,) or context in (obj.network_uuid,)
):
return obj.uuid
return None

def query_port(self, uuid):
"""
Get the port configuration.
:param uuid: The uuid.
:type uuid: String.
:return: The port configuration.
:rtype: dict.
"""
for obj in self._ports:
if uuid in (obj.uuid, ):
return {
"uuid": obj.uuid,
"name": obj.name,
"network_uuid": obj.network_uuid,
"vm_name": obj.vm_name,
"mac_nic": obj.mac_nic,
"net_type": obj.net_type,
"created_by_vt": obj.created_by_vt,
}
return None


vt_netmgr = _VTNetworkManager()
Empty file.
29 changes: 29 additions & 0 deletions virttest/vt_resmgr/resources/network/network.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from abc import ABC
import uuid


class Network(ABC):
def __init__(self, network_params, vm_name):
self.uuid = uuid.uuid4().hex
self.name = network_params.keys()[0]
self.vm_name = vm_name
self._type = network_params["type"]
self._spec = network_params["spec"]

@property
def type(self):
return self._type

@property
def spec(self):
return self._spec

def create(self):
# TODO
# create the port for the self._spec
pass

def delete(self):
# TODO
# delete the port for the self._spec
pass
27 changes: 27 additions & 0 deletions virttest/vt_resmgr/resources/network/port.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from abc import ABC
import uuid

# from virttest.vt_resmgr.resources.network import PortType


class Port(ABC):
def __init__(self, name, network_uuid, vm_name, mac_nic, net_type):
self.uuid = uuid.uuid4().hex
self.name = name
self.network_uuid = network_uuid
self.vm_name = vm_name
self.mac_nic = mac_nic
# if dev_type not in PortType:
# raise NotImplementedError("This type is NOT supported!")
self.net_type = net_type
self.created_by_vt = None

def create(self):
# TODO
# create the port
pass

def delete(self):
# TODO
# delete the port
pass

0 comments on commit e794ed5

Please sign in to comment.