Skip to content

Commit

Permalink
Add storage and image management support
Browse files Browse the repository at this point in the history
Signed-off-by: Zhenchao Liu <[email protected]>
  • Loading branch information
zhencliu committed Jun 13, 2024
1 parent 2489bde commit 6b3310e
Show file tree
Hide file tree
Showing 64 changed files with 3,478 additions and 0 deletions.
7 changes: 7 additions & 0 deletions avocado_vt/plugins/vt_cluster.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
from avocado.utils.stacktrace import log_exc_info

from virttest.vt_cluster import cluster, node_metadata
from virttest.vt_imgr import vt_imgr
from virttest.vt_resmgr import startup_resmgr, teardown_resmgr


class ClusterCreationError(Exception):
Expand All @@ -31,7 +33,10 @@ def pre_tests(self, job):
try:
for node in cluster.get_all_nodes():
node.start_agent_server()

node_metadata.load_metadata()
startup_resmgr()
vt_imgr.startup()

except Exception as detail:
msg = "Failure trying to set Avocado-VT job env: %s" % detail
Expand All @@ -44,6 +49,8 @@ def post_tests(self, job):
cluster_dir = os.path.join(job.logdir, "cluster")
for node in cluster.get_all_nodes():
try:
teardown_resmgr()
vt_imgr.teardown()
node_dir = os.path.join(cluster_dir, node.name)
os.makedirs(node_dir)
node.upload_agent_log(node_dir)
Expand Down
23 changes: 23 additions & 0 deletions virttest/bootstrap.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from avocado.utils import process

from virttest.vt_cluster import cluster, node
from virttest.vt_resmgr import setup_resmgr

from . import arch, asset, cartesian_config, data_dir, defaults, utils_selinux
from .compat import get_opt
Expand Down Expand Up @@ -894,6 +895,27 @@ def _register_hosts(hosts_configs):
LOG.debug("Host %s registered", host)


def _setup_managers(pools_params):
def _verify_pools_params():
# Check if the pools' params are set correctly
required_options = ["type", "access.nodes"]
for params in pools_params.values():
for pool_name, pool_params in params.items():
for option in required_options:
opts = option.split('.')
i, sub_params = 0, pool_params
while i < len(opts):
if opts[i] not in sub_params:
raise ValueError(f"Missed '{opts[i]}' for '{pool_name}'")
elif not sub_params[opts[i]]:
raise ValueError(f"Missed a value for '{opts[i]}' for '{pool_name}'")
sub_params = sub_params.get(opts[i])
i += 1

_verify_pools_params()
setup_resmgr(pools_params)


def _config_master_server(master_config):
"""Configure the master server."""
if master_config:
Expand Down Expand Up @@ -1083,6 +1105,7 @@ def bootstrap(options, interactive=False):
cluster_config = _load_cluster_config(vt_cluster_config)
_register_hosts(cluster_config.get("hosts"))
_config_master_server(cluster_config.get("master"))
_setup_managers(cluster_config.get("pools"))

LOG.info("")
LOG.info("VT-BOOTSTRAP FINISHED")
Expand Down
2 changes: 2 additions & 0 deletions virttest/vt_agent/agents/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from .image_agent import image_agent
from .resource_backing_agent import resbacking_agent
24 changes: 24 additions & 0 deletions virttest/vt_agent/agents/image_agent.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import logging

from .images import get_image_handler


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


class _ImageAgent(object):

def __init__(self):
pass

def info_image(self, image_config):
return image_config

def update_image(self, image_config, update_config):
cmd, arguments = update_config.popitem()
image_type = image_config["meta"]["type"]
handler = get_image_handler(image_type, cmd)
handler(image_config, arguments)


image_agent = _ImageAgent()
16 changes: 16 additions & 0 deletions virttest/vt_agent/agents/images/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from .qemu import get_qemu_image_handler
#from .libvirt import get_libvirt_image_handler


_image_handler_getters = {
"qemu": get_qemu_image_handler,
#"libvirt": get_libvirt_image_handler,
}


def get_image_handler(image_type, cmd):
getter = _image_handler_getters.get(image_type)
return getter(cmd)


__all__ = ["get_image_handler"]
14 changes: 14 additions & 0 deletions virttest/vt_agent/agents/images/qemu/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from . import qemu_image_handlers


_qemu_image_handlers = {
"create": qemu_image_handlers.create,
"destroy": qemu_image_handlers.destroy,
}


def get_qemu_image_handler(cmd):
return _qemu_image_handlers.get(cmd)


__all__ = ["get_qemu_image_handler"]
Loading

0 comments on commit 6b3310e

Please sign in to comment.