diff options
| author | Carlos Konstanski <ckonstanski@pippiandcarlos.com> | 2017-12-20 11:30:23 -0700 |
|---|---|---|
| committer | Carlos Konstanski <ckonstanski@pippiandcarlos.com> | 2017-12-20 11:30:23 -0700 |
| commit | 577ee3eae4799aaf745ea3c594da807afe8ad97c (patch) | |
| tree | c9efaf34da376e48cbb94c81d064f8444bc2f594 | |
| parent | a55f350c8922794432cecdbb963415ca80f4c705 (diff) | |
glance gateway improvements
| -rwxr-xr-x | glance-gateway.py | 31 | ||||
| -rw-r--r-- | libs/.gitignore | 1 | ||||
| -rw-r--r-- | libs/__init__.py | 2 | ||||
| -rw-r--r-- | libs/service_status_client.py | 50 |
4 files changed, 76 insertions, 8 deletions
diff --git a/glance-gateway.py b/glance-gateway.py index c964eb0..0a7f2c6 100755 --- a/glance-gateway.py +++ b/glance-gateway.py @@ -4,7 +4,8 @@ from __future__ import print_function from libs.environment import * from libs.glance import * from libs.keystone import * -from libs.openbook_client import * +# from libs.openbook_client import * +from libs.service_status_client import * import argparse import glob import os @@ -42,6 +43,7 @@ def main(args): args.os_image_api_version, { "manifests_path": args.glance_gateway_manifests_path, + "service_status_host": args.service_status_host, "openbook_host": args.openbook_host, "openbook_port": args.openbook_port, "openbook_user": args.openbook_user, @@ -56,12 +58,22 @@ def main(args): 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_src.extra_envs["openbook_host"], - port=env_src.extra_envs["openbook_port"], - username=env_src.extra_envs["openbook_user"], - password=env_src.extra_envs["openbook_pass"]) - regions = ob_client.get_service_managers() - regions_filtered = regions if manifest["regions_to_exclude"] is None else [region for region in regions if region["name"] not in manifest["regions_to_exclude"]] + # ob_client = OpenbookClient(host=env_src.extra_envs["openbook_host"], + # port=env_src.extra_envs["openbook_port"], + # username=env_src.extra_envs["openbook_user"], + # password=env_src.extra_envs["openbook_pass"]) + # regions = ob_client.get_service_managers() + service_status_client = ServiceStatusClient(host=env_src.extra_envs["service_status_host"]) + regions = service_status_client.get_service_managers() + if manifest["regions_to_exclude"] is None and manifest["regions_to_include"] is None: + regions_filtered = regions + elif manifest["regions_to_exclude"] is not None and manifest["regions_to_include"] is None: + regions_filtered = [r for r in regions if r["name"] not in manifest["regions_to_exclude"]] + elif manifest["regions_to_exclude"] is None and manifest["regions_to_include"] is not None: + regions_filtered = [r for r in regions if r["name"] in manifest["regions_to_include"]] + else: + regions_filtered = [r for r in regions if r["name"] not in manifest["regions_to_exclude"] and r["name"] in manifest["regions_to_include"]] + # regions_filtered = [{"name": "RegionOne", "connectionUrl": "http://os.pippiandcarlos.com:5000/v3"}] for region in regions_filtered: # upload image as public env_dest = Environment(region["connectionUrl"], @@ -75,6 +87,7 @@ def main(args): args.os_image_api_version, { "manifests_path": args.glance_gateway_manifests_path, + "service_status_host": args.service_status_host, "openbook_host": args.openbook_host, "openbook_port": args.openbook_port, "openbook_user": args.openbook_user, @@ -131,6 +144,10 @@ 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("--service-status-host", + required=False, + default=os.environ.get("SERVICE_STATUS_HOST", None), + help="The hostname or IP of the node where service-status is running (or the load balancer frontend to same).") parser.add_argument("--openbook-host", required=False, default=os.environ.get("OPENBOOK_HOST", None), diff --git a/libs/.gitignore b/libs/.gitignore index bee8a64..8d35cb3 100644 --- a/libs/.gitignore +++ b/libs/.gitignore @@ -1 +1,2 @@ __pycache__ +*.pyc diff --git a/libs/__init__.py b/libs/__init__.py index 4d33869..e04dc4c 100644 --- a/libs/__init__.py +++ b/libs/__init__.py @@ -1 +1 @@ -__all__ = ["environment", "keystone", "glance", "openbook_client"] +__all__ = ["environment", "keystone", "glance", "openbook_client", "service_status_client"] diff --git a/libs/service_status_client.py b/libs/service_status_client.py new file mode 100644 index 0000000..bac0ed7 --- /dev/null +++ b/libs/service_status_client.py @@ -0,0 +1,50 @@ +import requests +from requests.packages.urllib3.exceptions import InsecureRequestWarning +import json + + +class ServiceStatusClient(object): + def __init__(self, host=None): + requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + self.session = requests.Session() + self.host = host + self.base_url = "%s/api/v2.0" % self.host + + def store_result(self, resp): + self.status_code = resp.status_code + self.body = resp.text + try: + self.json = resp.json + except Exception: + self.json = None + + def get(self, url=None, params=None, headers={}, timeout=60): + resp = self.session.get(url=url, + params=params, + headers=headers, + timeout=timeout, + verify=False) + self.store_result(resp) + return resp + + def post(self, url=None, data=None, headers={}, timeout=60): + resp = self.session.post(url=url, + data=data, + headers=headers, + timeout=timeout, + verify=False) + self.store_result(resp) + return resp + + def get_service_managers(self): + regions = [] + self.get(url="%s/" % self.base_url) + for project in [p for p in self.json()["projects"]]: + self.get(url="%s/%s/project-status" % (self.base_url, project["project"]), + params={"depth": "2"}) + for site in [r for r in self.json()["sites"]]: + for region in site["regions"]: + if region["attributes"]["live-date"] != "TBD": + regions.append({"name": "%s-%s" % (region["region"].replace("r", "s"), region["site"]), + "connectionUrl": "%s:13000/v3" % region["attributes"]["dashboard-url"].replace("/dashboard", "")}) + return regions |
