#!bin/python from run_local import log from light9 import showconfig from light9.namespaces import L9 from urllib.parse import urlparse from urllib.parse import splitport log.info('generating config') graph = showconfig.getGraph() netHome = graph.value(showconfig.showUri(), L9['networking']) webServer = graph.value(netHome, L9['webServer']) if not webServer: raise ValueError('no %r :webServer' % netHome) print("listen %s;" % splitport(urlparse(webServer).netloc)[1]) def location(path, server): print(""" location /%(path)s/ { # for websocket proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_pass %(server)s; proxy_buffering off; rewrite /[^/]+/(.*) /$1 break; }""" % vars()) for role, server in sorted(graph.predicate_objects(netHome)): if not server.startswith('http') or role == L9['webServer']: continue path = graph.value(role, L9['urlPath']) if not path: continue server = server.rstrip('/') location(path, server) showPath = showconfig.showUri().split('/', 3)[-1] print(""" location /%(path)s { root %(root)s; }""" % { 'path': showPath, 'root': showconfig.root()[:-len(showPath)] })