diff options
Diffstat (limited to 'ci/genPublicAPIProxyBundle.py')
-rw-r--r-- | ci/genPublicAPIProxyBundle.py | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/ci/genPublicAPIProxyBundle.py b/ci/genPublicAPIProxyBundle.py new file mode 100644 index 00000000..87acee2c --- /dev/null +++ b/ci/genPublicAPIProxyBundle.py @@ -0,0 +1,111 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +""" +This script generates a bundle config for the haproxy managing public apis + +Parameters: + -l, --lab : lab config file +""" + +from jinja2 import Environment, FileSystemLoader +from keystoneauth1.identity import v2 +from keystoneauth1 import session +from keystoneclient.v2_0 import client +from optparse import OptionParser + +import os +import yaml + +# +# Parse parameters +# + +parser = OptionParser() +parser.add_option("-l", "--lab", dest="lab", help="lab config file") +(options, args) = parser.parse_args() +labconfig_file = options.lab + +# +# Set Path and configs path +# + +# Capture our current directory +TPL_DIR = os.path.dirname(os.path.abspath(__file__))+'/config_tpl' + +# +# Local Functions +# + + +def load_yaml(filepath): + """Load YAML file""" + with open(filepath, 'r') as stream: + try: + return yaml.load(stream) + except yaml.YAMLError as exc: + print(exc) + +# +# Config import +# + +# Load scenario Config +config = load_yaml(labconfig_file) + +# Add public api ip to config +if 'public_api_ip' in config['lab']['racks'][0]: + config['public_api_ip'] = config['lab']['racks'][0]['public_api_ip'] +else: + first_public_ip = config['lab']['racks'][0][ + 'floating-ip-range'].split(',')[0] + # managing ipv6 and ipv4 format + sep = ':' if ':' in first_public_ip else '.' + api_ip = first_public_ip.split(sep) + api_ip[-1] = str(int(api_ip[-1])-1) + config['public_api_ip'] = sep.join(api_ip) + +# get endpoint list from keystone +username = os.environ['OS_USERNAME'] +password = os.environ['OS_PASSWORD'] +tenant_name = os.environ['OS_TENANT_NAME'] +auth_url = os.environ['OS_AUTH_URL'] +auth = v2.Password(username=username, + password=password, + tenant_name=tenant_name, + auth_url=auth_url) +sess = session.Session(auth=auth) +keystone = client.Client(session=sess) +services = keystone.services.list() +endpoints = keystone.endpoints.list() +srv = dict() +for service in services: + if service.name != 'cinderv2': + srv[service.id] = {'name': service.name} +for endpoint in endpoints: + if endpoint.service_id in srv.keys(): + internal = endpoint.internalurl.split('/')[2].split(':') + srv[endpoint.service_id]['ip'] = ':'.join(internal[:-1]) + srv[endpoint.service_id]['port'] = internal[-1] +config['public_api_services'] = srv + +# +# Transform template to deployconfig.yaml according to config +# + +# Create the jinja2 environment. +env = Environment(loader=FileSystemLoader(TPL_DIR), + trim_blocks=True) +template = env.get_template('public-api-proxy.yaml') + +# Render the template +output = template.render(**config) + +# Check output syntax +try: + yaml.load(output) +except yaml.YAMLError as exc: + print(exc) + +# print output +print(output) |