Using CPython 3.14.6 interpreter at: /usr/local/bin/python3 Creating virtual environment at: .venv Resolved 32 packages in 4.02s Building slices-monitor-test-runner @ file:///app Built slices-monitor-test-runner @ file:///app Prepared 1 package in 185ms warning: Failed to hardlink files; falling back to full copy. This may lead to degraded performance. If the cache and target directories are on different filesystems, hardlinking may not be supported. If this is intentional, set `export UV_LINK_MODE=copy` or use `--link-mode=copy` to suppress this warning. Installed 32 packages in 224ms + annotated-types==0.7.0 + anyio==4.14.2 + authlib==1.7.2 + bcrypt==5.0.0 + certifi==2026.6.17 + cffi==2.1.0 + cryptography==49.0.0 + dnspython==2.8.0 + h11==0.16.0 + httpcore==1.0.9 + httpx==0.28.1 + httpx-oauth==0.17.0 + idna==3.18 + invoke==3.0.3 + joserfc==1.7.4 + msgspec==0.21.1 + packaging==26.2 + paramiko==4.0.0 + pycparser==3.0 + pydantic==2.13.4 + pydantic-core==2.46.4 + pyjwt==2.13.0 + pynacl==1.6.2 + pytz==2026.2 + pyyaml==6.0.3 + slices-clientlib-bi==5.1.2 + slices-clientlib-core==5.6.0 + slices-monitor-test-runner==0.1.dev187+g005dd054e (from file:///app) + tomli-w==1.2.0 + tomlkit==0.15.1 + typing-extensions==4.16.0 + typing-inspection==0.4.2 Run Test: slices-bi-singlenode-login 2026-07-21 04:00:54.709145 UTC - Installing Slices CLI (latest stable version). 2026-07-21 04:00:54.709511 UTC - Run: /usr/local/bin/uv pip install --index=https://doc.slices-ri.eu/pypi/ slices-cli 2026-07-21 04:01:00.355140 UTC - Slices CLI installed. 2026-07-21 04:01:00.355443 UTC - PATH: {'PATH': '/app/.venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/.local/bin/:/root/slices-cli-venv/bin', 'COLUMNS': '200'} 2026-07-21 04:01:00.358527 UTC - ls -a /root/ /scripts/ (error 2): None b"ls: cannot access '/scripts/': No such file or directory\n/root/:\n.\n..\n.cache\n.local\n.slices\nrun_test_runner.sh\nslices-cli-venv\n" 2026-07-21 04:01:00.359630 UTC - which slices: b'/app/.venv/bin/slices\n' 2026-07-21 04:01:00.359801 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-07-21 04:01:00.359839 UTC - Slices CLI exe: 'slices' 2026-07-21 04:01:00.359864 UTC - Slices CLI venv path: '/root/slices-cli-venv/' 2026-07-21 04:01:00.360178 UTC - Run: slices --version 2026-07-21 04:01:03.283145 UTC - version: Slices CLI v2026.1.2 Slices CLI core v1.2.4 Slices CLI ai v1.1.0 Slices CLI bi v2.2.0 Slices clientlib bi v6.1.1 Slices clientlib ai v1.0.0 Slices clientlib core v5.5.1 2026-07-21 04:01:03.283449 UTC - Run: slices pubkey list --format text 2026-07-21 04:01:04.249464 UTC - Pubkey already registered 2026-07-21 04:01:04.249759 UTC - Run: slices bi infrastructure list --format csv --all --refresh 2026-07-21 04:01:04.914998 UTC - Refreshed infrastructure list. Total: 24 entries. 2026-07-21 04:01:04.915095 UTC - Check List Flavors 2026-07-21 04:01:04.915279 UTC - Run: slices bi --infra fr-sophia2-bi-vm2 flavor list -f json 2026-07-21 04:01:06.738757 UTC - Check List DiskImages 2026-07-21 04:01:06.739243 UTC - Run: slices bi --infra fr-sophia2-bi-vm2 diskimage list -f json 2026-07-21 04:01:07.404661 UTC - Requesting resources 2026-07-21 04:01:07.405265 UTC - Run: slices bi --infra fr-sophia2-bi-vm2 create tst --image 'Ubuntu 24.04.3' --flavor tiny --duration 2h --experiment tst-2aa83041 2026-07-21 04:01:11.828991 UTC - Resource ID: r_fr-sophia2-bi-vm2_01ky1dbdekfg0r73jhk7ef1vmw 2026-07-21 04:01:11.829159 UTC - Waiting until resource ready 2026-07-21 04:01:13.829547 UTC - Run: slices bi --infra fr-sophia2-bi-vm2 list-resources --format json --experiment tst-2aa83041 tst 2026-07-21 04:01:14.645289 UTC - Status: IMAGING 2026-07-21 04:01:17.462009 UTC - Status: BOOTING 2026-07-21 04:01:20.278890 UTC - Status: BOOTING 2026-07-21 04:01:23.045334 UTC - Status: BOOTING 2026-07-21 04:01:25.812129 UTC - Status: BOOTING 2026-07-21 04:01:28.578849 UTC - Status: BOOTING 2026-07-21 04:01:31.346439 UTC - Status: BOOTING 2026-07-21 04:01:34.162993 UTC - Status: BOOTING 2026-07-21 04:01:36.982273 UTC - Status: UP 2026-07-21 04:01:36.982385 UTC - Experiment ID: exp_expauth.ilabt.imec.be_01ky1dbc0peabbbhx7tbzq8z37 2026-07-21 04:01:36.982434 UTC - Validate resources 2026-07-21 04:01:37.748610 UTC - The fields of the created resource were validated. 2026-07-21 04:01:37.748738 UTC - Check if resources are registered in experiment 2026-07-21 04:01:37.748932 UTC - Run: slices experiment list-resources --format json tst-2aa83041 2026-07-21 04:01:38.414284 UTC - Status (on expauth): UP 2026-07-21 04:01:38.414446 UTC - Testing extend expires_at (all resources in experiment) 2026-07-21 04:01:38.414595 UTC - Run: slices bi --infra fr-sophia2-bi-vm2 extend --duration 3h --experiment tst-2aa83041 2026-07-21 04:01:41.637739 UTC - Run: slices bi --infra fr-sophia2-bi-vm2 list-resources --format json --experiment tst-2aa83041 tst 2026-07-21 04:01:42.453941 UTC - Run: slices experiment list-resources --format json tst-2aa83041 2026-07-21 04:01:43.120150 UTC - expires_at (on expauth): 2026-07-21T07:01:00Z (correctly extended) 2026-07-21 04:01:43.120272 UTC - Testing extend expires_at (single resource in experiment) 2026-07-21 04:01:43.120454 UTC - Run: slices bi --infra fr-sophia2-bi-vm2 extend tst --duration 4h --experiment tst-2aa83041 2026-07-21 04:01:46.494962 UTC - Content of log file '/test_dir/step_Checkextendexpire_command_1.txt': slices bi --infra fr-sophia2-bi-vm2 extend --duration 3h --experiment tst-2aa83041 2026-07-21 04:01:46.495063 UTC - Content of log file '/test_dir/experiment-extend-all.txt': Extending Experiment container from 2026-07-21 06:01 UTC to 2026-07-21 07:01 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-07-21 07:01 UTC. Overview of extended resources in experiment tst-2aa83041 ┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┓ ┃ Friendly Name ┃ Infra ┃ Type ┃ Status ┃ Description ┃ Created At ┃ Expires At ┃ ┡━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━┩ │ tst │ fr-sophia2-bi-vm2 │ vm │ up │ Minimal VM │ 2026-07-21 04:01 UTC │ 2026-07-21 07:01 UTC │ └───────────────┴───────────────────┴──────┴────────┴─────────────┴──────────────────────┴──────────────────────┘ 2026-07-21 04:01:46.495117 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-2aa83041 tst 2026-07-21 04:01:46.495177 UTC - Content of log file '/test_dir/list-bi-resources-after-extend_json.txt': [ { "cluster_id": "default", "created_at": "2026-07-21T04:01:11.631169Z", "disk_image_id": "image_fr-sophia2-bi-vm2_01ktv3d2wyfm0rqt4zjpkx7fh9", "experiment_id": "exp_expauth.ilabt.imec.be_01ky1dbc0peabbbhx7tbzq8z37", "expires_at": "2026-07-21T07:01:00Z", "flavor_id": "flavor_fr-sophia2-bi-vm2_01ktv3d2xbe10rq2n40zc0h15w", "friendly_name": "tst", "id": "r_fr-sophia2-bi-vm2_01ky1dbdekfg0r73jhk7ef1vmw", "network_interfaces": [], "private_ipv4": "172.28.10.24", "private_ipv6": null, "public_ipv4": null, "public_ipv6": null, "ssh_authorized_keys": [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINNiZPtQkfCEsc1x2QSwNWekfhWwWZbOvpE8hE0dH253 Wim (ftester) Van de Meerssche" ], "ssh_logins": [ { "host": "172.28.10.24", "port": 22, "username": "ftester", "host_keys": [ "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCatpBPNiOiLhkcoKbCy50G8XTKwRVYjYhpN253r+DzPp0s91hOPwlgPoQ84/p+JXVngCuZlrqe+DoC47+BWktU6JYxDjVb7U2oUOzScCMyeJ4BYeAB5FLG9+tmK0G2r6+HZ82TNdB299CYv6yUtLBz3XVZS+ohZMm23NMy4724kaHCmUiIeRAwpkvFbONJm/XelHhdtP2xz4pDkAL4C1uLstFMd6b3+VAHbnfawHM+qn1NB/2Y+Xnb/lw14IF8YzJls3cunp4JLpcm+n55S1QNREtI7Z7MH90+uGqev0E8ldzpn7YyB0b4c7e4AAFvD86QDa2+qUukpNkUAGwvtrycgumMrNkZFKOw+wzb/x/LPM6lZufgT8vHqRxmQwvP11env2gW+tCKQyvtEOkO0IPF+Dws9v8eqen9MNW/TrCAD/WtctPnEKIo4WOXBLhPLgpGmTrJsz34WznJUb1cbHuKIVf2+p6jOM+kWTVb0lADvY/pd9f7ojOsC3BpE1vegyc=", "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLr7qTiDUVfBAGyjYx/SiqEHOlDFfqwaQmvL3RcW7G3KVjfbWXXDAwgyYFarjnYSS0hRHntqOyk9oKLCEMSmLOk=", "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEyJZtbwE4f1l1UKaKnDtWLxhjyCz6BJIW1LaOfNTtHI" ], "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-07-21 04:01:46.495217 UTC - Content of log file '/test_dir/step_Checkextendexpire_command_3.txt': slices experiment list-resources --format json tst-2aa83041 2026-07-21 04:01:46.495257 UTC - Content of log file '/test_dir/experiment-list-resources-after-extend.txt': [ { "id": "r_fr-sophia2-bi-vm2_01ky1dbdekfg0r73jhk7ef1vmw", "created_at": "2026-07-21T04:01:11.631169Z", "created_by": "user_account.ilabt.imec.be_1c3x2sxhmv8dqtmkxh9392sa0g", "experiment_id": "exp_expauth.ilabt.imec.be_01ky1dbc0peabbbhx7tbzq8z37", "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-07-21T07:01:00Z", "terminated_at": null, "terminated_by": null } ] 2026-07-21 04:01:46.495296 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-2aa83041 2026-07-21 04:01:46.495473 UTC - Content of log file '/test_dir/experiment-extend-resource.txt': Extending Experiment container from 2026-07-21 07:01 UTC to 2026-07-21 08:01 UTC... ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /app/.venv/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 │ │ │ │ /app/.venv/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 │ │ │ │ /app/.venv/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. │ │ │ │ /app/.venv/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: │ │ │ │ /app/.venv/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 │ │ │ │ /app/.venv/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 = ( │ │ │ │ /app/.venv/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 = { │ │ │ │ /app/.venv/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 │ │ │ │ /app/.venv/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) ──────────────────────────────────────────────────────────────────────────────────╮ │ /app/.venv/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, │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_cli_bi/commands/bi.py:1989 in extend_resource │ │ │ │ 1986 │ │ │ f"Extending Experiment container from {friendly_datetime(exp.expires_at)} " │ │ 1987 │ │ │ f"to {friendly_datetime(new_expires_at)}..." │ │ 1988 │ │ ) │ │ ❱ 1989 │ │ ctx.obj.api.experiment.update( │ │ 1990 │ │ │ exp.id, │ │ 1991 │ │ │ exp.project_id, │ │ 1992 │ │ │ expires_at=new_expires_at, │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_clientlib_core/experiment.py:204 in update │ │ │ │ 201 │ │ │ │ 202 │ │ update_data["project_token"] = self._project_client.get_jwt(project_id) │ │ 203 │ │ │ │ ❱ 204 │ │ response = self._client.put( │ │ 205 │ │ │ f"{self.API_BASE_PATH}{experiment_id}", │ │ 206 │ │ │ json=update_data, │ │ 207 │ │ ) │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpx/_client.py:1181 in put │ │ │ │ 1178 │ │ │ │ 1179 │ │ **Parameters**: See `httpx.request`. │ │ 1180 │ │ """ │ │ ❱ 1181 │ │ return self.request( │ │ 1182 │ │ │ "PUT", │ │ 1183 │ │ │ url, │ │ 1184 │ │ │ content=content, │ │ │ │ /app/.venv/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( │ │ │ │ /app/.venv/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, │ │ │ │ /app/.venv/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, │ │ │ │ /app/.venv/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) │ │ │ │ /app/.venv/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 │ │ │ │ /app/.venv/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 │ │ │ │ /app/.venv/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 2026-07-21 04:01:46.495592 UTC - Error in test step 'Check extend expire': "slices bi extend" failed 2026-07-21 04:01:46.495650 UTC - Testing ssh login 2026-07-21 04:01:46.510101 UTC - Run: slices bi --infra fr-sophia2-bi-vm2 ssh --no-exec --proxy on --show ssh_config --experiment tst-2aa83041 tst 2026-07-21 04:01:47.983099 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-2aa83041 tst 2026-07-21 04:01:47.983339 UTC - Content of log file '/test_dir/bi_ssh_STDERR.txt': ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /app/.venv/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 │ │ │ │ /app/.venv/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 │ │ │ │ /app/.venv/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. │ │ │ │ /app/.venv/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: │ │ │ │ /app/.venv/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 │ │ │ │ /app/.venv/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 = ( │ │ │ │ /app/.venv/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 = { │ │ │ │ /app/.venv/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 │ │ │ │ /app/.venv/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) ──────────────────────────────────────────────────────────────────────────────────╮ │ /app/.venv/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: │ │ │ │ /app/.venv/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, │ │ │ │ /app/.venv/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( │ │ │ │ /app/.venv/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, │ │ │ │ /app/.venv/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, │ │ │ │ /app/.venv/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) │ │ │ │ /app/.venv/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 │ │ │ │ /app/.venv/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 │ │ │ │ /app/.venv/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) ──────────────────────────────────────────────────────────────────────────────────╮ │ /app/.venv/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, │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_cli_bi/commands/bi.py:2215 in ssh_to_resource │ │ │ │ 2212 │ │ proxy = ProxyOption.on │ │ 2213 │ │ │ 2214 │ exp, compute_resource, ssh_login, can_connect, ssh_command_options, destination, ssh_config_jump_proxy = ( │ │ ❱ 2215 │ │ _ssh_common(ctx, resource, experiment, proxy) │ │ 2216 │ ) │ │ 2217 │ │ │ 2218 │ command = [ │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_cli_bi/commands/bi.py:2102 in _ssh_common │ │ │ │ 2099 │ experiment: str, │ │ 2100 │ proxy: ProxyOption, │ │ 2101 ) -> tuple[Experiment, ComputeResource, SSHInfo, bool, list[str], str, str]: │ │ ❱ 2102 │ exp = bi_get_experiment(ctx, experiment) │ │ 2103 │ compute_resource = bi_get_resource(ctx, exp, resource) │ │ 2104 │ _check_resource_available_for_action(compute_resource) │ │ 2105 │ │ │ │ /app/.venv/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:") │ │ │ │ /app/.venv/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, │ │ │ │ /app/.venv/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 │ │ │ │ /app/.venv/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-07-21 04:01:47.983470 UTC - Error in test step 'Ssh info ssh_config': "slices bi ssh --show ssh_config" failed 2026-07-21 04:01:47.990914 UTC - Destroying tst-2aa83041 tst 2026-07-21 04:01:47.991092 UTC - Run: slices bi --infra fr-sophia2-bi-vm2 destroy --experiment tst-2aa83041 tst 2026-07-21 04:01:49.207817 UTC - Content of log file '/test_dir/step_Destroy_command_1.txt': slices bi --infra fr-sophia2-bi-vm2 destroy --experiment tst-2aa83041 tst 2026-07-21 04:01:49.208064 UTC - Content of log file '/test_dir/destroy.txt': ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /app/.venv/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 │ │ │ │ /app/.venv/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 │ │ │ │ /app/.venv/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. │ │ │ │ /app/.venv/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: │ │ │ │ /app/.venv/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 │ │ │ │ /app/.venv/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 = ( │ │ │ │ /app/.venv/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 = { │ │ │ │ /app/.venv/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 │ │ │ │ /app/.venv/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) ──────────────────────────────────────────────────────────────────────────────────╮ │ /app/.venv/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: │ │ │ │ /app/.venv/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, │ │ │ │ /app/.venv/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( │ │ │ │ /app/.venv/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, │ │ │ │ /app/.venv/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, │ │ │ │ /app/.venv/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) │ │ │ │ /app/.venv/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 │ │ │ │ /app/.venv/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 │ │ │ │ /app/.venv/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) ──────────────────────────────────────────────────────────────────────────────────╮ │ /app/.venv/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, │ │ │ │ /app/.venv/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 │ │ │ │ /app/.venv/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:") │ │ │ │ /app/.venv/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, │ │ │ │ /app/.venv/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 │ │ │ │ /app/.venv/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-07-21 04:01:49.208190 UTC - Error in test step 'Destroy': "slices bi destroy" failed (return value is 1) 2026-07-21 04:01:49.208252 UTC - Wait 2s before retry