def net_resolve(file, name): """Resolve service name to ip or ip:port:proto lines""" data = _net_read(file) if ':' in name: svc_name, port_name = name.split(':', 1) if svc_name not in data: print(f"Error: Service not found: {svc_name}", file=sys.stderr) sys.exit(1) svc = data[svc_name] ip = svc.get('ip', '') if port_name == 'ports': # All ports for pname, pdef in svc.get('ports', {}).items(): print(f"{ip}:{pdef['port']}:{pdef.get('proto','tcp')}") else: if port_name not in svc.get('ports', {}): print(f"Error: Port not found: {port_name}", file=sys.stderr) sys.exit(1) pdef = svc['ports'][port_name] print(f"{ip}:{pdef['port']}:{pdef.get('proto','tcp')}") else: if name not in data: print(f"Error: Service not found: {name}", file=sys.stderr) sys.exit(1) print(data[name].get('ip', '')) function net::resolve() { local name="${1:?}" json::net_resolve "$(ctx::net)" "$name" }