diff --git a/resources/charts/caddy/templates/configmap.yaml b/resources/charts/caddy/templates/configmap.yaml index a80ac8ea9..e56729dfe 100644 --- a/resources/charts/caddy/templates/configmap.yaml +++ b/resources/charts/caddy/templates/configmap.yaml @@ -6,6 +6,34 @@ metadata: {{- include "caddy.labels" . | nindent 4 }} data: Caddyfile: | - {{- .Values.caddyConfig | nindent 4 }} + :80 { + respond /live 200 + respond /ready 200 + + root * /usr/share/caddy + file_server + + {{- range .Values.services }} + handle_path {{ .path }}* { + reverse_proxy {{ .host }}:{{ .port }} + } + {{- end }} + } index: | - {{- .Values.htmlConfig | nindent 4 }} + + + + + + Warnet Dashboard + + +

Welcome to the Warnet dashboard

+

You can access the following services:

+ + + diff --git a/resources/charts/caddy/values.yaml b/resources/charts/caddy/values.yaml index 01338e9ac..d03151eb0 100644 --- a/resources/charts/caddy/values.yaml +++ b/resources/charts/caddy/values.yaml @@ -85,39 +85,3 @@ volumeMounts: subPath: index port: 80 - -caddyConfig: | - :80 { - respond /live 200 - respond /ready 200 - - root * /usr/share/caddy - file_server - - handle_path /fork-observer/* { - reverse_proxy fork-observer:2323 - } - - handle_path /grafana/* { - reverse_proxy loki-grafana:80 - } - - } - -htmlConfig: | - - - - - - Welcome - - -

Welcome to the Warnet dashboard

-

You can access the following services:

- - - diff --git a/src/warnet/deploy.py b/src/warnet/deploy.py index 855617735..0de39b4de 100644 --- a/src/warnet/deploy.py +++ b/src/warnet/deploy.py @@ -269,7 +269,32 @@ def deploy_caddy(directory: Path, debug: bool): if not network_file.get(name, {}).get("enabled", False): return - cmd = f"{HELM_COMMAND} {name} {CADDY_CHART} --namespace {namespace} --create-namespace" + # configure reverse proxy to webservers in the network + services = [] + # built-in services + if check_logging_required(directory): + services.append( + {"title": "Grafana", "path": "/grafana/", "host": "loki-grafana", "port": 80} + ) + if network_file.get("fork_observer", {}).get("enabled", False): + services.append( + { + "title": "Fork Observer", + "path": "/fork-observer/", + "host": "fork-observer", + "port": 2323, + } + ) + # add any extra services + services += network_file.get("services", {}) + + click.echo(f"Adding services to dashboard: {json.dumps(services, indent=2)}") + + cmd = ( + f"{HELM_COMMAND} {name} {CADDY_CHART} " + f"--namespace {namespace} --create-namespace " + f"--set-json services='{json.dumps(services)}'" + ) if debug: cmd += " --debug" diff --git a/test/data/services/network.yaml b/test/data/services/network.yaml index c9dde9931..d8709f857 100644 --- a/test/data/services/network.yaml +++ b/test/data/services/network.yaml @@ -35,3 +35,8 @@ fork_observer: enabled: true caddy: enabled: true +services: + - title: Ringo REST + path: /ringo/ + host: ringo.default + port: 18443 \ No newline at end of file diff --git a/test/services_test.py b/test/services_test.py index e74fc85e1..87f0a6f3f 100755 --- a/test/services_test.py +++ b/test/services_test.py @@ -15,11 +15,14 @@ class ServicesTest(TestBase): def __init__(self): super().__init__() self.network_dir = Path(os.path.dirname(__file__)) / "data" / "services" + self.ingress_ip = None def run_test(self): try: self.setup_network() + self.get_ingress_ip() self.check_fork_observer() + self.check_extra_services() finally: self.cleanup() @@ -29,25 +32,25 @@ def setup_network(self): self.wait_for_all_tanks_status(target="running") self.wait_for_all_edges() - def check_fork_observer(self): - self.log.info("Creating chain split") - self.warnet("bitcoin rpc john createwallet miner") - self.warnet("bitcoin rpc john -generate 1") - + def get_ingress_ip(self): self.log.info("Waiting for ingress controller") wait_for_ingress_controller() - self.log.info("Waiting for ingress host") - ingress_ip = None attempts = 100 - while not ingress_ip: - ingress_ip = get_ingress_ip_or_host() + while not self.ingress_ip: + self.ingress_ip = get_ingress_ip_or_host() attempts -= 1 if attempts < 0: raise Exception("Never got ingress host") sleep(1) + + def check_fork_observer(self): + self.log.info("Creating chain split") + self.warnet("bitcoin rpc john createwallet miner") + self.warnet("bitcoin rpc john -generate 1") + # network id is 0xDEADBE in decimal - fo_data_uri = f"http://{ingress_ip}/fork-observer/api/14593470/data.json" + fo_data_uri = f"http://{self.ingress_ip}/fork-observer/api/14593470/data.json" def call_fo_api(): # if on minikube remember to run `minikube tunnel` for this test to run @@ -77,6 +80,13 @@ def call_fo_api(): lambda: len(json.loads(self.warnet("bitcoin rpc george getpeerinfo"))) > 1 ) + def check_extra_services(self): + self.log.info("Checking extra web services added to caddy") + uri = f"http://{self.ingress_ip}/ringo/rest/chaininfo.json" + rest_data = requests.get(uri) + rest_json = rest_data.json() + assert rest_json["chain"] == "regtest" + if __name__ == "__main__": test = ServicesTest()