From 6847b337f4c821a15aceccb0f01abafbe9c0f042 Mon Sep 17 00:00:00 2001 From: Carlos Konstanski Date: Wed, 8 Nov 2017 12:32:35 -0700 Subject: Glance gateway: fetch AUTH_URLs from Openbook Closes-Bug: OB-1054 --- glance-gateway.py | 91 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 69 insertions(+), 22 deletions(-) (limited to 'glance-gateway.py') diff --git a/glance-gateway.py b/glance-gateway.py index 833e38d..66b1d54 100755 --- a/glance-gateway.py +++ b/glance-gateway.py @@ -4,6 +4,7 @@ from __future__ import print_function from libs.environment import * from libs.glance import * from libs.keystone import * +from libs.openbook_client import * import argparse import glob import os @@ -30,30 +31,60 @@ def check_image_exists_up2date(glance, manifest): 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, - {"manifests_path": args.glance_gateway_manifests_path}) - manifests = read_manifests(env) - keystone = Keystone(env) - glance = Glance(keystone, endpoint_type="publicURL") + env_src = 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, + { + "manifests_path": args.glance_gateway_manifests_path, + "openbook_host": args.openbook_host, + "openbook_port": args.openbook_port, + "openbook_user": args.openbook_user, + "openbook_pass": args.openbook_pass + }) + manifests = read_manifests(env_src) + keystone_src = Keystone(env_src) + glance_src = Glance(keystone_src, endpoint_type="publicURL") for image_name, manifest in manifests.items(): - if manifest["vetted"] and not check_image_exists_up2date(glance, manifest): + if manifest["vetted"] and not check_image_exists_up2date(glance_src, manifest): # download private image to /tmp - glance.download("%s.%s.unvetted" % (manifest["image_name"], manifest["image_type"]), - "/tmp/%s.%s" % (manifest["image_name"], manifest["image_type"])) - # upload image as public - glance.upload("%s.%s" % (manifest["image_name"], manifest["image_type"]), - manifest["image_type"], - "/tmp/%s.%s" % (manifest["image_name"], manifest["image_type"]), - "private", - manifest["tag"]) + glance_src.download("%s.%s.unvetted" % (manifest["image_name"], manifest["image_type"]), + "/tmp/%s.%s" % (manifest["image_name"], manifest["image_type"])) + # get AUTH_URLs + ob_client = OpenbookClient(host=env.extra_envs["openbook_host"], + port=env.extra_envs["openbook_port"], + username=extra_envs["openbook_user"], + password=extra_envs["openbook_pass"]) + for obj in [url for url in ob_client.get_service_managers() if url not in manifest["regions_to_exclude"]]: + # upload image as public + env_dest = Environment(obj["connectionUrl"], + 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, + { + "manifests_path": args.glance_gateway_manifests_path, + "openbook_host": args.openbook_host, + "openbook_port": args.openbook_port, + "openbook_user": args.openbook_user, + "openbook_pass": args.openbook_pass + }) + keystone_dest = Keystone(env_dest) + glance_dest = Glance(keystone_dest, endpoint_type="publicURL") + glance_dest.upload("%s.%s" % (manifest["image_name"], manifest["image_type"]), + manifest["image_type"], + "/tmp/%s.%s" % (manifest["image_name"], manifest["image_type"]), + "private", + manifest["tag"]) if __name__ == "__main__": @@ -98,6 +129,22 @@ if __name__ == "__main__": required=False, default=os.environ.get("GLANCE_GATEWAY_MANIFESTS_PATH", None), help="image-foundry environment variable: GLANCE_GATEWAY_MANIFESTS_PATH") + parser.add_argument("--openbook-host", + required=False, + default=os.environ.get("OPENBOOK_HOST", None), + help="The hostname or IP of the node where Openbook is running (or the load balancer frontend to same).") + parser.add_argument("--openbook-port", + required=False, + default=os.environ.get("OPENBOOK_PORT", None), + help="The TCP port on OPENBOOK_HOST on which the API listener is bound.") + parser.add_argument("--openbook-user", + required=False, + default=os.environ.get("OPENBOOK_USER", None), + help="The admin auth username for Openbook.") + parser.add_argument("--openbook-pass", + required=False, + default=os.environ.get("OPENBOOK_PASS", None), + help="The admin auth password for Openbook.") args = parser.parse_args() main(args) sys.exit(0) -- cgit v1.3