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.
Signed-off-by: Zack Cerza <zack@cerza.org>
(cherry picked from commit
104ebb3e290c8a1de2d9b637ad327e8e640f54be)
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'
```
Related: https://peps.python.org/pep-0632/
Signed-off-by: Kefu Chai <tchaikov@gmail.com>