Zack Cerza [Fri, 16 Jan 2026 00:38:35 +0000 (17:38 -0700)]
supervisor: Avoid prematurely pushing some jobs
This is a follow-up to ff615aae541032c647e78d3959d368f595c93e31; it caused us to
submit the first-in-suite and last-in-suite jobs to paddles. Those present has
having 'unknown' status, which will be confusing to users.
Zack Cerza [Thu, 15 Jan 2026 19:20:16 +0000 (12:20 -0700)]
kill: Handle supervisor procs when killing runs
This is a follow-up to ff615aae541032c647e78d3959d368f595c93e31, which only
handled killing individual jobs. Since we're using the results server for all
run and job metadata, we can drop all mentions of the archive. This change
is necessary since we've restricted access to the archive from the teuthology
machine for normal users, to avoid resource contention.
Kefu Chai [Thu, 18 Dec 2025 09:27:35 +0000 (17:27 +0800)]
teuthology: implement strtobool and use it
The distutils module was deprecated in Python 3.10 and removed in
Python 3.12. This commit replaces the deprecated distutils.utils.strtobool
imports with strtobool in teuthology.util module.
Changes:
- Add strtobool.py to teuthology/util
- Replace distutils.util.strtobool with
teuthology.util.strtobool.strtobool
Kefu Chai [Thu, 18 Dec 2025 09:05:58 +0000 (17:05 +0800)]
teuthology/task/install: implement LooseVersion and use it
The distutils module was deprecated in Python 3.10 and removed in
Python 3.12. This commit replaces the deprecated distutils.version
imports with the a homebrew LooseVersion implementation.
Changes:
- implement LooseVersion which is able to parse versions like
'10.2.2-63-g8542898-1trusty'.
- Replace distutils.version.LooseVersion with
teuthology.util.version.LooseVersion packaging.version.LooseVersion
Fixes:
```
Traceback (most recent call last):
File "/home/jenkins-build/build/workspace/ceph-api/build/../qa/tasks/vstart_runner.py", line 81, in <module>
from teuthology.orchestra.remote import RemoteShell
File "/tmp/tmp.xwxq8FOScf/teuthology/teuthology/orchestra/remote.py", line 6, in <module>
import teuthology.lock.util
File "/tmp/tmp.xwxq8FOScf/teuthology/teuthology/lock/util.py", line 6, in <module>
import teuthology.provision.downburst
File "/tmp/tmp.xwxq8FOScf/teuthology/teuthology/provision/__init__.py", line 4, in <module>
import teuthology.exporter
File "/tmp/tmp.xwxq8FOScf/teuthology/teuthology/exporter.py", line 11, in <module>
import teuthology.dispatcher
File "/tmp/tmp.xwxq8FOScf/teuthology/teuthology/dispatcher/__init__.py", line 22, in <module>
from teuthology.dispatcher import supervisor
File "/tmp/tmp.xwxq8FOScf/teuthology/teuthology/dispatcher/supervisor.py", line 18, in <module>
from teuthology.task import internal
File "/tmp/tmp.xwxq8FOScf/teuthology/teuthology/task/internal/__init__.py", line 27, in <module>
from teuthology.task.internal.redhat import (setup_cdn_repo, setup_base_repo, # noqa
File "/tmp/tmp.xwxq8FOScf/teuthology/teuthology/task/internal/redhat.py", line 13, in <module>
from teuthology.task.install.redhat import set_deb_repo
File "/tmp/tmp.xwxq8FOScf/teuthology/teuthology/task/install/__init__.py", line 14, in <module>
from distutils.version import LooseVersion
ModuleNotFoundError: No module named 'distutils'
```
Zack Cerza [Wed, 19 Mar 2025 18:35:11 +0000 (12:35 -0600)]
lock.ops.unlock_one_safe: Invert run-match logic
When unlock_one_safe is called with run_name, the caller means to express
"unlock this node if it belongs to this run".
When it is called with run_name and job_id, it means "unlock this node if it
belongs to this job in this run".
We had inverted the logic, causing leaks on reimage failures.
Matan Breizman [Wed, 19 Nov 2025 13:49:36 +0000 (15:49 +0200)]
teuthology/task/pexec.py: add logs to command executed
The current output by pexec is:
```
INFO:teuthology.run_tasks:Running task pexec...
INFO:teuthology.task.pexec:Executing custom commands...
INFO:teuthology.task.pexec:Running commands on host ubuntu@smithi012.front.sepia.ceph.com
DEBUG:teuthology.orchestra.run.smithi012:> TESTDIR=/home/ubuntu/cephtest bash -s
```
The output should include the acutal command executed, similar to
exec.py:
```
INFO:teuthology.run_tasks:Running task exec...
INFO:teuthology.task.exec:Executing custom commands...
INFO:teuthology.task.exec:Running commands on role client.0 host ubuntu@smithi168.front.sepia.ceph.com
DEBUG:teuthology.orchestra.run.smithi168:> sudo TESTDIR=/home/ubuntu/cephtest bash -c 'sudo ceph osd pool create low_tier 4'
```