bottlenecks offiline support
[bottlenecks.git] / utils / env_prepare / stack_prepare.py
index 37b523d..9830884 100644 (file)
@@ -13,27 +13,44 @@ import errno
 from utils.logger import Logger
 from utils.parser import Parser as config
 import utils.infra_setup.heat.manager as utils
+import utils.infra_setup.runner.docker_env as docker_env
+import utils.infra_setup.heat.manager as client_manager
 
 LOG = Logger(__name__).getLogger()
 
 
-def _prepare_env_daemon():
-
-    installer_ip = os.environ.get('INSTALLER_IP', 'undefined')
-    installer_type = os.environ.get('INSTALLER_TYPE', 'undefined')
+def _prepare_env_daemon(test_yardstick):
 
     rc_file = config.bottlenecks_config["rc_dir"]
 
-    _get_remote_rc_file(rc_file, installer_ip, installer_type)
+    if not os.path.exists(rc_file):
+        installer_ip = os.environ.get('INSTALLER_IP', 'undefined')
+        installer_type = os.environ.get('INSTALLER_TYPE', 'undefined')
+        _get_remote_rc_file(rc_file, installer_ip, installer_type)
 
     _source_file(rc_file)
 
-    _append_external_network(rc_file)
+    if not os.environ.get("EXTERNAL_NETWORK"):
+        _append_external_network(rc_file)
+    if test_yardstick:
+        yardstick_contain = docker_env.yardstick_info["container"]
+        cmd = "cp %s %s" % (rc_file,
+                            config.bottlenecks_config["yardstick_rc_dir"])
+        docker_env.docker_exec_cmd(yardstick_contain,
+                                   cmd)
 
     # update the external_network
     _source_file(rc_file)
 
 
+def file_copy(src_file, dest_file):
+    src = file(src_file, "r+")
+    des = file(dest_file, "w+")
+    des.writelines(src.read())
+    src.close()
+    des.close()
+
+
 def _get_remote_rc_file(rc_file, installer_ip, installer_type):
 
     RELENG_DIR = config.bottlenecks_config["releng_dir"]
@@ -57,7 +74,9 @@ def _source_file(rc_file):
     p = subprocess.Popen(". %s; env" % rc_file, stdout=subprocess.PIPE,
                          shell=True)
     output = p.communicate()[0]
-    env = dict((line.split('=', 1) for line in output.splitlines()))
+    output_lines = output.splitlines()
+    del output_lines[5]
+    env = dict((line.split('=', 1) for line in output_lines))
     os.environ.update(env)
     return env
 
@@ -77,3 +96,30 @@ def _append_external_network(rc_file):
         except OSError as e:
             if e.errno != errno.EEXIST:
                 raise
+
+
+def prepare_image(image_name, image_dir):
+    glance_client = client_manager._get_glance_client()
+    if not os.path.isfile(image_dir):
+        LOG.error("Error: file %s does not exist.", image_dir)
+        return None
+    try:
+        images = glance_client.images.list()
+        image_id = next((i.id for i in images if i.name == image_name), None)
+        if image_id is not None:
+            LOG.info("Image %s already exists.", image_name)
+        else:
+            LOG.info("Creating image '%s' from '%s'...", image_name, image_dir)
+
+            image = glance_client.images.create(
+                name=image_name, visibility="public", disk_format="qcow2",
+                container_format="bare")
+            image_id = image.id
+            with open(image_dir) as image_data:
+                glance_client.images.upload(image_id, image_data)
+        return image_id
+    except Exception:  # pylint: disable=broad-except
+        LOG.error(
+            "Error [create_glance_image(glance_client, '%s', '%s')]",
+            image_name, image_dir)
+        return None