summaryrefslogtreecommitdiff
path: root/image-foundry.py
diff options
context:
space:
mode:
authorCarlos Konstanski <ckonstanski@pippiandcarlos.com>2017-11-02 12:51:30 -0600
committerCarlos Konstanski <ckonstanski@pippiandcarlos.com>2017-11-02 12:51:30 -0600
commit3429744c92cf794383c2ddb5a33328e189304917 (patch)
treebb01854379761248470acb72d1a08bf1d69931c4 /image-foundry.py
parentde07ffaf8a33490149919d8ef44304847bef370a (diff)
renaming image foundry scripts to make room for glance gateway
Diffstat (limited to 'image-foundry.py')
-rwxr-xr-ximage-foundry.py118
1 files changed, 118 insertions, 0 deletions
diff --git a/image-foundry.py b/image-foundry.py
new file mode 100755
index 0000000..678f3b6
--- /dev/null
+++ b/image-foundry.py
@@ -0,0 +1,118 @@
+#!/usr/bin/env python2
+
+from __future__ import print_function
+from libs.environment import *
+from libs.glance import *
+from libs.keystone import *
+import argparse
+import glob
+import os
+import subprocess
+import sys
+import yaml
+
+
+def run_shell_command(cmd):
+ return subprocess.check_output(cmd, shell=True)
+
+
+def read_manifests(env):
+ manifests = {}
+ manifests_glob = "%s/*.yaml" % env.manifests_path
+ for manifest_file in glob.glob(manifests_glob):
+ with open(manifest_file, "r") as myfile:
+ manifest = yaml.load(myfile.read())
+ if manifest["image_name"] in manifests:
+ raise Exception("Duplicate image name in manifests: %s" % manifest["image_name"])
+ manifests[manifest["image_name"]] = manifest
+ return manifests
+
+
+def check_image_tag_current(glance, manifest):
+ image = glance.find("%s.%s" % (manifest["image_name"], manifest["image_type"]))
+ return image and str(manifest["tag"]) in image.tags
+
+
+def create_image(env, manifest):
+ cmd = "disk-image-create %s -t %s -o /tmp/%s.%s 2>&1" % (manifest["elements"], manifest["image_type"], manifest["image_name"], manifest["image_type"])
+ environ = manifest["extra_envs"] if "extra_envs" in manifest else {}
+ environ["ELEMENTS_PATH"] = env.elements_path
+ p = subprocess.Popen([cmd], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=environ)
+ out, err = p.communicate()
+ if p.returncode != 0:
+ raise Exception("Error running diskimage-builder:\n%s\n%s" % (out, err))
+
+
+def main(args):
+ env = Environment(args.os_auth_url,
+ args.os_project_name,
+ args.os_region,
+ args.os_username,
+ args.os_password,
+ args.os_project_domain_name,
+ args.os_user_domain_name,
+ args.os_identity_api_version,
+ args.os_image_api_version,
+ args.elements_path,
+ args.manifests_path)
+ manifests = read_manifests(env)
+ keystone = Keystone(env)
+ glance = Glance(keystone, endpoint_type="publicURL")
+ for image_name, manifest in manifests.items():
+ if not check_image_tag_current(glance, manifest):
+ create_image(env, manifest)
+ glance.upload("%s.%s" % (manifest["image_name"], manifest["image_type"]),
+ manifest["image_type"],
+ "/tmp/%s.%s" % (manifest["image_name"], manifest["image_type"]),
+ manifest["tag"])
+
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser(description="Image Foundry CI Process")
+ parser.add_argument("--os-auth-url",
+ required=False,
+ default=os.environ.get("OS_AUTH_URL", None),
+ help="OpenStack openrc environment variable: OS_AUTH_URL")
+ parser.add_argument("--os-project-name",
+ required=False,
+ default=os.environ.get("OS_PROJECT_NAME", None),
+ help="OpenStack openrc environment variable: OS_PROJECT_NAME")
+ parser.add_argument("--os-region",
+ required=False,
+ default=os.environ.get("OS_REGION", None),
+ help="OpenStack openrc environment variable: OS_REGION")
+ parser.add_argument("--os-username",
+ required=False,
+ default=os.environ.get("OS_USERNAME", None),
+ help="OpenStack openrc environment variable: OS_USERNAME")
+ parser.add_argument("--os-password",
+ required=False,
+ default=os.environ.get("OS_PASSWORD", None),
+ help="OpenStack openrc environment variable: OS_PASSWORD")
+ parser.add_argument("--os-project-domain-name",
+ required=False,
+ default=os.environ.get("OS_PROJECT_DOMAIN_NAME", None),
+ help="OpenStack openrc environment variable: OS_PROJECT_DOMAIN_NAME")
+ parser.add_argument("--os-user-domain-name",
+ required=False,
+ default=os.environ.get("OS_USER_DOMAIN_NAME", None),
+ help="OpenStack openrc environment variable: OS_USER_DOMAIN_NAME")
+ parser.add_argument("--os-identity-api-version",
+ required=False,
+ default=os.environ.get("OS_IDENTITY_API_VERSION", None),
+ help="OpenStack openrc environment variable: OS_IDENTITY_API_VERSION")
+ parser.add_argument("--os-image-api-version",
+ required=False,
+ default=os.environ.get("OS_IMAGE_API_VERSION", None),
+ help="OpenStack openrc environment variable: OS_IMAGE_API_VERSION")
+ parser.add_argument("--elements-path",
+ required=False,
+ default=os.environ.get("ELEMENTS_PATH", None),
+ help="diskimage-builder environment variable: ELEMENTS_PATH")
+ parser.add_argument("--manifests-path",
+ required=False,
+ default=os.environ.get("MANIFESTS_PATH", None),
+ help="image-foundry environment variable: MANIFESTS_PATH")
+ args = parser.parse_args()
+ main(args)
+ sys.exit(0)