summaryrefslogtreecommitdiffstats
path: root/dovetail/container.py
diff options
context:
space:
mode:
Diffstat (limited to 'dovetail/container.py')
-rw-r--r--dovetail/container.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/dovetail/container.py b/dovetail/container.py
new file mode 100644
index 00000000..918edb33
--- /dev/null
+++ b/dovetail/container.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+#
+# grakiss.wanglei@huawei.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+
+import utils.dovetail_logger as dt_logger
+import utils.dovetail_utils as dt_utils
+from conf.dovetail_config import *
+
+logger = dt_logger.Logger('container.py').getLogger()
+
+class Container:
+
+ container_list = {}
+ has_pull_latest_image = {'yardstick':False, 'functest':False}
+
+ def __init__(cls):
+ pass
+
+ def __str__(cls):
+ pass
+
+ @classmethod
+ def get(cls, type):
+ return cls.container_list[type]
+
+ @classmethod
+ def get_docker_image(cls, type):
+ return '%s:%s' % (dovetail_config[type]['image_name'], dovetail_config[type]['docker_tag'])
+
+ @classmethod
+ def create(cls, type):
+ #sshkey="-v /root/.ssh/id_rsa:/root/.ssh/id_rsa "
+ docker_image = cls.get_docker_image(type)
+ envs = dovetail_config[type]['envs']
+ opts = dovetail_config[type]['opts']
+ sshkey = ''
+ result_volume = ' -v %s:%s ' % (dovetail_config['result_dir'],dovetail_config[type]['result']['dir'])
+ cmd = 'sudo docker run %s %s %s %s %s /bin/bash' % (opts, envs, sshkey, result_volume, docker_image)
+ dt_utils.exec_cmd(cmd,logger)
+ ret, container_id=dt_utils.exec_cmd("sudo docker ps | grep "+ docker_image + " | awk '{print $1}' | head -1",logger)
+ cls.container_list[type] = container_id
+ return container_id
+
+ @classmethod
+ def pull_image(cls, type):
+ docker_image = cls.get_docker_image(type)
+ if cls.has_pull_latest_image[type] == True:
+ logger.debug('%s is already the newest version.' % (docker_image))
+ else:
+ cmd = 'sudo docker pull %s' % (docker_image)
+ dt_utils.exec_cmd(cmd,logger)
+ cls.has_pull_latest_image[type] = True
+
+ @classmethod
+ def clean(cls, container_id):
+ cmd1 = 'sudo docker stop %s' % (container_id)
+ dt_utils.exec_cmd(cmd1,logger)
+ cmd2 = 'sudo docker rm %s' % (container_id)
+ dt_utils.exec_cmd(cmd2,logger)
+
+ @classmethod
+ def exec_cmd(cls, container_id, sub_cmd, exit_on_error=False):
+ cmd = 'sudo docker exec %s /bin/bash -c "%s"' % (container_id, sub_cmd)
+ dt_utils.exec_cmd(cmd,logger,exit_on_error)