summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Konstanski <ckonstanski@pippiandcarlos.com>2017-12-20 11:30:23 -0700
committerCarlos Konstanski <ckonstanski@pippiandcarlos.com>2017-12-20 11:30:23 -0700
commit577ee3eae4799aaf745ea3c594da807afe8ad97c (patch)
treec9efaf34da376e48cbb94c81d064f8444bc2f594
parenta55f350c8922794432cecdbb963415ca80f4c705 (diff)
glance gateway improvements
-rwxr-xr-xglance-gateway.py31
-rw-r--r--libs/.gitignore1
-rw-r--r--libs/__init__.py2
-rw-r--r--libs/service_status_client.py50
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