summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorParide Legovini <paride.legovini@canonical.com>2020-07-09 17:21:34 +0200
committerGitHub <noreply@github.com>2020-07-09 10:21:34 -0500
commite753141fc7844e68b1f380d26fb3d250eb464ff7 (patch)
tree63fd59902300eea392a28bf354f0db430d4cf33f /tests
parentd373a8e1ae602c98bf89dc962d0d2a27815fb183 (diff)
downloadvyos-cloud-init-e753141fc7844e68b1f380d26fb3d250eb464ff7.tar.gz
vyos-cloud-init-e753141fc7844e68b1f380d26fb3d250eb464ff7.zip
LXD cloud_tests: support more lxd image formats (#482)
Update lxd_export method to detect and handle different image formats cloud_tests will only support the "split" type images which exports a compressed (xz) tarball of metadata and a rootfs (of different formats). For non-split image formats (single tarball with metadata + rootfs) we now raise an exception indicating that the requested image is not supported at this time.
Diffstat (limited to 'tests')
-rw-r--r--tests/cloud_tests/platforms/lxd/image.py33
1 files changed, 25 insertions, 8 deletions
diff --git a/tests/cloud_tests/platforms/lxd/image.py b/tests/cloud_tests/platforms/lxd/image.py
index 8934fb74..a88b47f3 100644
--- a/tests/cloud_tests/platforms/lxd/image.py
+++ b/tests/cloud_tests/platforms/lxd/image.py
@@ -76,19 +76,36 @@ class LXDImage(Image):
}
def export_image(self, output_dir):
- """Export image from lxd image store to (split) tarball on disk.
+ """Export image from lxd image store to disk.
- @param output_dir: dir to store tarballs in
- @return_value: tuple of path to metadata tarball and rootfs tarball
+ @param output_dir: dir to store the exported image in
+ @return_value: tuple of path to metadata tarball and rootfs
+
+ Only the "split" image format with separate rootfs and metadata
+ files is supported, e.g:
+
+ 71f171df[...]cd31.squashfs (could also be: .tar.xz or .tar.gz)
+ meta-71f171df[...]cd31.tar.xz
+
+ Combined images made by a single tarball are not supported.
"""
# pylxd's image export feature doesn't do split exports, so use cmdline
- subp.subp(['lxc', 'image', 'export', self.pylxd_image.fingerprint,
- output_dir], capture=True)
- tarballs = [p for p in os.listdir(output_dir) if p.endswith('tar.xz')]
+ fp = self.pylxd_image.fingerprint
+ subp.subp(['lxc', 'image', 'export', fp, output_dir], capture=True)
+ image_files = [p for p in os.listdir(output_dir) if fp in p]
+
+ if len(image_files) != 2:
+ raise NotImplementedError(
+ "Image %s has unsupported format. "
+ "Expected 2 files, found %d: %s."
+ % (fp, len(image_files), ', '.join(image_files)))
+
metadata = os.path.join(
- output_dir, next(p for p in tarballs if p.startswith('meta-')))
+ output_dir,
+ next(p for p in image_files if p.startswith('meta-')))
rootfs = os.path.join(
- output_dir, next(p for p in tarballs if not p.startswith('meta-')))
+ output_dir,
+ next(p for p in image_files if not p.startswith('meta-')))
return (metadata, rootfs)
def import_image(self, metadata, rootfs):