421b4f21fd
- ci-feat-sysconfig-Add-DNS-from-interface-config-to-reso.patch [RHEL-44334] - ci-fix-jsonschema-Add-missing-sudo-definition-5418.patch [RHEL-44338] - ci-doc-update-examples-to-reflect-alternative-ways-to-p.patch [RHEL-44338] - ci-Update-pylint-version-to-support-python-3.12-5338.patch [RHEL-44599] - Resolves: RHEL-44334 ([RHEL-10] cloud-init fails to configure DNS search domains) - Resolves: RHEL-44338 ([RHEL-10] fix `SUDO` configuration schema for users and groups) - Resolves: RHEL-44599 ([rhel-10] fix pylint error and support python 3.12)
232 lines
8.6 KiB
Diff
232 lines
8.6 KiB
Diff
From 2865a3c52e72bcf70ef95c8f9787b650addeec51 Mon Sep 17 00:00:00 2001
|
|
From: Ani Sinha <anisinha@redhat.com>
|
|
Date: Wed, 29 May 2024 03:34:38 +0530
|
|
Subject: [PATCH 4/4] Update pylint version to support python 3.12 (#5338)
|
|
|
|
RH-Author: Ani Sinha <anisinha@redhat.com>
|
|
RH-MergeRequest: 93: Update pylint version to support python 3.12 (#5338)
|
|
RH-Jira: RHEL-44599
|
|
RH-Acked-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
|
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
RH-Commit: [1/1] 979ef05888d5d9c0fd81a84249eb86410846ef33 (anisinha/cloud-init)
|
|
|
|
Fedora 39 and above comes with python version 3.12. When running `tox -e pylint`
|
|
on cloud-init, we may experience issue such as the one reported here:
|
|
https://github.com/pylint-dev/pylint/issues/8782
|
|
|
|
Minimum version of pylint required in order to support python 3.12 is 3.0.2.
|
|
Please see https://github.com/pylint-dev/astroid/issues/2201 . Upon further
|
|
experimentation, it is seen that we need minimum pylint version 3.2.0 for
|
|
cloud-init. Update tox.ini in order to use this pylint version.
|
|
|
|
Signed-off-by: Ani Sinha <anisinha@redhat.com>
|
|
(cherry picked from commit 5ad609ffdf4bb76c5665e12e34e1867b72bd4435)
|
|
---
|
|
cloudinit/config/cc_mounts.py | 4 ++++
|
|
cloudinit/distros/bsd.py | 2 ++
|
|
cloudinit/distros/netbsd.py | 2 +-
|
|
cloudinit/sources/DataSourceAzure.py | 2 +-
|
|
cloudinit/sources/DataSourceEc2.py | 3 ++-
|
|
cloudinit/sources/DataSourceLXD.py | 2 +-
|
|
tests/integration_tests/conftest.py | 6 +++---
|
|
tests/integration_tests/util.py | 2 +-
|
|
tests/unittests/config/test_cc_ntp.py | 2 ++
|
|
tests/unittests/sources/test_gce.py | 1 +
|
|
tests/unittests/test_util.py | 2 ++
|
|
tox.ini | 2 +-
|
|
12 files changed, 21 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/cloudinit/config/cc_mounts.py b/cloudinit/config/cc_mounts.py
|
|
index 4cc32be5..3f690d06 100644
|
|
--- a/cloudinit/config/cc_mounts.py
|
|
+++ b/cloudinit/config/cc_mounts.py
|
|
@@ -304,6 +304,10 @@ def create_swapfile(fname: str, size: str) -> None:
|
|
"bs=1M",
|
|
"count=%s" % size,
|
|
]
|
|
+ else:
|
|
+ raise subp.ProcessExecutionError(
|
|
+ "Missing dependency: 'dd' and 'fallocate' are not available"
|
|
+ )
|
|
|
|
try:
|
|
subp.subp(cmd, capture=True)
|
|
diff --git a/cloudinit/distros/bsd.py b/cloudinit/distros/bsd.py
|
|
index 995a1ba2..b0e63964 100644
|
|
--- a/cloudinit/distros/bsd.py
|
|
+++ b/cloudinit/distros/bsd.py
|
|
@@ -120,6 +120,8 @@ class BSD(distros.Distro):
|
|
if not self.pkg_cmd_upgrade_prefix:
|
|
return
|
|
cmd = self.pkg_cmd_upgrade_prefix
|
|
+ else:
|
|
+ cmd = []
|
|
|
|
if args and isinstance(args, str):
|
|
cmd.append(args)
|
|
diff --git a/cloudinit/distros/netbsd.py b/cloudinit/distros/netbsd.py
|
|
index e8b9bcd5..972528c6 100644
|
|
--- a/cloudinit/distros/netbsd.py
|
|
+++ b/cloudinit/distros/netbsd.py
|
|
@@ -12,7 +12,7 @@ import cloudinit.distros.bsd
|
|
from cloudinit import subp, util
|
|
|
|
try:
|
|
- import crypt
|
|
+ import crypt # pylint: disable=W4901
|
|
|
|
salt = crypt.METHOD_BLOWFISH # pylint: disable=E1101
|
|
blowfish_hash: Any = functools.partial(
|
|
diff --git a/cloudinit/sources/DataSourceAzure.py b/cloudinit/sources/DataSourceAzure.py
|
|
index bd654cc0..11dc6686 100644
|
|
--- a/cloudinit/sources/DataSourceAzure.py
|
|
+++ b/cloudinit/sources/DataSourceAzure.py
|
|
@@ -49,7 +49,7 @@ from cloudinit.sources.helpers.azure import (
|
|
from cloudinit.url_helper import UrlError
|
|
|
|
try:
|
|
- import crypt
|
|
+ import crypt # pylint: disable=W4901
|
|
|
|
blowfish_hash: Any = functools.partial(
|
|
crypt.crypt, salt=f"$6${util.rand_str(strlen=16)}"
|
|
diff --git a/cloudinit/sources/DataSourceEc2.py b/cloudinit/sources/DataSourceEc2.py
|
|
index 1b81b21f..28822e37 100644
|
|
--- a/cloudinit/sources/DataSourceEc2.py
|
|
+++ b/cloudinit/sources/DataSourceEc2.py
|
|
@@ -333,6 +333,8 @@ class DataSourceEc2(sources.DataSource):
|
|
return None
|
|
|
|
def wait_for_metadata_service(self):
|
|
+ urls = []
|
|
+ start_time = 0
|
|
mcfg = self.ds_cfg
|
|
|
|
url_params = self.get_url_params()
|
|
@@ -366,7 +368,6 @@ class DataSourceEc2(sources.DataSource):
|
|
and self.cloud_name not in IDMSV2_SUPPORTED_CLOUD_PLATFORMS
|
|
):
|
|
# if we can't get a token, use instance-id path
|
|
- urls = []
|
|
url2base = {}
|
|
url_path = "{ver}/meta-data/instance-id".format(
|
|
ver=self.min_metadata_version
|
|
diff --git a/cloudinit/sources/DataSourceLXD.py b/cloudinit/sources/DataSourceLXD.py
|
|
index cd316101..4c95b907 100644
|
|
--- a/cloudinit/sources/DataSourceLXD.py
|
|
+++ b/cloudinit/sources/DataSourceLXD.py
|
|
@@ -331,7 +331,7 @@ class MetaDataKeys(Flag):
|
|
CONFIG = auto()
|
|
DEVICES = auto()
|
|
META_DATA = auto()
|
|
- ALL = CONFIG | DEVICES | META_DATA
|
|
+ ALL = CONFIG | DEVICES | META_DATA # pylint: disable=E1131
|
|
|
|
|
|
class _MetaDataReader:
|
|
diff --git a/tests/integration_tests/conftest.py b/tests/integration_tests/conftest.py
|
|
index ccbf6a71..58133815 100644
|
|
--- a/tests/integration_tests/conftest.py
|
|
+++ b/tests/integration_tests/conftest.py
|
|
@@ -273,7 +273,7 @@ def _client(
|
|
|
|
|
|
@pytest.fixture
|
|
-def client(
|
|
+def client( # pylint: disable=W0135
|
|
request, fixture_utils, session_cloud, setup_image
|
|
) -> Iterator[IntegrationInstance]:
|
|
"""Provide a client that runs for every test."""
|
|
@@ -282,7 +282,7 @@ def client(
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
-def module_client(
|
|
+def module_client( # pylint: disable=W0135
|
|
request, fixture_utils, session_cloud, setup_image
|
|
) -> Iterator[IntegrationInstance]:
|
|
"""Provide a client that runs once per module."""
|
|
@@ -291,7 +291,7 @@ def module_client(
|
|
|
|
|
|
@pytest.fixture(scope="class")
|
|
-def class_client(
|
|
+def class_client( # pylint: disable=W0135
|
|
request, fixture_utils, session_cloud, setup_image
|
|
) -> Iterator[IntegrationInstance]:
|
|
"""Provide a client that runs once per class."""
|
|
diff --git a/tests/integration_tests/util.py b/tests/integration_tests/util.py
|
|
index 8ee3631d..cbe00c83 100644
|
|
--- a/tests/integration_tests/util.py
|
|
+++ b/tests/integration_tests/util.py
|
|
@@ -187,7 +187,7 @@ def wait_for_cloud_init(client: "IntegrationInstance", num_retries: int = 30):
|
|
except Exception as e:
|
|
last_exception = e
|
|
time.sleep(1)
|
|
- raise Exception(
|
|
+ raise Exception( # pylint: disable=W0719
|
|
"cloud-init status did not return successfully."
|
|
) from last_exception
|
|
|
|
diff --git a/tests/unittests/config/test_cc_ntp.py b/tests/unittests/config/test_cc_ntp.py
|
|
index 74ccf2de..6f6c3360 100644
|
|
--- a/tests/unittests/config/test_cc_ntp.py
|
|
+++ b/tests/unittests/config/test_cc_ntp.py
|
|
@@ -249,6 +249,7 @@ class TestNtp(FilesystemMockingTestCase):
|
|
)
|
|
|
|
def _get_expected_pools(self, pools, distro, client):
|
|
+ expected_pools = None
|
|
if client in ["ntp", "chrony"]:
|
|
if client == "ntp" and distro == "alpine":
|
|
# NTP for Alpine Linux is Busybox's ntp which does not
|
|
@@ -264,6 +265,7 @@ class TestNtp(FilesystemMockingTestCase):
|
|
return expected_pools
|
|
|
|
def _get_expected_servers(self, servers, distro, client):
|
|
+ expected_servers = None
|
|
if client in ["ntp", "chrony"]:
|
|
if client == "ntp" and distro == "alpine":
|
|
# NTP for Alpine Linux is Busybox's ntp which only supports
|
|
diff --git a/tests/unittests/sources/test_gce.py b/tests/unittests/sources/test_gce.py
|
|
index 6fc31ddc..1617f694 100644
|
|
--- a/tests/unittests/sources/test_gce.py
|
|
+++ b/tests/unittests/sources/test_gce.py
|
|
@@ -101,6 +101,7 @@ class TestDataSourceGCE(test_helpers.ResponsesTestCase):
|
|
gce_meta = GCE_META
|
|
|
|
def _request_callback(request):
|
|
+ recursive = False
|
|
url_path = urlparse(request.url).path
|
|
if url_path.startswith("/computeMetadata/v1/"):
|
|
path = url_path.split("/computeMetadata/v1/")[1:][0]
|
|
diff --git a/tests/unittests/test_util.py b/tests/unittests/test_util.py
|
|
index 70edb40b..b534a1a7 100644
|
|
--- a/tests/unittests/test_util.py
|
|
+++ b/tests/unittests/test_util.py
|
|
@@ -1700,6 +1700,8 @@ class TestRedirectOutputPreexecFn:
|
|
args = (test_string, None)
|
|
elif request.param == "errfmt":
|
|
args = (None, test_string)
|
|
+ else:
|
|
+ args = (None, None)
|
|
with mock.patch(M_PATH + "subprocess.Popen") as m_popen:
|
|
util.redirect_output(*args)
|
|
|
|
diff --git a/tox.ini b/tox.ini
|
|
index 473e937c..85af1a14 100644
|
|
--- a/tox.ini
|
|
+++ b/tox.ini
|
|
@@ -25,7 +25,7 @@ hypothesis==6.31.6
|
|
hypothesis_jsonschema==0.20.1
|
|
isort==5.10.1
|
|
mypy==0.950
|
|
-pylint==2.13.9
|
|
+pylint==3.2.0
|
|
pytest==7.0.1
|
|
ruff==0.0.285
|
|
types-jsonschema==4.4.2
|
|
--
|
|
2.39.3
|
|
|