From 8812a6b000ac3d48e4547e1f8a62961fe2a4e3b4 Mon Sep 17 00:00:00 2001 From: Brett Holman Date: Tue, 10 Sep 2024 11:21:49 -0500 Subject: [PATCH] feat: Add cloud version string --- pycloudlib/cloud.py | 4 ++++ pycloudlib/lxd/cloud.py | 4 ++++ pycloudlib/qemu/cloud.py | 9 +++++++++ tests/integration_tests/test_public_api.py | 2 ++ 4 files changed, 19 insertions(+) diff --git a/pycloudlib/cloud.py b/pycloudlib/cloud.py index af923559..ab02f25a 100644 --- a/pycloudlib/cloud.py +++ b/pycloudlib/cloud.py @@ -260,6 +260,10 @@ def use_key(self, public_key_path, private_key_path=None, name=None): self._log.debug("using SSH key from %s", public_key_path) self.key_pair = KeyPair(public_key_path, private_key_path, name) + def version(self) -> Optional[str]: + """Version string of the platform.""" + return None + def _check_and_set_config( self, config_file: Optional[ConfigFile], diff --git a/pycloudlib/lxd/cloud.py b/pycloudlib/lxd/cloud.py index 948b0b39..f3dc45b1 100644 --- a/pycloudlib/lxd/cloud.py +++ b/pycloudlib/lxd/cloud.py @@ -437,6 +437,10 @@ def clean(self) -> List[Exception]: exceptions.append(e) return exceptions + def version(self): + """LXD version.""" + return subp(["lxd", "--version"]).rstrip() + class LXDContainer(_BaseLXD): """LXD Containers Cloud Class.""" diff --git a/pycloudlib/qemu/cloud.py b/pycloudlib/qemu/cloud.py index 81f10e3f..e6865b9c 100644 --- a/pycloudlib/qemu/cloud.py +++ b/pycloudlib/qemu/cloud.py @@ -660,3 +660,12 @@ def clean(self) -> List[Exception]: exceptions.append(e) return exceptions + + def version(self): + """Qemu version.""" + return ( + subprocess.run(self.qemu_binary, capture_output=True) + .stdout.decode() + .splitlines() + .pop(0) + ) diff --git a/tests/integration_tests/test_public_api.py b/tests/integration_tests/test_public_api.py index e04db28a..6137b94a 100644 --- a/tests/integration_tests/test_public_api.py +++ b/tests/integration_tests/test_public_api.py @@ -112,6 +112,8 @@ def test_public_api(cloud: BaseCloud): # Not sure there's a great way to test this other than not raising cloud.image_serial(image_id) + version = cloud.version() + assert isinstance(version, str) or version is None with cloud.launch(image_id=image_id, user_data=cloud_config) as instance: instance.wait() exercise_instance(instance)