diff options
| author | Jenkins <jenkins@review.openstack.org> | 2014-10-07 04:18:26 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2014-10-07 04:18:26 +0000 |
| commit | 0d544c7130d62e829413a7fa3d495ffecb090972 (patch) | |
| tree | b9a35cb84ad9857c2713e4198c43a73a3c42dae9 /docker/hautoproxy/start.py | |
| parent | 958e1cc54992548136d9ff4c082804d01e575dbe (diff) | |
| parent | 154e2781d9debe5417bdec14689ace88eb4ea3e3 (diff) | |
| download | kolla-0d544c7130d62e829413a7fa3d495ffecb090972.tar.gz kolla-0d544c7130d62e829413a7fa3d495ffecb090972.zip | |
Merge "added hautoproxy auto-configuring haproxy"
Diffstat (limited to 'docker/hautoproxy/start.py')
| -rwxr-xr-x | docker/hautoproxy/start.py | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/docker/hautoproxy/start.py b/docker/hautoproxy/start.py new file mode 100755 index 000000000..877b22157 --- /dev/null +++ b/docker/hautoproxy/start.py @@ -0,0 +1,65 @@ +#!/usr/bin/python + +'''This script configures and starts a local haproxy instances, bound to +127.0.0.1, that forwards connections all of the discovered +docker/kubernetes environment variables.''' + +import argparse +import os +import sys +from jinja2 import Environment, FileSystemLoader +import re +import urlparse + +re_url = re.compile( + '^(?P<name>.*)_PORT_(?P<port>\d+)_(?P<proto>(UDP|TCP))$') + +def parse_args(): + p = argparse.ArgumentParser() + p.add_argument('--output', '-o', + default='/etc/haproxy/haproxy.cfg') + p.add_argument('--no-start', '-n', + action='store_true') + p.add_argument('--template-dir', '-t', + default='/etc/haproxy/templates') + return p.parse_args() + +def discover_services(): + services = [] + for k in os.environ: + mo = re_url.match(k) + + if mo: + parts = urlparse.urlparse(os.environ[k]) + remote_host,remote_port = parts.netloc.split(':') + service_name = '%(name)s-%(port)s' % mo.groupdict() + + services.append({ + 'remote_name': mo.group('name'), + 'remote_addr': remote_host, + 'remote_port': remote_port, + 'remote_proto': parts.scheme, + 'local_port': mo.group('port'), + 'service_name': service_name, + }) + + return services + +def main(): + args = parse_args() + services = discover_services() + + env = Environment(loader=FileSystemLoader(['.', + args.template_dir])) + template = env.get_template('haproxy.cfg.tmpl') + with open(args.output, 'w') as fd: + fd.write(template.render(services=services)) + + if args.no_start: + return + + os.execlp('haproxy', 'haproxy', '-f', args.output, '-db') + +if __name__ == '__main__': + main() + |
