(args: argparse.Namespace)
| 328 | |
| 329 | |
| 330 | def portforward(args: argparse.Namespace): |
| 331 | env_kubectl = make_env_kubectl(args) |
| 332 | |
| 333 | resource_id = get_resource_id(args) |
| 334 | |
| 335 | port_forward_targets = { |
| 336 | "console/http": lambda port: f"http://localhost:{port}/", |
| 337 | "balancerd/pgwire": lambda port: f"postgres://{os.environ['USER']}@localhost:{port}/materialize", |
| 338 | "balancerd/http": lambda port: f"http://localhost:{port}/", |
| 339 | "environmentd/internal-sql": lambda port: f"postgres://mz_system@localhost:{port}/materialize", |
| 340 | "environmentd/internal-http": lambda port: f"http://localhost:{port}/", |
| 341 | } |
| 342 | |
| 343 | port_forwards = {} |
| 344 | sockets = [] |
| 345 | try: |
| 346 | for port_forward_target in port_forward_targets: |
| 347 | s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
| 348 | sockets.append(s) |
| 349 | s.bind(("", 0)) |
| 350 | s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) |
| 351 | port_forwards[port_forward_target] = s.getsockname()[1] |
| 352 | finally: |
| 353 | for s in sockets: |
| 354 | s.close() |
| 355 | |
| 356 | def port_forward(target: str, port: str): |
| 357 | target_service, target_port = target.split("/") |
| 358 | # in theory doing a port forward to the service directly should work, |
| 359 | # but i can't seem to get it to |
| 360 | selector = json.loads( |
| 361 | env_kubectl( |
| 362 | "get", |
| 363 | "service", |
| 364 | f"mz{resource_id}-{target_service}", |
| 365 | "-o=jsonpath={.spec.selector}", |
| 366 | ) |
| 367 | ) |
| 368 | pod = env_kubectl( |
| 369 | "get", |
| 370 | "pod", |
| 371 | "-o=name", |
| 372 | *[f"--selector={k}={v}" for k, v in selector.items()], |
| 373 | ).splitlines()[0] |
| 374 | |
| 375 | env_kubectl( |
| 376 | "port-forward", |
| 377 | pod, |
| 378 | f"{port}:{target_port}", |
| 379 | ) |
| 380 | |
| 381 | threads = [ |
| 382 | threading.Thread(target=port_forward, args=[target, port]) |
| 383 | for target, port in port_forwards.items() |
| 384 | ] |
| 385 | |
| 386 | for t in threads: |
| 387 | t.start() |
nothing calls this directly
no test coverage detected