From 0c2275f5ac970560e7c048ec150079341f464f54 Mon Sep 17 00:00:00 2001 From: Matthew Zipkin Date: Tue, 20 Aug 2024 13:06:04 +0200 Subject: [PATCH] ipv4: update from cluster --- src/warnet/backend/kubernetes_backend.py | 3 ++- src/warnet/cln.py | 1 + src/warnet/lnd.py | 1 + src/warnet/server.py | 6 +++--- src/warnet/utils.py | 1 - src/warnet/warnet.py | 12 ++++++++++-- 6 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/warnet/backend/kubernetes_backend.py b/src/warnet/backend/kubernetes_backend.py index c5f5eddc5..b03619844 100644 --- a/src/warnet/backend/kubernetes_backend.py +++ b/src/warnet/backend/kubernetes_backend.py @@ -567,7 +567,8 @@ def create_pod_object( ), ) - def get_ipv4(self, pod_name: str, service_type: ServiceType) -> str | None: + def get_ipv4(self, index: int, service_type: ServiceType) -> str | None: + pod_name = self.get_pod_name(index, service_type) pod = self.get_pod(pod_name) if pod: return pod.status.pod_ip diff --git a/src/warnet/cln.py b/src/warnet/cln.py index 6a3dfca60..32cac35e2 100644 --- a/src/warnet/cln.py +++ b/src/warnet/cln.py @@ -30,6 +30,7 @@ def __init__(self, warnet, tank, backend: KubernetesBackend, options): self.image = options["ln_image"] self.cb = options["cb_image"] self.ln_config = options["ln_config"] + self.ipv4 = None self.rpc_port = 10009 self.impl = "cln" diff --git a/src/warnet/lnd.py b/src/warnet/lnd.py index 578f6d0e7..c02c459a5 100644 --- a/src/warnet/lnd.py +++ b/src/warnet/lnd.py @@ -32,6 +32,7 @@ def __init__(self, warnet, tank, backend: KubernetesBackend, options): self.image = options["ln_image"] self.cb = options["cb_image"] self.ln_config = options["ln_config"] + self.ipv4 = None self.rpc_port = 10009 self.impl = "lnd" diff --git a/src/warnet/server.py b/src/warnet/server.py index b3fbda6dd..447ef0150 100644 --- a/src/warnet/server.py +++ b/src/warnet/server.py @@ -170,13 +170,13 @@ def scenario_log(self, proc): for line in proc.stdout: self.scenario_logger.info(line.decode().rstrip()) - def get_warnet(self, network: str) -> Warnet: + def get_warnet(self, network: str, refresh=False) -> Warnet: """ Will get a warnet from the cache if it exists. Otherwise it will create the network using from_network() and save it to the cache before returning it. """ - if network in self.warnets: + if network in self.warnets and not refresh: return self.warnets[network] wn = Warnet.from_network(network) if isinstance(wn, Warnet): @@ -515,7 +515,7 @@ def network_info(self, network: str = "warnet") -> dict: """ Get info about a warnet network named """ - wn = self.get_warnet(network) + wn = self.get_warnet(network, refresh=True) return wn._warnet_dict_representation() def network_status(self, network: str = "warnet") -> list[dict]: diff --git a/src/warnet/utils.py b/src/warnet/utils.py index 3f276b46e..da1b5bc2a 100644 --- a/src/warnet/utils.py +++ b/src/warnet/utils.py @@ -1,5 +1,4 @@ import functools -import ipaddress import json import logging import os diff --git a/src/warnet/warnet.py b/src/warnet/warnet.py index c414f2d06..b04f35c92 100644 --- a/src/warnet/warnet.py +++ b/src/warnet/warnet.py @@ -54,10 +54,12 @@ def _warnet_dict_representation(self) -> dict: tank_headers = [ "Index", "Version", + "IPv4", "bitcoin conf", "tc_netem", "LN", "LN Image", + "LN IPv4", ] has_ln = any(tank.lnnode and tank.lnnode.impl for tank in self.tanks) tanks = [] @@ -65,6 +67,7 @@ def _warnet_dict_representation(self) -> dict: tank_data = [ tank.index, tank.version if tank.version else tank.image, + tank.ipv4, tank.bitcoin_config, tank.netem, ] @@ -73,11 +76,13 @@ def _warnet_dict_representation(self) -> dict: [ tank.lnnode.impl if tank.lnnode else "", tank.lnnode.image if tank.lnnode else "", + tank.lnnode.ipv4 if tank.lnnode else "", ] ) tanks.append(tank_data) if not has_ln: tank_headers.remove("LN") + tank_headers.remove("LN IPv4") repr["tank_headers"] = tank_headers repr["tanks"] = tanks @@ -133,8 +138,11 @@ def from_network(cls, network_name): if "services" in self.graph.graph: self.services = self.graph.graph["services"].split() for tank in self.tanks: - pod_name = self.container_interface.get_pod_name(tank.index, ServiceType.BITCOIN) - tank.ipv4 = self.container_interface.get_ipv4(pod_name, ServiceType.BITCOIN) + tank.ipv4 = self.container_interface.get_ipv4(tank.index, ServiceType.BITCOIN) + if tank.lnnode: + tank.lnnode.ipv4 = self.container_interface.get_ipv4( + tank.index, ServiceType.LIGHTNING + ) return self def tanks_from_graph(self):