summaryrefslogtreecommitdiff
path: root/bin
diff options
Diffstat (limited to 'bin')
-rwxr-xr-xbin/virtualization100
1 files changed, 66 insertions, 34 deletions
diff --git a/bin/virtualization b/bin/virtualization
index 2b04aed..0954691 100755
--- a/bin/virtualization
+++ b/bin/virtualization
@@ -529,48 +529,56 @@ class LXDTest(object):
# Initialize LXD
result = True
logging.debug("Attempting to initialize LXD")
+ # TODO: Need a method to see if LXD is already initialized
try:
- check_output(['lxd'], universal_newlines=True, stderr=STDOUT)
- except CalledProcessError as err:
- logging.debug('LXD appears to be running')
- logging.debug(err.output)
- else:
- try:
- check_output(['lxd', 'init', '--auto'], stderr=DEVNULL)
- except CalledProcessError as init_error:
- logging.error('Unable to initialize LXD')
- logging.error(init_error.output)
- result = False
+ check_output(['lxd', 'init', '--auto'], stderr=DEVNULL)
+ except CalledProcessError as init_error:
+ logging.error('Unable to initialize LXD')
+ logging.debug(init_error.output)
+ result = False
# Retrieve and insert LXD images
+ logging.debug("Downloading template.")
if self.template_url is not None:
- filename = urlparse(self.template_url).path.split('/')[-1]
- self.template_tarball = self.download_images(self.template_url,
- filename)
- if not self.template_tarball:
- logging.error("Unable to download {} from "
- "{}".format(self.template_tarball, self.template_url))
- logging.error("Aborting")
- result = False
-
+ targetfile = urlparse(self.template_url).path.split('/')[-1]
+ filename = os.path.join('/tmp', targetfile)
+ if not os.path.isfile(filename):
+ self.template_tarball = self.download_images(self.template_url,
+ filename)
+ if not self.template_tarball:
+ logging.error("Unable to download {} from "
+ "{}".format(self.template_tarball, self.template_url))
+ logging.error("Aborting")
+ result = False
+ else:
+ logging.debug("Template file {} already exists. "
+ "Skipping Download.".format(filename))
+ self.template_tarball = filename
+
+ logging.debug("Downloading rootfs.")
if self.rootfs_url is not None:
- filename = urlparse(self.rootfs_url).path.split('/')[-1]
- self.rootfs_tarball = self.download_images(self.rootfs_url,
+ targetfile = urlparse(self.rootfs_url).path.split('/')[-1]
+ filename = os.path.join('/tmp', targetfile)
+ if not os.path.isfile(filename):
+ self.rootfs_tarball = self.download_images(self.rootfs_url,
filename)
- if not self.rootfs_tarball:
- logging.error("Unable to download {} from{}".format(
+ if not self.rootfs_tarball:
+ logging.error("Unable to download {} from{}".format(
self.rootfs_tarball, self.rootfs_url))
- logging.error("Aborting")
- result = False
+ logging.error("Aborting")
+ result = False
+ else:
+ logging.debug("Template file {} already exists. "
+ "Skipping Download.".format(filename))
+ self.rootfs_tarball = filename
# Insert images
- # TODO:
- # * catch situation where image already exists
+ # TODO: check to see if ubuntu already exists
logging.debug("Importing images into LXD")
cmd = 'lxc image import {} rootfs {} --alias ubuntu'.format(
self.template_tarball, self.rootfs_tarball)
try:
- check_output(shlex.split(cmd), universal_newlines=True)
+ check_output(shlex.split(cmd), stderr=STDOUT, universal_newlines=True)
except CalledProcessError as err:
logging.error("Failed to insert LXC images.")
logging.error(err.output)
@@ -600,6 +608,22 @@ class LXDTest(object):
return filename
+ def cleanup(self):
+ # Clean up image
+ logging.debug('Cleaning up images and containers created during test')
+ try:
+ check_output(['lxc', 'image', 'delete', 'ubuntu'], stderr=STDOUT, universal_newlines=True)
+ except CalledProcessError as err:
+ logging.error('Unable to remove image from LXC image store. This may cause problems on re-runs')
+ logging.debug(err.output)
+
+ # Clean up container
+ try:
+ check_output(['lxc', 'delete', 'testbed', '--force'], stderr=STDOUT, universal_newlines=True)
+ except CalledProcessError as err:
+ logging.error('Unable to destroy container. This may cause problems on re-runs')
+ logging.debug(err.output)
+
def start(self):
"""
Creates a container and performs the test
@@ -609,22 +633,24 @@ class LXDTest(object):
logging.warn("One or more setup stages failed.")
# Create container
+ logging.debug("Launching container")
try:
- check_call(['lxc', 'launch', 'ubuntu', "testbed"])
+ check_output(['lxc', 'launch', 'ubuntu', "testbed"], stderr=STDOUT, universal_newlines=True)
except CalledProcessError as err:
logging.error("Unable to launch container!")
- logging.error(err)
+ logging.debug(err.output)
return False
+
+ time.sleep(60)
cmd = "lxc exec testbed uptime"
try:
- print(check_output(shlex.split(cmd), universal_newlines=True))
+ check_output(shlex.split(cmd), stderr=STDOUT, universal_newlines=True)
except CalledProcessError as err:
logging.error("Failed to connect to container!")
- logging.error(err)
+ logging.debug(err.output)
return False
- print("PASS: Container was succssfully started and checked")
return True
def test_lxd(args):
@@ -633,6 +659,12 @@ def test_lxd(args):
lxd_test = LXDTest(args.template, args.rootfs)
result = lxd_test.start()
+ lxd_test.cleanup()
+ if result:
+ print("PASS: Container was succssfully started and checked")
+ else:
+ print("FAIL: Container was not started and checked")
+
sys.exit(result)
def test_kvm(args):