Test run: - Start at Thu Oct 1 04:11:57 UTC 2026 - Docker image: "monitor-test-runner:scli-manual-manual" - Container name: "test-run-d349f41a-a0ed-45de-8a5d-b2e07fc997fa" - Runner git commit: 3d31de04c823a30705ff3eab5a5f3c3f420ec99c 2026-09-25T10:35:24+02:00 Building slices-monitor-test-runner @ file:///app Built slices-monitor-test-runner @ file:///app Uninstalled 1 package in 0.86ms Installed 1 package in 1ms Run Test: slices-bi-singlenode-login 2026-10-01 04:12:00.651387 UTC - OS release: PRETTY_NAME="Debian GNU/Linux 13 (trixie)" NAME="Debian GNU/Linux" VERSION_ID="13" VERSION="13 (trixie)" VERSION_CODENAME=trixie DEBIAN_VERSION_FULL=13.5 ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/" 2026-10-01 04:12:00.652981 UTC - ls -a /root/ /scripts/: '/root/:\n.\n..\n.bashrc\n.cache\n.local\n.profile\n.slices\n.wget-hsts\n\n/scripts/:\n.\n..\n.slices\nrun_test_runner.sh\n' 2026-10-01 04:12:00.653059 UTC - env: {'PATH': '/app/.venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/.local/bin/', 'COLUMNS': '200'} 2026-10-01 04:12:00.653173 UTC - which slices: /usr/local/bin/slices 2026-10-01 04:12:00.653196 UTC - Slices CLI exe: 'slices' 2026-10-01 04:12:00.653444 UTC - Run: slices --version 2026-10-01 04:12:04.483379 UTC - version: Slices CLI v2026.1.3 Slices CLI core v1.2.6 Slices CLI ai v1.1.0 Slices CLI bi v2.2.1 Slices clientlib bi v6.1.1 Slices clientlib core v5.6.0 Slices clientlib ai v1.0.0 2026-10-01 04:12:04.484028 UTC - Run: slices pubkey list --format text 2026-10-01 04:12:05.399938 UTC - Pubkey already registered 2026-10-01 04:12:05.400281 UTC - Run: slices bi infrastructure list --format csv --all --refresh 2026-10-01 04:12:06.166112 UTC - Refreshed infrastructure list. Total: 24 entries. 2026-10-01 04:12:06.166224 UTC - Check List Flavors 2026-10-01 04:12:06.166411 UTC - Run: slices bi --infra fr-sophia2-bi-vm2 flavor list -f json 2026-10-01 04:12:07.398453 UTC - Check List DiskImages 2026-10-01 04:12:07.398777 UTC - Run: slices bi --infra fr-sophia2-bi-vm2 diskimage list -f json 2026-10-01 04:12:08.792279 UTC - Requesting resources 2026-10-01 04:12:08.792959 UTC - Run: slices bi --infra fr-sophia2-bi-vm2 create tst --image 'Ubuntu 24.04.3' --flavor tiny --duration 2h --experiment tst-ccb049f4 2026-10-01 04:12:10.631926 UTC - Resource ID: r_fr-sophia2-bi-vm2_01m3ttk8nxfrr8eg8vzq0c8sed 2026-10-01 04:12:10.632104 UTC - Waiting until resource ready 2026-10-01 04:12:12.632436 UTC - Run: slices bi --infra fr-sophia2-bi-vm2 list-resources --format json --experiment tst-ccb049f4 tst 2026-10-01 04:12:13.953027 UTC - Status: IMAGING 2026-10-01 04:12:17.131563 UTC - Status: BOOTING 2026-10-01 04:12:20.302455 UTC - Status: BOOTING 2026-10-01 04:12:23.226540 UTC - Status: BOOTING 2026-10-01 04:12:26.143555 UTC - Status: BOOTING 2026-10-01 04:12:29.160961 UTC - Status: BOOTING 2026-10-01 04:12:32.132910 UTC - Status: BOOTING 2026-10-01 04:12:35.007801 UTC - Status: BOOTING 2026-10-01 04:12:38.025054 UTC - Status: UP 2026-10-01 04:12:38.025165 UTC - Experiment ID: exp_expauth.ilabt.imec.be_01m3ttk87ces1adk7qpymkctg1 2026-10-01 04:12:38.025212 UTC - Validate resources 2026-10-01 04:12:38.945887 UTC - The fields of the created resource were validated. 2026-10-01 04:12:38.946002 UTC - Check if resources are registered in experiment 2026-10-01 04:12:38.946201 UTC - Run: slices experiment list-resources --format json tst-ccb049f4 2026-10-01 04:12:39.662334 UTC - Status (on expauth): UP 2026-10-01 04:12:39.662474 UTC - Testing extend expires_at (all resources in experiment) 2026-10-01 04:12:39.662604 UTC - Run: slices bi --infra fr-sophia2-bi-vm2 extend --duration 3h --experiment tst-ccb049f4 2026-10-01 04:12:40.930134 UTC - Run: slices bi --infra fr-sophia2-bi-vm2 list-resources --format json --experiment tst-ccb049f4 tst 2026-10-01 04:12:41.947551 UTC - Run: slices experiment list-resources --format json tst-ccb049f4 2026-10-01 04:12:42.714293 UTC - expires_at (on expauth): 2026-10-01T07:12:00Z (correctly extended) 2026-10-01 04:12:42.714464 UTC - Testing extend expires_at (single resource in experiment) 2026-10-01 04:12:42.714670 UTC - Run: slices bi --infra fr-sophia2-bi-vm2 extend tst --duration 4h --experiment tst-ccb049f4 2026-10-01 04:12:44.385307 UTC - Content of log file '/test_dir/step_Checkextendexpire_command_1.txt': slices bi --infra fr-sophia2-bi-vm2 extend --duration 3h --experiment tst-ccb049f4 2026-10-01 04:12:44.385472 UTC - Content of log file '/test_dir/experiment-extend-all.txt': Extending Experiment container from 2026-10-01 06:12 UTC to 2026-10-01 07:12 UTC... Extending the resources only on infrastructure fr-sophia2-bi-vm2. Use slices bi experiment list-resources to verify other infrastructures. ♻ Resources on infrastructure fr-sophia2-bi-vm2 now expire on 2026-10-01 07:12 UTC. Overview of extended resources in experiment tst-ccb049f4 ┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┓ ┃ Friendly Name ┃ Infra ┃ Type ┃ Status ┃ Created At ┃ Expires At ┃ ┡━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━┩ │ tst │ fr-sophia2-bi-vm2 │ vm │ up │ 2026-10-01 04:12 UTC │ 2026-10-01 07:12 UTC │ └───────────────┴───────────────────┴──────┴────────┴──────────────────────┴──────────────────────┘ 2026-10-01 04:12:44.385568 UTC - Content of log file '/test_dir/step_Checkextendexpire_command_2.txt': slices bi --infra fr-sophia2-bi-vm2 list-resources --format json --experiment tst-ccb049f4 tst 2026-10-01 04:12:44.385662 UTC - Content of log file '/test_dir/list-bi-resources-after-extend_json.txt': [ { "cluster_id": "default", "created_at": "2026-10-01T04:12:10.297976Z", "disk_image_id": "image_fr-sophia2-bi-vm2_01ktv3d2wyfm0rqt4zjpkx7fh9", "experiment_id": "exp_expauth.ilabt.imec.be_01m3ttk87ces1adk7qpymkctg1", "expires_at": "2026-10-01T07:12:00Z", "flavor_id": "flavor_fr-sophia2-bi-vm2_01ktv3d2xbe10rq2n40zc0h15w", "friendly_name": "tst", "id": "r_fr-sophia2-bi-vm2_01m3ttk8nxfrr8eg8vzq0c8sed", "network_interfaces": [], "private_ipv4": "172.28.10.189", "private_ipv6": null, "public_ipv4": null, "public_ipv6": null, "ssh_authorized_keys": [ "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCiVwx/6qSay9heQSO6/9RDqdKLJ2baQ+k3B2fslcdw9vc9TvTlZIkE8ME7gEf0RsreIxei8d7PQg+HfOHtu5MlKNwo2dmWQ0HQJoUFhHdfTuKww5Pg6DSz1WMq5f3cL3/O9d1z6VSwMjm6Kv22q54X5m55YfdNfH2LJxkdAJRMs343jKrPQcFBOEwWv7roWGeXqdf1sva9F8gjnvLnh2yofzadPaHz7Axp7zWD7IOT1mJDQy4OYonRC97uWijkaH2KZQCV7eBMiIjXYgCMWnVEfRkkql8U4SryIC7Vkiw1NTSU4ZVPZ2VjBmq+aKuSvzIcDkI7X4opWig7hca6oc9JPHjCYObc4CdNri8vVaBn9k2+nvYj3WobjWtPLnyGufMACO/PK54DskDEfZ8rXQ3buMWlo1vonGxJyBIO4q3FUP9vcuE0dUUlA0ZeIgq5HqbVot5ZIcouyBCojLE9Z94Kw9SzJM3XSUQila++/UpB4Bm1I/ocmfMF++Cif+rwl5AJhyUFjSF2ZuMwnYOeNRpAwkN9fpYl2/0rwCLhvbqkx14Hd1h6ePZ2asibSB0ABrVfJk9sYLxmURgVafzRY3bD3KAeNVQha3I1vI1yadbQElF84/5cl9vUWEywz3vKVorCKMqGOD+RTUii0ahrC03Bvg+xJsHAqMWt2lfuFINZaw== Wim Van de Meerssche", "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINNiZPtQkfCEsc1x2QSwNWekfhWwWZbOvpE8hE0dH253 Wim Van de Meerssche", "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO90nQ60Vqk3UBvLB4ZkOjw9yx11OnSkWtgwcxuYxpZP Wim Van de Meerssche" ], "ssh_logins": [ { "host": "172.28.10.189", "port": 22, "username": "wvdemeer", "host_keys": [ "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDPusZJCIGDImWlY8Z8oOtJNQFSCmldKLOXTF+GHKDTOJUGzvvvJhhYZycoLuXiZOk2++Enwym07PG8XLfvA9/F1qpeFtrV2YQtiYxX1HgNItVTXTVoXdonol5f47kTfLjw+YjxQHKq8ZaCNHIpyaVsPjj0Pl+aBv50mIZw4VvTtRuKrYf6Ok5i4hZefnVG11wt0dRW0w9ilFioSXmTdCQvegKWD8YyjNu8lJ4f1Csmn8O4RFq1gGsBT1J5H0qg1nL53iIir0+rDaxRKJeaGXRngXkDIWtvU+gNI2e2Bkaipgoh5NGot7FVzTlPQ9dkfFe3DaYG2HNDYIJB9WlwovDdLd4yaNiPpeR4tj3E5DAU5zWhclEsgInLeSTYxeDPU9gC2oBIk/IUFPVH3VtygAE6MzKsCj9tXy4k70YZN6s4CYXQumFNofpf0UczyzquQLKmaJZRDlTUkySm7MR3jQlXts54b6VIdSZzG4bCl2rnlRNy/O2K/ZLOoP+YgqoucLE=", "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHXYqvsY4+/2ozreUlZ6Q8UrFfFnaPgc9jHwW0kwbMUzezR6/reIBoEz3lA58QxBA2QRXL6XCTNdV3tkYK0dlps=", "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHgxeWEc1CjFuIyYJGcUAnfs3Qfv0C3oWyxTO66839wI" ], "description": "login for the VM through the JumpHost", "jump_proxy": { "host": "bastion1.theblueprintfactory.org", "port": 22, "username": "proxy2", "host_keys": [ "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC6zKn/QW8YAikhyrZxT4U3Jyr/KT8MCFQvbfAHLZiLXJGXOdwIBwZUzXyo20SLXoVbIgClQJQCBdO+w0i/b6fb3glaFneklvB/NdVx/IcoZR1GSxFdqMEMdH6ksHPGiUl/ISnYifqa3Bd5Hu0GNP5QYWVhMV8Pxp68e3O1EQ6zSZpBhaTrCCy/IduLNzyPfBOckhoaBJB4qc5+zciFHx8zGqU1T2ayJsJcjSgVcEhpfI9KjT2ooYXAEbXhTaSK5FcsgD9zWLfvAAiS9fgQRs/X+/8XUDoWvzSUddZBiNwrp0HmJe3YkVuzd+d37dAf7EIztyoGQ8+5zx1UD5fPizOQw47OfNG47jhurYXUhjs2RScj3aHpsAaBd/VsO+92d/S/B64YAV4rkz5XR9XrqGeIVnekttRzMVy3DwevdPElzgXEHES6NQTAwHzKo6a/XNyvk4oYHtly0AVLk+uPimQJO1+YJ2Xr8FVCgkOaSpvUnB4VVXBBxQ4O4n4FMjQBaRk=", "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHW7Bgx97B3UOuKNG2YYLplCwE0zta7AVuxotYzsmTvWU9Gthjn9Oo6CVH+gNay5bq4zBhSb4+GL3Ta028AIYc4=", "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEmi2MLPZbEa/UPsRLCJ54Jz9keqffIOFmwocObNfQ4W" ], "description": "login for the JumpHost", "jump_proxy": null } } ], "status": "up", "terminated_at": null, "userdata": null, "console_url": null, "machine_id": null, "failure_reason": null, "infra_id": "fr-sophia2-bi-vm2", "machine_name": null } ] 2026-10-01 04:12:44.385740 UTC - Content of log file '/test_dir/step_Checkextendexpire_command_3.txt': slices experiment list-resources --format json tst-ccb049f4 2026-10-01 04:12:44.385807 UTC - Content of log file '/test_dir/experiment-list-resources-after-extend.txt': [ { "id": "r_fr-sophia2-bi-vm2_01m3ttk8nxfrr8eg8vzq0c8sed", "created_at": "2026-10-01T04:12:10.297976Z", "created_by": "user_account.ilabt.imec.be_4n4kw79brc99va59jka6tjqd8f", "experiment_id": "exp_expauth.ilabt.imec.be_01m3ttk87ces1adk7qpymkctg1", "friendly_name": "tst", "project_id": "proj_account.ilabt.imec.be_5pzabws7n79ydsagfg3vntg590", "service_id": "bi", "infra_id": "fr-sophia2-bi-vm2", "status": "up", "type": "vm", "description": "Minimal VM", "expires_at": "2026-10-01T07:12:00Z", "terminated_at": null, "terminated_by": null } ] 2026-10-01 04:12:44.385855 UTC - Content of log file '/test_dir/step_Checkextendexpire_command_4.txt': slices bi --infra fr-sophia2-bi-vm2 extend tst --duration 4h --experiment tst-ccb049f4 2026-10-01 04:12:44.386120 UTC - Content of log file '/test_dir/experiment-extend-resource.txt': ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_transports/default.py:101 in map_httpcore_exceptions │ │ │ │ 98 │ if len(HTTPCORE_EXC_MAP) == 0: │ │ 99 │ │ HTTPCORE_EXC_MAP = _load_httpcore_exceptions() │ │ 100 │ try: │ │ ❱ 101 │ │ yield │ │ 102 │ except Exception as exc: │ │ 103 │ │ mapped_exc = None │ │ 104 │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_transports/default.py:250 in handle_request │ │ │ │ 247 │ │ │ extensions=request.extensions, │ │ 248 │ │ ) │ │ 249 │ │ with map_httpcore_exceptions(): │ │ ❱ 250 │ │ │ resp = self._pool.handle_request(req) │ │ 251 │ │ │ │ 252 │ │ assert isinstance(resp.stream, typing.Iterable) │ │ 253 │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_sync/connection_pool.py:256 in handle_request │ │ │ │ 253 │ │ │ │ closing = self._assign_requests_to_connections() │ │ 254 │ │ │ │ │ 255 │ │ │ self._close_connections(closing) │ │ ❱ 256 │ │ │ raise exc from None │ │ 257 │ │ │ │ 258 │ │ # Return the response. Note that in this case we still have to manage │ │ 259 │ │ # the point at which the response is closed. │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_sync/connection_pool.py:236 in handle_request │ │ │ │ 233 │ │ │ │ │ │ 234 │ │ │ │ try: │ │ 235 │ │ │ │ │ # Send the request on the assigned connection. │ │ ❱ 236 │ │ │ │ │ response = connection.handle_request( │ │ 237 │ │ │ │ │ │ pool_request.request │ │ 238 │ │ │ │ │ ) │ │ 239 │ │ │ │ except ConnectionNotAvailable: │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_sync/connection.py:101 in handle_request │ │ │ │ 98 │ │ │ │ │ │ ) │ │ 99 │ │ except BaseException as exc: │ │ 100 │ │ │ self._connect_failed = True │ │ ❱ 101 │ │ │ raise exc │ │ 102 │ │ │ │ 103 │ │ return self._connection.handle_request(request) │ │ 104 │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_sync/connection.py:78 in handle_request │ │ │ │ 75 │ │ try: │ │ 76 │ │ │ with self._request_lock: │ │ 77 │ │ │ │ if self._connection is None: │ │ ❱ 78 │ │ │ │ │ stream = self._connect(request) │ │ 79 │ │ │ │ │ │ │ 80 │ │ │ │ │ ssl_object = stream.get_extra_info("ssl_object") │ │ 81 │ │ │ │ │ http2_negotiated = ( │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_sync/connection.py:124 in _connect │ │ │ │ 121 │ │ │ │ │ │ "socket_options": self._socket_options, │ │ 122 │ │ │ │ │ } │ │ 123 │ │ │ │ │ with Trace("connect_tcp", logger, request, kwargs) as trace: │ │ ❱ 124 │ │ │ │ │ │ stream = self._network_backend.connect_tcp(**kwargs) │ │ 125 │ │ │ │ │ │ trace.return_value = stream │ │ 126 │ │ │ │ else: │ │ 127 │ │ │ │ │ kwargs = { │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_backends/sync.py:207 in connect_tcp │ │ │ │ 204 │ │ │ OSError: ConnectError, │ │ 205 │ │ } │ │ 206 │ │ │ │ ❱ 207 │ │ with map_exceptions(exc_map): │ │ 208 │ │ │ sock = socket.create_connection( │ │ 209 │ │ │ │ address, │ │ 210 │ │ │ │ timeout, │ │ │ │ /usr/local/lib/python3.14/contextlib.py:162 in __exit__ │ │ │ │ 159 │ │ │ │ # tell if we get the same exception back │ │ 160 │ │ │ │ value = typ() │ │ 161 │ │ │ try: │ │ ❱ 162 │ │ │ │ self.gen.throw(value) │ │ 163 │ │ │ except StopIteration as exc: │ │ 164 │ │ │ │ # Suppress StopIteration *unless* it's the same exception that │ │ 165 │ │ │ │ # was passed to throw(). This prevents a StopIteration │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_exceptions.py:14 in map_exceptions │ │ │ │ 11 │ except Exception as exc: # noqa: PIE786 │ │ 12 │ │ for from_exc, to_exc in map.items(): │ │ 13 │ │ │ if isinstance(exc, from_exc): │ │ ❱ 14 │ │ │ │ raise to_exc(exc) from exc │ │ 15 │ │ raise # pragma: nocover │ │ 16 │ │ 17 │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ConnectError: [Errno 111] Connection refused The above exception was the direct cause of the following exception: ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_clientlib_core/util/pagination.py:84 in __init__ │ │ │ │ 81 │ │ self._client = client │ │ 82 │ │ self._params = params │ │ 83 │ │ try: │ │ ❱ 84 │ │ │ response = self._client.get(url, params=params) │ │ 85 │ │ except HttpCoreConnectError as err: │ │ 86 │ │ │ raise ApiConnectError(url) from err │ │ 87 │ │ except HttpxConnectError as err: │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_client.py:1053 in get │ │ │ │ 1050 │ │ │ │ 1051 │ │ **Parameters**: See `httpx.request`. │ │ 1052 │ │ """ │ │ ❱ 1053 │ │ return self.request( │ │ 1054 │ │ │ "GET", │ │ 1055 │ │ │ url, │ │ 1056 │ │ │ params=params, │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_client.py:825 in request │ │ │ │ 822 │ │ │ timeout=timeout, │ │ 823 │ │ │ extensions=extensions, │ │ 824 │ │ ) │ │ ❱ 825 │ │ return self.send(request, auth=auth, follow_redirects=follow_redirects) │ │ 826 │ │ │ 827 │ @contextmanager │ │ 828 │ def stream( │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_client.py:914 in send │ │ │ │ 911 │ │ │ │ 912 │ │ auth = self._build_request_auth(request, auth) │ │ 913 │ │ │ │ ❱ 914 │ │ response = self._send_handling_auth( │ │ 915 │ │ │ request, │ │ 916 │ │ │ auth=auth, │ │ 917 │ │ │ follow_redirects=follow_redirects, │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_client.py:942 in _send_handling_auth │ │ │ │ 939 │ │ │ request = next(auth_flow) │ │ 940 │ │ │ │ │ 941 │ │ │ while True: │ │ ❱ 942 │ │ │ │ response = self._send_handling_redirects( │ │ 943 │ │ │ │ │ request, │ │ 944 │ │ │ │ │ follow_redirects=follow_redirects, │ │ 945 │ │ │ │ │ history=history, │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_client.py:979 in _send_handling_redirects │ │ │ │ 976 │ │ │ for hook in self._event_hooks["request"]: │ │ 977 │ │ │ │ hook(request) │ │ 978 │ │ │ │ │ ❱ 979 │ │ │ response = self._send_single_request(request) │ │ 980 │ │ │ try: │ │ 981 │ │ │ │ for hook in self._event_hooks["response"]: │ │ 982 │ │ │ │ │ hook(response) │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_client.py:1014 in _send_single_request │ │ │ │ 1011 │ │ │ ) │ │ 1012 │ │ │ │ 1013 │ │ with request_context(request=request): │ │ ❱ 1014 │ │ │ response = transport.handle_request(request) │ │ 1015 │ │ │ │ 1016 │ │ assert isinstance(response.stream, SyncByteStream) │ │ 1017 │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_transports/default.py:249 in handle_request │ │ │ │ 246 │ │ │ content=request.stream, │ │ 247 │ │ │ extensions=request.extensions, │ │ 248 │ │ ) │ │ ❱ 249 │ │ with map_httpcore_exceptions(): │ │ 250 │ │ │ resp = self._pool.handle_request(req) │ │ 251 │ │ │ │ 252 │ │ assert isinstance(resp.stream, typing.Iterable) │ │ │ │ /usr/local/lib/python3.14/contextlib.py:162 in __exit__ │ │ │ │ 159 │ │ │ │ # tell if we get the same exception back │ │ 160 │ │ │ │ value = typ() │ │ 161 │ │ │ try: │ │ ❱ 162 │ │ │ │ self.gen.throw(value) │ │ 163 │ │ │ except StopIteration as exc: │ │ 164 │ │ │ │ # Suppress StopIteration *unless* it's the same exception that │ │ 165 │ │ │ │ # was passed to throw(). This prevents a StopIteration │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_transports/default.py:118 in map_httpcore_exceptions │ │ │ │ 115 │ │ │ raise │ │ 116 │ │ │ │ 117 │ │ message = str(exc) │ │ ❱ 118 │ │ raise mapped_exc(message) from exc │ │ 119 │ │ 120 │ │ 121 class ResponseStream(SyncByteStream): │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ConnectError: [Errno 111] Connection refused The above exception was the direct cause of the following exception: ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_cli_bi/commands/bi_helpers.py:83 in wrapper_handle_some_exceptions │ │ │ │ 80 │ def wrapper_handle_some_exceptions(*args, **kwargs): │ │ 81 │ │ """Function wrapper for handle_some_exceptions.""" # noqa: D401 │ │ 82 │ │ try: │ │ ❱ 83 │ │ │ return func(*args, **kwargs) │ │ 84 │ │ except ApiResponseError as e: │ │ 85 │ │ │ if e._httpx_status_error.response.status_code in ( │ │ 86 │ │ │ │ 502, │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_cli_bi/commands/bi.py:1968 in extend_resource │ │ │ │ 1965 │ """Extend the expiration date of one or more basic infrastructure resources (on a single infrastructure).""" │ │ 1966 │ # If no resource(s) are specified, then this will extend all resources in this experiment on the infrastructure │ │ 1967 │ # specified by --infra-id.""" │ │ ❱ 1968 │ exp = bi_get_experiment(ctx, experiment) │ │ 1969 │ │ │ 1970 │ # The expire detection has some wiggle room, a bad local clock should not prevent extending just in time. │ │ 1971 │ expires_at_deadline = datetime.now(UTC) - timedelta(minutes=3) │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_cli_bi/commands/bi_helpers.py:114 in bi_get_experiment │ │ │ │ 111 │ if is_type_id(experiment_id, type="exp"): │ │ 112 │ │ exp_obj = ctx.obj.api.experiment.get(experiment_id) │ │ 113 │ else: │ │ ❱ 114 │ │ exp_obj = ctx.obj.api.get_experiment(experiment_id, project_id=ctx.obj.require_project_id()) │ │ 115 │ │ │ 116 │ if not exp_obj: │ │ 117 │ │ err_console.print(f"Could not retrieve experiment {experiment_id} :x:") │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_cli_bi/core/api.py:153 in get_experiment │ │ │ │ 150 │ │ """Get experiment by name.""" │ │ 151 │ │ return next( │ │ 152 │ │ │ iter( │ │ ❱ 153 │ │ │ │ self.experiment.list( │ │ 154 │ │ │ │ │ friendly_name=experiment_name, │ │ 155 │ │ │ │ │ project_id=project_id, │ │ 156 │ │ │ │ │ include_archived=not must_be_active, │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_clientlib_core/experiment.py:238 in list │ │ │ │ 235 │ │ │ if param_value is not None │ │ 236 │ │ } │ │ 237 │ │ │ │ ❱ 238 │ │ return PagedCollection("experiment", Experiment, self.API_BASE_PATH, self._client, params=params) │ │ 239 │ │ │ 240 │ def list_resources( │ │ 241 │ │ self, experiment_id: str, *, include_expired: bool | None = None, include_terminated: bool | None = None │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_clientlib_core/util/pagination.py:88 in __init__ │ │ │ │ 85 │ │ except HttpCoreConnectError as err: │ │ 86 │ │ │ raise ApiConnectError(url) from err │ │ 87 │ │ except HttpxConnectError as err: │ │ ❱ 88 │ │ │ raise ApiConnectError(url) from err │ │ 89 │ │ try: │ │ 90 │ │ │ response.raise_for_status() │ │ 91 │ │ │ self._first_page = self._decoder.decode(response.content) │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ApiConnectError: Connection Error connection to /apis/exp.slices-ri.eu/v1/experiments/ 2026-10-01 04:12:44.386271 UTC - Error in test step 'Check extend expire': "slices bi extend" failed 2026-10-01 04:12:44.386344 UTC - Testing ssh login 2026-10-01 04:12:44.400790 UTC - Run: slices bi --infra fr-sophia2-bi-vm2 ssh --no-exec --proxy on --show ssh_config --experiment tst-ccb049f4 tst 2026-10-01 04:12:46.020613 UTC - Content of log file '/test_dir/step_Sshinfossh_config_command_1.txt': slices bi --infra fr-sophia2-bi-vm2 ssh --no-exec --proxy on --show ssh_config --experiment tst-ccb049f4 tst 2026-10-01 04:12:46.021077 UTC - Content of log file '/test_dir/bi_ssh_STDERR.txt': ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_transports/default.py:101 in map_httpcore_exceptions │ │ │ │ 98 │ if len(HTTPCORE_EXC_MAP) == 0: │ │ 99 │ │ HTTPCORE_EXC_MAP = _load_httpcore_exceptions() │ │ 100 │ try: │ │ ❱ 101 │ │ yield │ │ 102 │ except Exception as exc: │ │ 103 │ │ mapped_exc = None │ │ 104 │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_transports/default.py:250 in handle_request │ │ │ │ 247 │ │ │ extensions=request.extensions, │ │ 248 │ │ ) │ │ 249 │ │ with map_httpcore_exceptions(): │ │ ❱ 250 │ │ │ resp = self._pool.handle_request(req) │ │ 251 │ │ │ │ 252 │ │ assert isinstance(resp.stream, typing.Iterable) │ │ 253 │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_sync/connection_pool.py:256 in handle_request │ │ │ │ 253 │ │ │ │ closing = self._assign_requests_to_connections() │ │ 254 │ │ │ │ │ 255 │ │ │ self._close_connections(closing) │ │ ❱ 256 │ │ │ raise exc from None │ │ 257 │ │ │ │ 258 │ │ # Return the response. Note that in this case we still have to manage │ │ 259 │ │ # the point at which the response is closed. │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_sync/connection_pool.py:236 in handle_request │ │ │ │ 233 │ │ │ │ │ │ 234 │ │ │ │ try: │ │ 235 │ │ │ │ │ # Send the request on the assigned connection. │ │ ❱ 236 │ │ │ │ │ response = connection.handle_request( │ │ 237 │ │ │ │ │ │ pool_request.request │ │ 238 │ │ │ │ │ ) │ │ 239 │ │ │ │ except ConnectionNotAvailable: │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_sync/connection.py:101 in handle_request │ │ │ │ 98 │ │ │ │ │ │ ) │ │ 99 │ │ except BaseException as exc: │ │ 100 │ │ │ self._connect_failed = True │ │ ❱ 101 │ │ │ raise exc │ │ 102 │ │ │ │ 103 │ │ return self._connection.handle_request(request) │ │ 104 │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_sync/connection.py:78 in handle_request │ │ │ │ 75 │ │ try: │ │ 76 │ │ │ with self._request_lock: │ │ 77 │ │ │ │ if self._connection is None: │ │ ❱ 78 │ │ │ │ │ stream = self._connect(request) │ │ 79 │ │ │ │ │ │ │ 80 │ │ │ │ │ ssl_object = stream.get_extra_info("ssl_object") │ │ 81 │ │ │ │ │ http2_negotiated = ( │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_sync/connection.py:124 in _connect │ │ │ │ 121 │ │ │ │ │ │ "socket_options": self._socket_options, │ │ 122 │ │ │ │ │ } │ │ 123 │ │ │ │ │ with Trace("connect_tcp", logger, request, kwargs) as trace: │ │ ❱ 124 │ │ │ │ │ │ stream = self._network_backend.connect_tcp(**kwargs) │ │ 125 │ │ │ │ │ │ trace.return_value = stream │ │ 126 │ │ │ │ else: │ │ 127 │ │ │ │ │ kwargs = { │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_backends/sync.py:207 in connect_tcp │ │ │ │ 204 │ │ │ OSError: ConnectError, │ │ 205 │ │ } │ │ 206 │ │ │ │ ❱ 207 │ │ with map_exceptions(exc_map): │ │ 208 │ │ │ sock = socket.create_connection( │ │ 209 │ │ │ │ address, │ │ 210 │ │ │ │ timeout, │ │ │ │ /usr/local/lib/python3.14/contextlib.py:162 in __exit__ │ │ │ │ 159 │ │ │ │ # tell if we get the same exception back │ │ 160 │ │ │ │ value = typ() │ │ 161 │ │ │ try: │ │ ❱ 162 │ │ │ │ self.gen.throw(value) │ │ 163 │ │ │ except StopIteration as exc: │ │ 164 │ │ │ │ # Suppress StopIteration *unless* it's the same exception that │ │ 165 │ │ │ │ # was passed to throw(). This prevents a StopIteration │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_exceptions.py:14 in map_exceptions │ │ │ │ 11 │ except Exception as exc: # noqa: PIE786 │ │ 12 │ │ for from_exc, to_exc in map.items(): │ │ 13 │ │ │ if isinstance(exc, from_exc): │ │ ❱ 14 │ │ │ │ raise to_exc(exc) from exc │ │ 15 │ │ raise # pragma: nocover │ │ 16 │ │ 17 │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ConnectError: [Errno 111] Connection refused The above exception was the direct cause of the following exception: ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_clientlib_core/util/pagination.py:84 in __init__ │ │ │ │ 81 │ │ self._client = client │ │ 82 │ │ self._params = params │ │ 83 │ │ try: │ │ ❱ 84 │ │ │ response = self._client.get(url, params=params) │ │ 85 │ │ except HttpCoreConnectError as err: │ │ 86 │ │ │ raise ApiConnectError(url) from err │ │ 87 │ │ except HttpxConnectError as err: │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_client.py:1053 in get │ │ │ │ 1050 │ │ │ │ 1051 │ │ **Parameters**: See `httpx.request`. │ │ 1052 │ │ """ │ │ ❱ 1053 │ │ return self.request( │ │ 1054 │ │ │ "GET", │ │ 1055 │ │ │ url, │ │ 1056 │ │ │ params=params, │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_client.py:825 in request │ │ │ │ 822 │ │ │ timeout=timeout, │ │ 823 │ │ │ extensions=extensions, │ │ 824 │ │ ) │ │ ❱ 825 │ │ return self.send(request, auth=auth, follow_redirects=follow_redirects) │ │ 826 │ │ │ 827 │ @contextmanager │ │ 828 │ def stream( │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_client.py:914 in send │ │ │ │ 911 │ │ │ │ 912 │ │ auth = self._build_request_auth(request, auth) │ │ 913 │ │ │ │ ❱ 914 │ │ response = self._send_handling_auth( │ │ 915 │ │ │ request, │ │ 916 │ │ │ auth=auth, │ │ 917 │ │ │ follow_redirects=follow_redirects, │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_client.py:942 in _send_handling_auth │ │ │ │ 939 │ │ │ request = next(auth_flow) │ │ 940 │ │ │ │ │ 941 │ │ │ while True: │ │ ❱ 942 │ │ │ │ response = self._send_handling_redirects( │ │ 943 │ │ │ │ │ request, │ │ 944 │ │ │ │ │ follow_redirects=follow_redirects, │ │ 945 │ │ │ │ │ history=history, │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_client.py:979 in _send_handling_redirects │ │ │ │ 976 │ │ │ for hook in self._event_hooks["request"]: │ │ 977 │ │ │ │ hook(request) │ │ 978 │ │ │ │ │ ❱ 979 │ │ │ response = self._send_single_request(request) │ │ 980 │ │ │ try: │ │ 981 │ │ │ │ for hook in self._event_hooks["response"]: │ │ 982 │ │ │ │ │ hook(response) │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_client.py:1014 in _send_single_request │ │ │ │ 1011 │ │ │ ) │ │ 1012 │ │ │ │ 1013 │ │ with request_context(request=request): │ │ ❱ 1014 │ │ │ response = transport.handle_request(request) │ │ 1015 │ │ │ │ 1016 │ │ assert isinstance(response.stream, SyncByteStream) │ │ 1017 │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_transports/default.py:249 in handle_request │ │ │ │ 246 │ │ │ content=request.stream, │ │ 247 │ │ │ extensions=request.extensions, │ │ 248 │ │ ) │ │ ❱ 249 │ │ with map_httpcore_exceptions(): │ │ 250 │ │ │ resp = self._pool.handle_request(req) │ │ 251 │ │ │ │ 252 │ │ assert isinstance(resp.stream, typing.Iterable) │ │ │ │ /usr/local/lib/python3.14/contextlib.py:162 in __exit__ │ │ │ │ 159 │ │ │ │ # tell if we get the same exception back │ │ 160 │ │ │ │ value = typ() │ │ 161 │ │ │ try: │ │ ❱ 162 │ │ │ │ self.gen.throw(value) │ │ 163 │ │ │ except StopIteration as exc: │ │ 164 │ │ │ │ # Suppress StopIteration *unless* it's the same exception that │ │ 165 │ │ │ │ # was passed to throw(). This prevents a StopIteration │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_transports/default.py:118 in map_httpcore_exceptions │ │ │ │ 115 │ │ │ raise │ │ 116 │ │ │ │ 117 │ │ message = str(exc) │ │ ❱ 118 │ │ raise mapped_exc(message) from exc │ │ 119 │ │ 120 │ │ 121 class ResponseStream(SyncByteStream): │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ConnectError: [Errno 111] Connection refused The above exception was the direct cause of the following exception: ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_cli_bi/commands/bi_helpers.py:83 in wrapper_handle_some_exceptions │ │ │ │ 80 │ def wrapper_handle_some_exceptions(*args, **kwargs): │ │ 81 │ │ """Function wrapper for handle_some_exceptions.""" # noqa: D401 │ │ 82 │ │ try: │ │ ❱ 83 │ │ │ return func(*args, **kwargs) │ │ 84 │ │ except ApiResponseError as e: │ │ 85 │ │ │ if e._httpx_status_error.response.status_code in ( │ │ 86 │ │ │ │ 502, │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_cli_bi/commands/bi.py:2270 in ssh_to_resource │ │ │ │ 2267 │ │ proxy = ProxyOption.on │ │ 2268 │ │ │ 2269 │ exp, compute_resource, ssh_login, can_connect, ssh_command_options, destination, ssh_config_jump_proxy = ( │ │ ❱ 2270 │ │ _ssh_common(ctx, resource, experiment, proxy) │ │ 2271 │ ) │ │ 2272 │ │ │ 2273 │ command = [ │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_cli_bi/commands/bi.py:2157 in _ssh_common │ │ │ │ 2154 │ experiment: str, │ │ 2155 │ proxy: ProxyOption, │ │ 2156 ) -> tuple[Experiment, ComputeResource, SSHInfo, bool, list[str], str, str]: │ │ ❱ 2157 │ exp = bi_get_experiment(ctx, experiment) │ │ 2158 │ compute_resource = bi_get_resource(ctx, exp, resource) │ │ 2159 │ _check_resource_available_for_action(compute_resource) │ │ 2160 │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_cli_bi/commands/bi_helpers.py:114 in bi_get_experiment │ │ │ │ 111 │ if is_type_id(experiment_id, type="exp"): │ │ 112 │ │ exp_obj = ctx.obj.api.experiment.get(experiment_id) │ │ 113 │ else: │ │ ❱ 114 │ │ exp_obj = ctx.obj.api.get_experiment(experiment_id, project_id=ctx.obj.require_project_id()) │ │ 115 │ │ │ 116 │ if not exp_obj: │ │ 117 │ │ err_console.print(f"Could not retrieve experiment {experiment_id} :x:") │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_cli_bi/core/api.py:153 in get_experiment │ │ │ │ 150 │ │ """Get experiment by name.""" │ │ 151 │ │ return next( │ │ 152 │ │ │ iter( │ │ ❱ 153 │ │ │ │ self.experiment.list( │ │ 154 │ │ │ │ │ friendly_name=experiment_name, │ │ 155 │ │ │ │ │ project_id=project_id, │ │ 156 │ │ │ │ │ include_archived=not must_be_active, │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_clientlib_core/experiment.py:238 in list │ │ │ │ 235 │ │ │ if param_value is not None │ │ 236 │ │ } │ │ 237 │ │ │ │ ❱ 238 │ │ return PagedCollection("experiment", Experiment, self.API_BASE_PATH, self._client, params=params) │ │ 239 │ │ │ 240 │ def list_resources( │ │ 241 │ │ self, experiment_id: str, *, include_expired: bool | None = None, include_terminated: bool | None = None │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_clientlib_core/util/pagination.py:88 in __init__ │ │ │ │ 85 │ │ except HttpCoreConnectError as err: │ │ 86 │ │ │ raise ApiConnectError(url) from err │ │ 87 │ │ except HttpxConnectError as err: │ │ ❱ 88 │ │ │ raise ApiConnectError(url) from err │ │ 89 │ │ try: │ │ 90 │ │ │ response.raise_for_status() │ │ 91 │ │ │ self._first_page = self._decoder.decode(response.content) │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ApiConnectError: Connection Error connection to /apis/exp.slices-ri.eu/v1/experiments/ 2026-10-01 04:12:46.021336 UTC - Error in test step 'Ssh info ssh_config': "slices bi ssh --show ssh_config" failed 2026-10-01 04:12:46.032814 UTC - Destroying tst-ccb049f4 tst 2026-10-01 04:12:46.033069 UTC - Run: slices bi --infra fr-sophia2-bi-vm2 destroy --experiment tst-ccb049f4 tst 2026-10-01 04:12:47.401115 UTC - Content of log file '/test_dir/step_Destroy_command_1.txt': slices bi --infra fr-sophia2-bi-vm2 destroy --experiment tst-ccb049f4 tst 2026-10-01 04:12:47.401386 UTC - Content of log file '/test_dir/destroy.txt': ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_transports/default.py:101 in map_httpcore_exceptions │ │ │ │ 98 │ if len(HTTPCORE_EXC_MAP) == 0: │ │ 99 │ │ HTTPCORE_EXC_MAP = _load_httpcore_exceptions() │ │ 100 │ try: │ │ ❱ 101 │ │ yield │ │ 102 │ except Exception as exc: │ │ 103 │ │ mapped_exc = None │ │ 104 │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_transports/default.py:250 in handle_request │ │ │ │ 247 │ │ │ extensions=request.extensions, │ │ 248 │ │ ) │ │ 249 │ │ with map_httpcore_exceptions(): │ │ ❱ 250 │ │ │ resp = self._pool.handle_request(req) │ │ 251 │ │ │ │ 252 │ │ assert isinstance(resp.stream, typing.Iterable) │ │ 253 │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_sync/connection_pool.py:256 in handle_request │ │ │ │ 253 │ │ │ │ closing = self._assign_requests_to_connections() │ │ 254 │ │ │ │ │ 255 │ │ │ self._close_connections(closing) │ │ ❱ 256 │ │ │ raise exc from None │ │ 257 │ │ │ │ 258 │ │ # Return the response. Note that in this case we still have to manage │ │ 259 │ │ # the point at which the response is closed. │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_sync/connection_pool.py:236 in handle_request │ │ │ │ 233 │ │ │ │ │ │ 234 │ │ │ │ try: │ │ 235 │ │ │ │ │ # Send the request on the assigned connection. │ │ ❱ 236 │ │ │ │ │ response = connection.handle_request( │ │ 237 │ │ │ │ │ │ pool_request.request │ │ 238 │ │ │ │ │ ) │ │ 239 │ │ │ │ except ConnectionNotAvailable: │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_sync/connection.py:101 in handle_request │ │ │ │ 98 │ │ │ │ │ │ ) │ │ 99 │ │ except BaseException as exc: │ │ 100 │ │ │ self._connect_failed = True │ │ ❱ 101 │ │ │ raise exc │ │ 102 │ │ │ │ 103 │ │ return self._connection.handle_request(request) │ │ 104 │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_sync/connection.py:78 in handle_request │ │ │ │ 75 │ │ try: │ │ 76 │ │ │ with self._request_lock: │ │ 77 │ │ │ │ if self._connection is None: │ │ ❱ 78 │ │ │ │ │ stream = self._connect(request) │ │ 79 │ │ │ │ │ │ │ 80 │ │ │ │ │ ssl_object = stream.get_extra_info("ssl_object") │ │ 81 │ │ │ │ │ http2_negotiated = ( │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_sync/connection.py:124 in _connect │ │ │ │ 121 │ │ │ │ │ │ "socket_options": self._socket_options, │ │ 122 │ │ │ │ │ } │ │ 123 │ │ │ │ │ with Trace("connect_tcp", logger, request, kwargs) as trace: │ │ ❱ 124 │ │ │ │ │ │ stream = self._network_backend.connect_tcp(**kwargs) │ │ 125 │ │ │ │ │ │ trace.return_value = stream │ │ 126 │ │ │ │ else: │ │ 127 │ │ │ │ │ kwargs = { │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_backends/sync.py:207 in connect_tcp │ │ │ │ 204 │ │ │ OSError: ConnectError, │ │ 205 │ │ } │ │ 206 │ │ │ │ ❱ 207 │ │ with map_exceptions(exc_map): │ │ 208 │ │ │ sock = socket.create_connection( │ │ 209 │ │ │ │ address, │ │ 210 │ │ │ │ timeout, │ │ │ │ /usr/local/lib/python3.14/contextlib.py:162 in __exit__ │ │ │ │ 159 │ │ │ │ # tell if we get the same exception back │ │ 160 │ │ │ │ value = typ() │ │ 161 │ │ │ try: │ │ ❱ 162 │ │ │ │ self.gen.throw(value) │ │ 163 │ │ │ except StopIteration as exc: │ │ 164 │ │ │ │ # Suppress StopIteration *unless* it's the same exception that │ │ 165 │ │ │ │ # was passed to throw(). This prevents a StopIteration │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpcore/_exceptions.py:14 in map_exceptions │ │ │ │ 11 │ except Exception as exc: # noqa: PIE786 │ │ 12 │ │ for from_exc, to_exc in map.items(): │ │ 13 │ │ │ if isinstance(exc, from_exc): │ │ ❱ 14 │ │ │ │ raise to_exc(exc) from exc │ │ 15 │ │ raise # pragma: nocover │ │ 16 │ │ 17 │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ConnectError: [Errno 111] Connection refused The above exception was the direct cause of the following exception: ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_clientlib_core/util/pagination.py:84 in __init__ │ │ │ │ 81 │ │ self._client = client │ │ 82 │ │ self._params = params │ │ 83 │ │ try: │ │ ❱ 84 │ │ │ response = self._client.get(url, params=params) │ │ 85 │ │ except HttpCoreConnectError as err: │ │ 86 │ │ │ raise ApiConnectError(url) from err │ │ 87 │ │ except HttpxConnectError as err: │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_client.py:1053 in get │ │ │ │ 1050 │ │ │ │ 1051 │ │ **Parameters**: See `httpx.request`. │ │ 1052 │ │ """ │ │ ❱ 1053 │ │ return self.request( │ │ 1054 │ │ │ "GET", │ │ 1055 │ │ │ url, │ │ 1056 │ │ │ params=params, │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_client.py:825 in request │ │ │ │ 822 │ │ │ timeout=timeout, │ │ 823 │ │ │ extensions=extensions, │ │ 824 │ │ ) │ │ ❱ 825 │ │ return self.send(request, auth=auth, follow_redirects=follow_redirects) │ │ 826 │ │ │ 827 │ @contextmanager │ │ 828 │ def stream( │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_client.py:914 in send │ │ │ │ 911 │ │ │ │ 912 │ │ auth = self._build_request_auth(request, auth) │ │ 913 │ │ │ │ ❱ 914 │ │ response = self._send_handling_auth( │ │ 915 │ │ │ request, │ │ 916 │ │ │ auth=auth, │ │ 917 │ │ │ follow_redirects=follow_redirects, │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_client.py:942 in _send_handling_auth │ │ │ │ 939 │ │ │ request = next(auth_flow) │ │ 940 │ │ │ │ │ 941 │ │ │ while True: │ │ ❱ 942 │ │ │ │ response = self._send_handling_redirects( │ │ 943 │ │ │ │ │ request, │ │ 944 │ │ │ │ │ follow_redirects=follow_redirects, │ │ 945 │ │ │ │ │ history=history, │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_client.py:979 in _send_handling_redirects │ │ │ │ 976 │ │ │ for hook in self._event_hooks["request"]: │ │ 977 │ │ │ │ hook(request) │ │ 978 │ │ │ │ │ ❱ 979 │ │ │ response = self._send_single_request(request) │ │ 980 │ │ │ try: │ │ 981 │ │ │ │ for hook in self._event_hooks["response"]: │ │ 982 │ │ │ │ │ hook(response) │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_client.py:1014 in _send_single_request │ │ │ │ 1011 │ │ │ ) │ │ 1012 │ │ │ │ 1013 │ │ with request_context(request=request): │ │ ❱ 1014 │ │ │ response = transport.handle_request(request) │ │ 1015 │ │ │ │ 1016 │ │ assert isinstance(response.stream, SyncByteStream) │ │ 1017 │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_transports/default.py:249 in handle_request │ │ │ │ 246 │ │ │ content=request.stream, │ │ 247 │ │ │ extensions=request.extensions, │ │ 248 │ │ ) │ │ ❱ 249 │ │ with map_httpcore_exceptions(): │ │ 250 │ │ │ resp = self._pool.handle_request(req) │ │ 251 │ │ │ │ 252 │ │ assert isinstance(resp.stream, typing.Iterable) │ │ │ │ /usr/local/lib/python3.14/contextlib.py:162 in __exit__ │ │ │ │ 159 │ │ │ │ # tell if we get the same exception back │ │ 160 │ │ │ │ value = typ() │ │ 161 │ │ │ try: │ │ ❱ 162 │ │ │ │ self.gen.throw(value) │ │ 163 │ │ │ except StopIteration as exc: │ │ 164 │ │ │ │ # Suppress StopIteration *unless* it's the same exception that │ │ 165 │ │ │ │ # was passed to throw(). This prevents a StopIteration │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/httpx/_transports/default.py:118 in map_httpcore_exceptions │ │ │ │ 115 │ │ │ raise │ │ 116 │ │ │ │ 117 │ │ message = str(exc) │ │ ❱ 118 │ │ raise mapped_exc(message) from exc │ │ 119 │ │ 120 │ │ 121 class ResponseStream(SyncByteStream): │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ConnectError: [Errno 111] Connection refused The above exception was the direct cause of the following exception: ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_cli_bi/commands/bi_helpers.py:83 in wrapper_handle_some_exceptions │ │ │ │ 80 │ def wrapper_handle_some_exceptions(*args, **kwargs): │ │ 81 │ │ """Function wrapper for handle_some_exceptions.""" # noqa: D401 │ │ 82 │ │ try: │ │ ❱ 83 │ │ │ return func(*args, **kwargs) │ │ 84 │ │ except ApiResponseError as e: │ │ 85 │ │ │ if e._httpx_status_error.response.status_code in ( │ │ 86 │ │ │ │ 502, │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_cli_bi/commands/bi.py:1287 in destroy_resource │ │ │ │ 1284 │ If no resources are given and an explicit --yes-all-of-them, then destroy all resources in the experiment. │ │ 1285 │ Ask for confirmation for each resource, unless --force is used. │ │ 1286 │ """ │ │ ❱ 1287 │ exp = bi_get_experiment(ctx, experiment) │ │ 1288 │ │ │ 1289 │ resources_to_delete: Collection[ComputeResource] = _get_requested_bi_resources( │ │ 1290 │ │ ctx, exp, resources, include_expired=False, include_terminated=False │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_cli_bi/commands/bi_helpers.py:114 in bi_get_experiment │ │ │ │ 111 │ if is_type_id(experiment_id, type="exp"): │ │ 112 │ │ exp_obj = ctx.obj.api.experiment.get(experiment_id) │ │ 113 │ else: │ │ ❱ 114 │ │ exp_obj = ctx.obj.api.get_experiment(experiment_id, project_id=ctx.obj.require_project_id()) │ │ 115 │ │ │ 116 │ if not exp_obj: │ │ 117 │ │ err_console.print(f"Could not retrieve experiment {experiment_id} :x:") │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_cli_bi/core/api.py:153 in get_experiment │ │ │ │ 150 │ │ """Get experiment by name.""" │ │ 151 │ │ return next( │ │ 152 │ │ │ iter( │ │ ❱ 153 │ │ │ │ self.experiment.list( │ │ 154 │ │ │ │ │ friendly_name=experiment_name, │ │ 155 │ │ │ │ │ project_id=project_id, │ │ 156 │ │ │ │ │ include_archived=not must_be_active, │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_clientlib_core/experiment.py:238 in list │ │ │ │ 235 │ │ │ if param_value is not None │ │ 236 │ │ } │ │ 237 │ │ │ │ ❱ 238 │ │ return PagedCollection("experiment", Experiment, self.API_BASE_PATH, self._client, params=params) │ │ 239 │ │ │ 240 │ def list_resources( │ │ 241 │ │ self, experiment_id: str, *, include_expired: bool | None = None, include_terminated: bool | None = None │ │ │ │ /root/.local/share/uv/tools/slices-cli/lib/python3.14/site-packages/slices_clientlib_core/util/pagination.py:88 in __init__ │ │ │ │ 85 │ │ except HttpCoreConnectError as err: │ │ 86 │ │ │ raise ApiConnectError(url) from err │ │ 87 │ │ except HttpxConnectError as err: │ │ ❱ 88 │ │ │ raise ApiConnectError(url) from err │ │ 89 │ │ try: │ │ 90 │ │ │ response.raise_for_status() │ │ 91 │ │ │ self._first_page = self._decoder.decode(response.content) │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ApiConnectError: Connection Error connection to /apis/exp.slices-ri.eu/v1/experiments/ 2026-10-01 04:12:47.401547 UTC - Error in test step 'Destroy': "slices bi destroy" failed (return value is 1) 2026-10-01 04:12:47.401613 UTC - Wait 2s before retry