sts-sponsors team mailing list archive
-
sts-sponsors team
-
Mailing list archive
-
Message #04387
[Merge] ~adam-collard/maas-ci/+git/system-tests:lxd-status-specific into ~maas-committers/maas-ci/+git/system-tests:master
Adam Collard has proposed merging ~adam-collard/maas-ci/+git/system-tests:lxd-status-specific into ~maas-committers/maas-ci/+git/system-tests:master.
Commit message:
Add lxd.instance_status(name) prefer over broad lxd.list_instances()
Requested reviews:
MAAS Committers (maas-committers)
For more details, see:
https://code.launchpad.net/~adam-collard/maas-ci/+git/system-tests/+merge/435527
--
Your team MAAS Committers is requested to review the proposed merge of ~adam-collard/maas-ci/+git/system-tests:lxd-status-specific into ~maas-committers/maas-ci/+git/system-tests:master.
diff --git a/systemtests/env_builder/test_basic.py b/systemtests/env_builder/test_basic.py
index f346095..7a25fab 100644
--- a/systemtests/env_builder/test_basic.py
+++ b/systemtests/env_builder/test_basic.py
@@ -117,10 +117,13 @@ class TestSetup:
) -> None:
"""Ensure that we have a Ready VM at the end."""
lxd = get_lxd(logger=testlog)
- instances = lxd.list_instances()
vm_name = instance_config.name
- # Force delete the VM so we know we're starting clean
- if vm_name in instances:
+ try:
+ lxd.instance_status(vm_name)
+ except ValueError:
+ pass
+ else:
+ # Force delete the VM so we know we're starting clean
lxd.delete(vm_name)
# Need to create a network device with a hwaddr
@@ -143,21 +146,27 @@ class TestSetup:
# Machine not registered, let's boot it up
@retry(tries=5, delay=5, backoff=1.2, logger=testlog)
def _boot_vm(vm_name: str) -> None:
- vm_details = lxd.list_instances()[vm_name]
- if vm_details["status"] == "Running":
+ status = lxd.instance_status(vm_name)
+ if status == "Running":
+ testlog.debug(f"{vm_name} is already running, restarting")
lxd.restart(vm_name)
- elif vm_details["status"] == "Stopped":
+ elif status == "Stopped":
+ testlog.debug(f"{vm_name} is stopped, starting")
try:
lxd.start(vm_name)
except CalledProcessError:
lxd._run(["lxc", "info", "--show-log", vm_name])
raise
else:
- assert (
- False
- ), f"Don't know how to handle lxd_vm status: {vm_details['status']}"
+ assert False, f"Don't know how to handle lxd_vm status: {status}"
_boot_vm(vm_name)
+ try:
+ vm_status = lxd.instance_status(vm_name)
+ except ValueError:
+ vm_status = "not available"
+ testlog.debug(f"{vm_name} is {vm_status}")
+
machine = wait_for_new_machine(maas_api_client, mac_address, vm_name)
# Make sure we have power parameters set
diff --git a/systemtests/lxd.py b/systemtests/lxd.py
index 736c1f6..03a5f1d 100644
--- a/systemtests/lxd.py
+++ b/systemtests/lxd.py
@@ -408,13 +408,22 @@ class CLILXD:
argv.append("--force")
return self._run(argv)
- def is_running(self, instance_name: str) -> bool:
+ def instance_status(self, instance_name: str) -> str:
result = self._run(["lxc", "info", instance_name])
for line in result.stdout.splitlines():
key, value = line.split(": ", 1)
if key == "Status":
- return value == "RUNNING"
- return False
+ return value
+ else:
+ raise ValueError(f"Unable to find Status of {instance_name}")
+
+ def is_running(self, instance_name: str) -> bool:
+ try:
+ status = self.instance_status(instance_name)
+ except ValueError:
+ return False
+ else:
+ return status == "RUNNING"
def restart(
self, instance_name: str, force: bool = False
diff --git a/systemtests/utils.py b/systemtests/utils.py
index c120dbe..d3858bd 100644
--- a/systemtests/utils.py
+++ b/systemtests/utils.py
@@ -201,7 +201,7 @@ def wait_for_new_machine(
maybe_machines = quiet_client.list_machines(mac_address=mac_address)
debug_outputs.append(repr(maybe_machines))
if "lxd" in [m["power_type"] for m in machines]:
- debug_outputs.append(repr(api_client.lxd.list_instances()))
+ debug_outputs.append(repr(api_client.lxd.list_instances().get(machine_name)))
raise UnexpectedMachineStatus(
machine_name, "New", retry_info.elapsed, debug_outputs
Follow ups