From 26b2b572d30a44f66b3361a2679c2eb73f3bed84 Mon Sep 17 00:00:00 2001 From: Roger Luethi Date: Wed, 22 Jul 2026 08:15:46 +0200 Subject: [PATCH] Cap openstacksdk <4.11 to fix collection break openstacksdk 4.17.0 (merged via #2292 on 2026-07-20) is incompatible with the galaxy-pinned openstack.cloud 2.5.0 ansible collection: its openstack_cloud_from_module helper references openstack.version, which the newer sdk no longer exposes. Every openstack.cloud module in the osism-ansible manager container then fails with "module 'openstack' has no attribute 'version'", which broke all testbed periodic-midnight jobs on 2026-07-22 (they passed the night before). The sdk is pinned in two files that separate Renovate managers keep in sync: requirements.txt (the pip_requirements manager; also the wheel's install_requires via setup.cfg) and Pipfile/Pipfile.lock (the pipenv manager). Revert both to the proven-good set for collection 2.5.0: openstacksdk 4.10.0 and python-openstackclient 9.0.0. openstackclient 10.x requires openstacksdk >=4.16, so it must move together with the sdk. Regenerating Pipfile.lock also re-added requestsexceptions (needed by the 4.10.0 tree) and refreshed two unrelated transitive deps (certifi, platformdirs). Add Renovate allowedVersions caps (openstacksdk <4.11, python-openstackclient <10) covering all managers so neither requirements.txt nor the Pipfile can silently drift past the collection compatibility boundary again. Raise the caps only together with an openstack.cloud bump in osism/release. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Roger Luethi --- .github/renovate.json | 14 +++++++++++++- Pipfile | 2 +- Pipfile.lock | 35 +++++++++++++++++++++-------------- requirements.txt | 4 ++-- 4 files changed, 37 insertions(+), 18 deletions(-) diff --git a/.github/renovate.json b/.github/renovate.json index 29c4ba47..75fbe16d 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -11,5 +11,17 @@ "/requirements.openstack-image-manager.txt/", "/requirements.txt/" ] - } + }, + "packageRules": [ + { + "description": "openstacksdk is compat-coupled to the galaxy-pinned openstack.cloud ansible collection (osism/release base.yml). Collection 2.5.0 breaks on sdk >=4.11 ('module openstack has no attribute version'), failing every openstack.cloud module in the manager container. Cap the sdk (both requirements.txt and Pipfile); raise this only together with an openstack.cloud bump in osism/release.", + "matchPackageNames": ["openstacksdk"], + "allowedVersions": "<4.11" + }, + { + "description": "python-openstackclient >=10 requires openstacksdk >=4.16, which conflicts with the openstacksdk cap above. Keep it on 9.x until the sdk cap is lifted.", + "matchPackageNames": ["python-openstackclient"], + "allowedVersions": "<10" + } + ] } diff --git a/Pipfile b/Pipfile index d07eaab7..f193c570 100644 --- a/Pipfile +++ b/Pipfile @@ -25,7 +25,7 @@ kombu = "==5.6.2" kubernetes = "==36.0.3" loguru = "==0.7.3" nbcli = "0.10.0.dev2" -openstacksdk = "==4.17.0" +openstacksdk = "==4.10.0" paramiko = "==5.0.0" pottery = "==3.0.1" prompt-toolkit = "==3.0.52" diff --git a/Pipfile.lock b/Pipfile.lock index a62ad956..516eac6a 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "1c52da77d6564b127720de7ccf885adf0daf4f69c72d86af5ff68697b2cde104" + "sha256": "91fd91acb05e67d4010900c60533f4a790079dcd2f6dc4b7d8fa1254d59208f9" }, "pipfile-spec": 6, "requires": {}, @@ -413,11 +413,11 @@ }, "certifi": { "hashes": [ - "sha256:024c88eeec92ca068db80f02b8b07c9cef7b9fe261d1d535abfd5abd6f6af432", - "sha256:2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db" + "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", + "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55" ], "markers": "python_version >= '3.7'", - "version": "==2026.6.17" + "version": "==2026.7.22" }, "cffi": { "hashes": [ @@ -1826,12 +1826,12 @@ }, "openstacksdk": { "hashes": [ - "sha256:3c968f8b97b38b7d73ddb88d16c6a7d80bcc554c5fbfcc12638a7b51bdae144e", - "sha256:827e1ade488db6116f59af1da6c97dbdfeeb879d3fc96bca99b19351f15df8ba" + "sha256:5dde9ae3f1e2411a87ff57b2d78da53fac8eae9e5bac8e5870927cb62ddfc033", + "sha256:c75927fb29a9c82d8dd116f16c72093a623d507f9a4aca63f3c26ad8ddf99855" ], "index": "pypi", - "markers": "python_version >= '3.11'", - "version": "==4.17.0" + "markers": "python_version >= '3.10'", + "version": "==4.10.0" }, "orderly-set": { "hashes": [ @@ -1883,11 +1883,11 @@ }, "platformdirs": { "hashes": [ - "sha256:0e4eff26be2d75293977f7cddc153fd9b8eaa7fb0c7b64ffe4076cb443117443", - "sha256:ceab4084426fe6319ce18e86deada8ab1b7487c7aee7040c55e277c9ae793695" + "sha256:0555d18370482847566ffabcaa53ad7c6c1c29f195989ae1ed634a05f76ea1e0", + "sha256:360ccded2b7fce0af0ff80cc8f5942a1c5d99b0e856033acb030bfc634709e74" ], "markers": "python_version >= '3.10'", - "version": "==4.10.1" + "version": "==4.11.0" }, "pluggy": { "hashes": [ @@ -2480,6 +2480,13 @@ "markers": "python_version >= '3.9'", "version": "==0.4.1" }, + "requestsexceptions": { + "hashes": [ + "sha256:3083d872b6e07dc5c323563ef37671d992214ad9a32b0ca4a3d7f5500bf38ce3", + "sha256:b095cbc77618f066d459a02b137b020c37da9f46d9b057704019c9f77dba3065" + ], + "version": "==1.4.0" + }, "rich": { "hashes": [ "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", @@ -2886,11 +2893,11 @@ }, "certifi": { "hashes": [ - "sha256:024c88eeec92ca068db80f02b8b07c9cef7b9fe261d1d535abfd5abd6f6af432", - "sha256:2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db" + "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", + "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55" ], "markers": "python_version >= '3.7'", - "version": "==2026.6.17" + "version": "==2026.7.22" }, "coverage": { "extras": [ diff --git a/requirements.txt b/requirements.txt index 93b42a8c..1496b0de 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,14 +19,14 @@ kombu==5.6.2 kubernetes==36.0.3 loguru==0.7.3 nbcli==0.10.0.dev2 -openstacksdk==4.17.0 +openstacksdk==4.10.0 paramiko==5.0.0 pottery==3.0.1 prompt-toolkit==3.0.52 pynetbox==7.8.0 pytest-testinfra==10.2.2 python-dateutil==2.9.0.post0 -python-openstackclient==10.2.1 +python-openstackclient==9.0.0 redfish==3.3.6 setuptools==83.0.0 sqlmodel==0.0.39