From e2b4199c4c0e7a6c7a68c4015f01fe3108b93cd8 Mon Sep 17 00:00:00 2001 From: Sergiy Markin Date: Mon, 23 Dec 2024 23:57:51 +0000 Subject: [PATCH] Security updates This PS updates Openstack modules to Caracal 2024.1, updates base ubuntu image to quay.io/airshipit, Helm to v3.15.2 and Kubectl to 1.32.0 Change-Id: I0c4f16443ae88e4cfbc54e23222eaf84264580b5 --- .../calicoctl-utility/Dockerfile.ubuntu_jammy | 4 +- .../Dockerfile_calicoq_calicoctl.ubuntu_jammy | 2 +- images/ceph-utility/Dockerfile.ubuntu_jammy | 6 +- .../compute-utility/Dockerfile.ubuntu_jammy | 6 +- .../etcdctl-utility/Dockerfile.ubuntu_jammy | 10 +- .../Dockerfile.ubuntu_jammy | 10 +- .../openstack-utility/Dockerfile.ubuntu_jammy | 20 ++-- .../Dockerfile.ubuntu_jammy | 10 +- .../services/utility_container_client.py | 20 ++-- .../services/test_utility_container_client.py | 43 ++++---- kube_utility_container/tests/utility/base.py | 1 + .../calico/test_calico_utility_container.py | 8 +- .../ceph/test_ceph_utility_container.py | 1 + .../compute/test_compute_utility_container.py | 8 +- .../etcd/test_etcd_utility_container.py | 8 +- .../test_mysqlclient_utility_container.py | 1 + .../test_openstack_utility_container.py | 8 +- .../test_postgresql_utility_container.py | 1 + requirements-direct.txt | 33 +++++-- requirements-frozen.txt | 99 ++++++++++++++++--- test-requirements.txt | 20 ++-- .../airship-run-script-set/tasks/main.yaml | 2 +- .../roles/airship-run-script/tasks/main.yaml | 2 +- tools/helm_install.sh | 2 +- 24 files changed, 209 insertions(+), 116 deletions(-) diff --git a/images/calicoctl-utility/Dockerfile.ubuntu_jammy b/images/calicoctl-utility/Dockerfile.ubuntu_jammy index 488df5e8..f8c6152b 100644 --- a/images/calicoctl-utility/Dockerfile.ubuntu_jammy +++ b/images/calicoctl-utility/Dockerfile.ubuntu_jammy @@ -1,4 +1,4 @@ -ARG FROM=docker.io/ubuntu:jammy +ARG FROM=quay.io/airshipit/ubuntu:jammy ARG DOCKER_REGISTRY=quay.io ARG CALICOCTL_IMAGE_PREFIX=calico/ctl ARG CALICOCTL_VERSION=v3.28.1 @@ -33,7 +33,7 @@ RUN set -xe \ python3-pip \ && curl -s https://bootstrap.pypa.io/get-pip.py | python3 \ && pip3 install --no-cache-dir \ - oslo.rootwrap==7.0.1 \ + oslo.rootwrap==7.2.0 \ && rm -rf /var/lib/apt/lists/* RUN PYTHON_LOCATION=$(pip3 show oslo.rootwrap|grep Location|awk '{print $2}') \ diff --git a/images/calicoctl-utility/Dockerfile_calicoq_calicoctl.ubuntu_jammy b/images/calicoctl-utility/Dockerfile_calicoq_calicoctl.ubuntu_jammy index 35ba93d4..605c3b4c 100644 --- a/images/calicoctl-utility/Dockerfile_calicoq_calicoctl.ubuntu_jammy +++ b/images/calicoctl-utility/Dockerfile_calicoq_calicoctl.ubuntu_jammy @@ -1,4 +1,4 @@ -ARG FROM=docker.io/ubuntu:jammy +ARG FROM=quay.io/airshipit/ubuntu:jammy ARG DOCKER_REGISTRY=quay.io ARG CALICOCTL_IMAGE_PREFIX=tigera/calicoctl ARG CALICOCTL_VERSION=v3.28.1 diff --git a/images/ceph-utility/Dockerfile.ubuntu_jammy b/images/ceph-utility/Dockerfile.ubuntu_jammy index 1029f495..ad7b3a92 100644 --- a/images/ceph-utility/Dockerfile.ubuntu_jammy +++ b/images/ceph-utility/Dockerfile.ubuntu_jammy @@ -1,4 +1,4 @@ -ARG FROM=docker.io/ubuntu:jammy +ARG FROM=quay.io/airshipit/ubuntu:jammy FROM ${FROM} LABEL org.opencontainers.image.authors='airship-discuss@lists.airshipit.org, irc://#airshipit@freenode' \ @@ -11,7 +11,7 @@ LABEL org.opencontainers.image.authors='airship-discuss@lists.airshipit.org, irc # Reef 18.2.2 ARG CEPH_RELEASE=reef ARG CEPH_RELEASE_TAG=18.2.2-1~jammy -ARG KUBE_VERSION=1.31.0 +ARG KUBE_VERSION=1.32.0 ARG CEPH_REPO=https://mirror.mirantis.com/acicd/ceph/debian-18.2.2.patch1/jammy/ ARG CEPH_KEY=https://mirror.mirantis.com/acicd/ceph/debian-18.2.2.patch1/jammy/release.asc @@ -51,7 +51,7 @@ RUN set -xe \ orphan-sysvinit-scripts \ && curl -s https://bootstrap.pypa.io/get-pip.py | python3 \ && pip3 install --no-cache-dir \ - oslo.rootwrap==7.0.1 \ + oslo.rootwrap==7.2.0 \ && curl --silent -L https://dl.k8s.io/v${KUBE_VERSION}/kubernetes-client-linux-amd64.tar.gz \ | tar -zC /usr/bin --strip-components=3 --wildcards -x "*/*/*/kubectl" \ && rm -rf /var/lib/apt/lists/* diff --git a/images/compute-utility/Dockerfile.ubuntu_jammy b/images/compute-utility/Dockerfile.ubuntu_jammy index c704c5d4..4301e5ab 100644 --- a/images/compute-utility/Dockerfile.ubuntu_jammy +++ b/images/compute-utility/Dockerfile.ubuntu_jammy @@ -1,4 +1,4 @@ -ARG FROM=docker.io/ubuntu:jammy +ARG FROM=quay.io/airshipit/ubuntu:jammy FROM ${FROM} LABEL org.opencontainers.image.authors='airship-discuss@lists.airshipit.org, irc://#airshipit@freenode' \ @@ -8,7 +8,7 @@ LABEL org.opencontainers.image.authors='airship-discuss@lists.airshipit.org, irc org.opencontainers.image.vendor='The Airship Authors' \ org.opencontainers.image.licenses='Apache-2.0' -ARG KUBE_VERSION=1.31.0 +ARG KUBE_VERSION=1.32.0 ARG DEBIAN_FRONTEND=noninteractive @@ -38,7 +38,7 @@ RUN set -xe \ orphan-sysvinit-scripts \ && curl -s https://bootstrap.pypa.io/get-pip.py | python3 \ && pip3 install --no-cache-dir \ - oslo.rootwrap==7.0.1 \ + oslo.rootwrap==7.2.0 \ && curl --silent -L https://dl.k8s.io/v${KUBE_VERSION}/kubernetes-client-linux-amd64.tar.gz \ | tar -zC /usr/bin --strip-components=3 --wildcards -x "*/*/*/kubectl" \ && rm -rf /var/lib/apt/lists/* diff --git a/images/etcdctl-utility/Dockerfile.ubuntu_jammy b/images/etcdctl-utility/Dockerfile.ubuntu_jammy index 29eb2a6d..bd2c4567 100644 --- a/images/etcdctl-utility/Dockerfile.ubuntu_jammy +++ b/images/etcdctl-utility/Dockerfile.ubuntu_jammy @@ -1,4 +1,4 @@ -ARG FROM=docker.io/ubuntu:jammy +ARG FROM=quay.io/airshipit/ubuntu:jammy FROM ${FROM} LABEL org.opencontainers.image.authors='airship-discuss@lists.airshipit.org, irc://#airshipit@freenode' \ @@ -9,7 +9,7 @@ LABEL org.opencontainers.image.authors='airship-discuss@lists.airshipit.org, irc org.opencontainers.image.licenses='Apache-2.0' ARG ETCDCTL_VERSION=3.5.12 -ARG KUBE_VERSION=1.31.0 +ARG KUBE_VERSION=1.32.0 ENV GOOGLE_URL=https://storage.googleapis.com/etcd ENV GITHUB_URL=https://github.com/etcd-io/etcd/releases/download @@ -39,9 +39,9 @@ RUN set -xe \ && pip3 install --no-cache-dir \ munch \ simplejson \ - oslo.rootwrap==7.0.1 \ - python-openstackclient==6.2.0 \ - python-swiftclient==4.2.0 \ + oslo.rootwrap==7.2.0 \ + python-openstackclient==6.6.1 \ + python-swiftclient==4.5.0 \ && curl --silent -L "${DOWNLOAD_URL}/v${ETCDCTL_VERSION}/etcd-v${ETCDCTL_VERSION}-linux-amd64.tar.gz" \ | tar -zC /usr/local/bin --strip-components=1 --wildcards -x "*/etcdctl" \ && curl --silent -L https://dl.k8s.io/v${KUBE_VERSION}/kubernetes-client-linux-amd64.tar.gz \ diff --git a/images/mysqlclient-utility/Dockerfile.ubuntu_jammy b/images/mysqlclient-utility/Dockerfile.ubuntu_jammy index d49e09e2..4931da78 100644 --- a/images/mysqlclient-utility/Dockerfile.ubuntu_jammy +++ b/images/mysqlclient-utility/Dockerfile.ubuntu_jammy @@ -1,4 +1,4 @@ -ARG FROM=docker.io/ubuntu:jammy +ARG FROM=quay.io/airshipit/ubuntu:jammy FROM ${FROM} LABEL org.opencontainers.image.authors='airship-discuss@lists.airshipit.org, irc://#airshipit@freenode' \ @@ -8,7 +8,7 @@ LABEL org.opencontainers.image.authors='airship-discuss@lists.airshipit.org, irc org.opencontainers.image.vendor='The Airship Authors' \ org.opencontainers.image.licenses='Apache-2.0' -ARG KUBE_VERSION=1.31.0 +ARG KUBE_VERSION=1.32.0 ARG MARIADB_VERSION=10.6 ARG PERCONA_TOOLKIT_VERSION=3.5.7 @@ -45,9 +45,9 @@ RUN set -xe \ && pip3 install --no-cache-dir \ munch \ simplejson \ - oslo.rootwrap==7.0.1 \ - python-openstackclient==6.2.0 \ - python-swiftclient==4.2.0 \ + oslo.rootwrap==7.2.0 \ + python-openstackclient==6.6.1 \ + python-swiftclient==4.5.0 \ && sed -i 's/$PrivDropToUser syslog/$PrivDropToUser nobody/' /etc/rsyslog.conf \ && curl --silent -L https://dl.k8s.io/v${KUBE_VERSION}/kubernetes-client-linux-amd64.tar.gz \ | tar -zC /usr/bin --strip-components=3 --wildcards -x "*/*/*/kubectl" \ diff --git a/images/openstack-utility/Dockerfile.ubuntu_jammy b/images/openstack-utility/Dockerfile.ubuntu_jammy index 86447296..8d75b9bb 100644 --- a/images/openstack-utility/Dockerfile.ubuntu_jammy +++ b/images/openstack-utility/Dockerfile.ubuntu_jammy @@ -1,4 +1,4 @@ -ARG FROM=docker.io/ubuntu:jammy +ARG FROM=quay.io/airshipit/ubuntu:jammy FROM ${FROM} LABEL org.opencontainers.image.authors='airship-discuss@lists.airshipit.org, irc://#airshipit@freenode' \ @@ -27,15 +27,15 @@ RUN set -xe \ && pip3 install --no-cache-dir \ munch \ simplejson \ - oslo.rootwrap==7.0.1 \ - python-openstackclient==6.2.0 \ - python-glanceclient==4.3.0 \ - python-novaclient==18.3.0 \ - python-neutronclient==9.0.0 \ - python-cinderclient==9.3.0 \ - python-heatclient==3.2.0 \ - python-swiftclient==4.2.0 \ - osc-placement \ + oslo.rootwrap==7.2.0 \ + python-openstackclient==6.6.1 \ + python-swiftclient==4.5.0 \ + python-glanceclient==4.5.0 \ + python-novaclient==18.6.0 \ + python-neutronclient==11.2.0 \ + python-cinderclient==9.5.0 \ + python-heatclient==3.5.0 \ + osc-placement==4.3.0 \ && rm -rf /var/lib/apt/lists/* RUN PYTHON_LOCATION=$(pip3 show oslo.rootwrap|grep Location|awk '{print $2}') \ diff --git a/images/postgresql-utility/Dockerfile.ubuntu_jammy b/images/postgresql-utility/Dockerfile.ubuntu_jammy index 9940dab9..48b2e048 100644 --- a/images/postgresql-utility/Dockerfile.ubuntu_jammy +++ b/images/postgresql-utility/Dockerfile.ubuntu_jammy @@ -1,4 +1,4 @@ -ARG FROM=docker.io/ubuntu:jammy +ARG FROM=quay.io/airshipit/ubuntu:jammy FROM ${FROM} LABEL org.opencontainers.image.authors='airship-discuss@lists.airshipit.org, irc://#airshipit@freenode' \ @@ -8,7 +8,7 @@ LABEL org.opencontainers.image.authors='airship-discuss@lists.airshipit.org, irc org.opencontainers.image.vendor='The Airship Authors' \ org.opencontainers.image.licenses='Apache-2.0' -ARG KUBE_VERSION=1.31.0 +ARG KUBE_VERSION=1.32.0 ARG DEBIAN_FRONTEND=noninteractive @@ -40,9 +40,9 @@ RUN set -xe \ && pip3 install --no-cache-dir \ munch \ simplejson \ - oslo.rootwrap==7.0.1 \ - python-openstackclient==6.2.0 \ - python-swiftclient==4.2.0 \ + oslo.rootwrap==7.2.0 \ + python-openstackclient==6.6.1 \ + python-swiftclient==4.5.0 \ && curl --silent -L https://dl.k8s.io/v${KUBE_VERSION}/kubernetes-client-linux-amd64.tar.gz \ | tar -zC /usr/bin --strip-components=3 --wildcards -x "*/*/*/kubectl" \ && curl -o /tmp/rclone.deb https://downloads.rclone.org/rclone-current-linux-amd64.deb \ diff --git a/kube_utility_container/services/utility_container_client.py b/kube_utility_container/services/utility_container_client.py index 3516cf9d..85724801 100644 --- a/kube_utility_container/services/utility_container_client.py +++ b/kube_utility_container/services/utility_container_client.py @@ -109,19 +109,17 @@ class UtilityContainerClient(object): raise KubeEnvVarException(kube_server_key) if os.environ.get(region_key) is not None: - conf.set_cluster( - name=os.environ.get(region_key), - server=server, - insecure_skip_tls_verify=True) + conf.set_cluster(name=os.environ.get(region_key), + server=server, + insecure_skip_tls_verify=True) else: raise KubeEnvVarException(region_key) username_key = 'OS_USERNAME' if os.environ.get(username_key) is not None: - conf.set_context( - name='context_uc', - user=os.environ.get(username_key), - namespace='utility', - cluster=os.environ.get(region_key)) + conf.set_context(name='context_uc', + user=os.environ.get(username_key), + namespace='utility', + cluster=os.environ.get(region_key)) else: raise KubeEnvVarException(username_key) conf.use_context('context_uc') @@ -158,8 +156,8 @@ class UtilityContainerClient(object): # Get the selectors from the deployment object returned. selector_dict = deployment[0].spec.selector.match_labels # Convert the selector dictionary to a string object. - selectors = ', '.join( - "{!s}={!s}".format(k, v) for (k, v) in selector_dict.items()) + selectors = ', '.join("{!s}={!s}".format(k, v) + for (k, v) in selector_dict.items()) return selectors else: raise KubeDeploymentNotFoundException( diff --git a/kube_utility_container/tests/unit/services/test_utility_container_client.py b/kube_utility_container/tests/unit/services/test_utility_container_client.py index ce2ec880..4e3f170f 100644 --- a/kube_utility_container/tests/unit/services/test_utility_container_client.py +++ b/kube_utility_container/tests/unit/services/test_utility_container_client.py @@ -36,17 +36,14 @@ class TestUtilityContainerClient(unittest.TestCase): @patch('kube_utility_container.services.utility_container_client.' 'UtilityContainerClient._get_exec_cmd_output') def test_exec_cmd(self, mock_get_exec_cmd_output, mock_utility_container): - v1_container_obj = Mock( - spec=client.V1Container( - name='ceph_utility', image='sha', image_pull_policy='Always')) + v1_container_obj = Mock(spec=client.V1Container( + name='ceph_utility', image='sha', image_pull_policy='Always')) v1_spec_obj = Mock(spec=client.V1PodSpec(containers=v1_container_obj)) - v1_meta_obj = Mock( - spec=client.V1ObjectMeta( - name='clcp-ceph-utility-5454794df8-xqwj5', labels='app=ceph')) + v1_meta_obj = Mock(spec=client.V1ObjectMeta( + name='clcp-ceph-utility-5454794df8-xqwj5', labels='app=ceph')) - v1_pod_obj = Mock( - spec=client.V1Pod( - api_version='v1', metadata=v1_meta_obj, spec=v1_spec_obj)) + v1_pod_obj = Mock(spec=client.V1Pod( + api_version='v1', metadata=v1_meta_obj, spec=v1_spec_obj)) mock_utility_container.return_value = v1_pod_obj mock_get_exec_cmd_output.return_value = "Health OK" @@ -58,9 +55,10 @@ class TestUtilityContainerClient(unittest.TestCase): self.assertIsInstance(response, str) self.assertEqual(response, mock_get_exec_cmd_output.return_value) - @patch('kube_utility_container.services.utility_container_client.' - 'UtilityContainerClient._get_utility_container', - side_effect=KubePodNotFoundException('utility')) + @patch( + 'kube_utility_container.services.utility_container_client.' + 'UtilityContainerClient._get_utility_container', + side_effect=KubePodNotFoundException('utility')) def test_exec_cmd_no_utility_pods_returned(self, mock_list_pods): mock_list_pods.return_value = [] utility_container_client = UtilityContainerClient() @@ -68,9 +66,10 @@ class TestUtilityContainerClient(unittest.TestCase): utility_container_client.exec_cmd('clcp-utility', ['utilscli', 'ceph', 'status']) - @patch('kube_utility_container.services.utility_container_client.' - 'UtilityContainerClient._get_deployment_selectors', - side_effect=KubeDeploymentNotFoundException('utility')) + @patch( + 'kube_utility_container.services.utility_container_client.' + 'UtilityContainerClient._get_deployment_selectors', + side_effect=KubeDeploymentNotFoundException('utility')) @patch('kube_utility_container.services.utility_container_client.' 'UtilityContainerClient._corev1api_api_client') def test_exec_cmd_no_deployments_returned(self, deployment, api_client): @@ -81,12 +80,14 @@ class TestUtilityContainerClient(unittest.TestCase): utility_container_client.exec_cmd('clcp-ceph-utility', ['utilscli', 'ceph', 'status']) - @patch('kube_utility_container.services.utility_container_client.' - 'UtilityContainerClient._get_deployment_selectors', - side_effect=KubeEnvVarException('utility')) - @patch('kube_utility_container.services.utility_container_client.' - 'UtilityContainerClient._appsv1api_api_client', - side_effect=KubeEnvVarException('KUBECONFIG')) + @patch( + 'kube_utility_container.services.utility_container_client.' + 'UtilityContainerClient._get_deployment_selectors', + side_effect=KubeEnvVarException('utility')) + @patch( + 'kube_utility_container.services.utility_container_client.' + 'UtilityContainerClient._appsv1api_api_client', + side_effect=KubeEnvVarException('KUBECONFIG')) def test_env_var_kubeconfig_not_set_raises_exception( self, deployment, api_client): deployment.return_value = [] diff --git a/kube_utility_container/tests/utility/base.py b/kube_utility_container/tests/utility/base.py index 350a2e7a..8da82fa2 100644 --- a/kube_utility_container/tests/utility/base.py +++ b/kube_utility_container/tests/utility/base.py @@ -21,6 +21,7 @@ from kube_utility_container.services.dataloader import \ class TestBase(unittest.TestCase): + @classmethod def setUpClass(cls): cls.client = UtilityContainerClient() diff --git a/kube_utility_container/tests/utility/calico/test_calico_utility_container.py b/kube_utility_container/tests/utility/calico/test_calico_utility_container.py index 0cdac13c..e662f726 100644 --- a/kube_utility_container/tests/utility/calico/test_calico_utility_container.py +++ b/kube_utility_container/tests/utility/calico/test_calico_utility_container.py @@ -23,6 +23,7 @@ from kube_utility_container.tests.utility.base import TestBase class TestCalicoUtilityContainer(TestBase): + @classmethod def setUpClass(cls): cls.deployment_name = cls._get_deployment_name("calicoctl-utility") @@ -88,9 +89,10 @@ class TestCalicoUtilityContainer(TestBase): f"is not having expected apparmor profile set") self.assertEqual(0, len(failures), failures) - @patch('kube_utility_container.services.utility_container_client.' - 'UtilityContainerClient._get_utility_container', - side_effect=KubePodNotFoundException('utility')) + @patch( + 'kube_utility_container.services.utility_container_client.' + 'UtilityContainerClient._get_utility_container', + side_effect=KubePodNotFoundException('utility')) def test_exec_cmd_no_calicoctl_utility_pods_returned(self, mock_list_pods): mock_list_pods.return_value = [] utility_container_client = UtilityContainerClient() diff --git a/kube_utility_container/tests/utility/ceph/test_ceph_utility_container.py b/kube_utility_container/tests/utility/ceph/test_ceph_utility_container.py index b165a97a..31dea504 100644 --- a/kube_utility_container/tests/utility/ceph/test_ceph_utility_container.py +++ b/kube_utility_container/tests/utility/ceph/test_ceph_utility_container.py @@ -16,6 +16,7 @@ from kube_utility_container.tests.utility.base import TestBase class TestCephUtilityContainer(TestBase): + @classmethod def setUpClass(cls): cls.deployment_name = cls._get_deployment_name("ceph-utility") diff --git a/kube_utility_container/tests/utility/compute/test_compute_utility_container.py b/kube_utility_container/tests/utility/compute/test_compute_utility_container.py index 8bbba35e..ff920032 100644 --- a/kube_utility_container/tests/utility/compute/test_compute_utility_container.py +++ b/kube_utility_container/tests/utility/compute/test_compute_utility_container.py @@ -27,6 +27,7 @@ node = os.uname().nodename class TestComputeUtilityContainer(TestBase): + @classmethod def setUpClass(cls): cls.deployment_name = cls._get_deployment_name("compute-utility") @@ -105,9 +106,10 @@ class TestComputeUtilityContainer(TestBase): f"is not having expected apparmor profile set") self.assertEqual(0, len(failures), failures) - @patch('kube_utility_container.services.utility_container_client.' - 'UtilityContainerClient._get_utility_container', - side_effect=KubePodNotFoundException('utility')) + @patch( + 'kube_utility_container.services.utility_container_client.' + 'UtilityContainerClient._get_utility_container', + side_effect=KubePodNotFoundException('utility')) def test_exec_cmd_no_compute_utility_pods_returned(self, mock_list_pods): mock_list_pods.return_value = [] utility_container_client = UtilityContainerClient() diff --git a/kube_utility_container/tests/utility/etcd/test_etcd_utility_container.py b/kube_utility_container/tests/utility/etcd/test_etcd_utility_container.py index 555867e5..7b42770d 100644 --- a/kube_utility_container/tests/utility/etcd/test_etcd_utility_container.py +++ b/kube_utility_container/tests/utility/etcd/test_etcd_utility_container.py @@ -25,6 +25,7 @@ from kube_utility_container.tests.utility.base import TestBase class TestEtcdUtilityContainer(TestBase): + @classmethod def setUpClass(cls): cls.deployment_name = cls._get_deployment_name("etcdctl-utility") @@ -100,9 +101,10 @@ class TestEtcdUtilityContainer(TestBase): self.assertNotEqual(0, len(latest_pod_logs), "Not able to get the latest logs") - @patch('kube_utility_container.services.utility_container_client.' - 'UtilityContainerClient._get_utility_container', - side_effect=KubePodNotFoundException('utility')) + @patch( + 'kube_utility_container.services.utility_container_client.' + 'UtilityContainerClient._get_utility_container', + side_effect=KubePodNotFoundException('utility')) def test_exec_cmd_no_etcdctl_utility_pods_returned(self, mock_list_pods): mock_list_pods.return_value = [] utility_container_client = UtilityContainerClient() diff --git a/kube_utility_container/tests/utility/mysqlclient/test_mysqlclient_utility_container.py b/kube_utility_container/tests/utility/mysqlclient/test_mysqlclient_utility_container.py index 844d4ac7..dde35946 100644 --- a/kube_utility_container/tests/utility/mysqlclient/test_mysqlclient_utility_container.py +++ b/kube_utility_container/tests/utility/mysqlclient/test_mysqlclient_utility_container.py @@ -17,6 +17,7 @@ from kube_utility_container.tests.utility.base import TestBase class TestMysqlclientUtilityContainer(TestBase): + @classmethod def setUpClass(cls): cls.deployment_name = cls._get_deployment_name("mysqlclient-utility") diff --git a/kube_utility_container/tests/utility/openstack/test_openstack_utility_container.py b/kube_utility_container/tests/utility/openstack/test_openstack_utility_container.py index ee869d00..5dbc4e97 100644 --- a/kube_utility_container/tests/utility/openstack/test_openstack_utility_container.py +++ b/kube_utility_container/tests/utility/openstack/test_openstack_utility_container.py @@ -23,6 +23,7 @@ from kube_utility_container.tests.utility.base import TestBase class TestOpenstackUtilityContainer(TestBase): + @classmethod def setUpClass(cls): cls.deployment_name = cls._get_deployment_name("openstack-utility") @@ -88,9 +89,10 @@ class TestOpenstackUtilityContainer(TestBase): f"is not having expected apparmor profile set") self.assertEqual(0, len(failures), failures) - @patch('kube_utility_container.services.utility_container_client.' - 'UtilityContainerClient._get_utility_container', - side_effect=KubePodNotFoundException('utility')) + @patch( + 'kube_utility_container.services.utility_container_client.' + 'UtilityContainerClient._get_utility_container', + side_effect=KubePodNotFoundException('utility')) def test_exec_cmd_no_openstack_utility_pods_returned(self, mock_list_pods): mock_list_pods.return_value = [] utility_container_client = UtilityContainerClient() diff --git a/kube_utility_container/tests/utility/postgresql/test_postgresql_utility_container.py b/kube_utility_container/tests/utility/postgresql/test_postgresql_utility_container.py index ae637797..5ac43e8d 100644 --- a/kube_utility_container/tests/utility/postgresql/test_postgresql_utility_container.py +++ b/kube_utility_container/tests/utility/postgresql/test_postgresql_utility_container.py @@ -18,6 +18,7 @@ from kube_utility_container.tests.utility.base import TestBase class TestPostgresqlUtilityContainer(TestBase): + @classmethod def setUpClass(cls): cls.deployment_name = cls._get_deployment_name("postgresql-utility") diff --git a/requirements-direct.txt b/requirements-direct.txt index 5464ba73..892a56b1 100644 --- a/requirements-direct.txt +++ b/requirements-direct.txt @@ -16,12 +16,29 @@ urllib3 # chardet>=3.0.2,<3.1.0 # urllib3>=1.21.1,<=1.25 -# Openstack Antelope 2023.1 -# https://releases.openstack.org/antelope/index.html +# Openstack Caracal 2024.1 +# https://releases.openstack.org/caracal/index.html +barbican==18.0.0 -oslo.config==9.1.1 -oslo.context==5.1.1 -oslo.i18n==6.0.0 -oslo.log==5.2.0 -oslo.serialization==5.1.1 -oslo.utils==6.1.0 +python-barbicanclient==5.7.0 +python-keystoneclient==5.4.0 + +keystoneauth1==5.6.0 +keystonemiddleware==10.6.0 + +oslo.cache==3.7.0 +oslo.concurrency==6.0.0 +oslo.config==9.4.0 +oslo.context==5.5.0 +oslo.db==15.0.0 +oslo.i18n==6.3.0 +oslo.log==5.5.1 +oslo.messaging==14.7.2 +oslo.metrics==0.8.0 +oslo.middleware==6.1.0 +oslo.policy==4.3.0 +oslo.serialization==5.4.1 +oslo.service==3.4.1 +oslo.upgradecheck==2.3.0 +oslo.utils==7.1.0 +oslo.versionedobjects==3.3.0 diff --git a/requirements-frozen.txt b/requirements-frozen.txt index 36eb46c3..0dd7f8bd 100644 --- a/requirements-frozen.txt +++ b/requirements-frozen.txt @@ -1,41 +1,108 @@ +alembic==1.14.0 +amqp==5.3.1 +attrs==24.3.0 +autopage==0.5.2 +barbican==18.0.0 +bcrypt==4.2.1 cachetools==5.5.0 -certifi==2024.8.30 +castellan==5.2.0 +certifi==2024.12.14 +cffi==1.17.1 chardet==5.2.0 -charset-normalizer==3.3.2 +charset-normalizer==3.4.0 +cliff==4.8.0 +cmd2==2.5.8 +cryptography==44.0.0 debtcollector==3.0.0 -durationpy==0.7 -google-auth==2.35.0 +decorator==5.1.1 +dnspython==2.7.0 +dogpile.cache==1.3.3 +durationpy==0.9 +eventlet==0.38.2 +fasteners==0.19 +futurist==3.0.0 +google-auth==2.37.0 +greenlet==3.1.1 idna==3.10 iso8601==2.1.0 +Jinja2==3.1.5 +jsonschema==4.23.0 +jsonschema-specifications==2024.10.1 +keystoneauth1==5.6.0 +keystonemiddleware==10.6.0 +kombu==5.4.2 kubeconfig==1.1.1 kubernetes==31.0.0 +ldap3==2.9.1 +logutils==0.3.5 +Mako==1.3.8 +MarkupSafe==3.0.2 +microversion-parse==2.0.0 msgpack==1.1.0 netaddr==1.3.0 netifaces==0.11.0 oauthlib==3.2.2 -oslo.config==9.1.1 -oslo.context==5.1.1 -oslo.i18n==6.0.0 -oslo.log==5.2.0 -oslo.serialization==5.1.1 -oslo.utils==6.1.0 -packaging==24.1 +os-service-types==1.7.0 +oslo.cache==3.7.0 +oslo.concurrency==6.0.0 +oslo.config==9.4.0 +oslo.context==5.5.0 +oslo.db==15.0.0 +oslo.i18n==6.3.0 +oslo.log==5.5.1 +oslo.messaging==14.7.2 +oslo.metrics==0.8.0 +oslo.middleware==6.1.0 +oslo.policy==4.3.0 +oslo.serialization==5.4.1 +oslo.service==3.4.1 +oslo.upgradecheck==2.3.0 +oslo.utils==7.1.0 +oslo.versionedobjects==3.3.0 +packaging==24.2 +Paste==3.10.1 +PasteDeploy==3.1.0 pbr==6.1.0 +pecan==1.5.1 pip==24.1 +prettytable==3.12.0 +prometheus_client==0.21.1 pyasn1==0.6.1 pyasn1_modules==0.4.1 -pyparsing==3.1.4 +pycadf==4.0.0 +pycparser==2.22 +PyJWT==2.10.1 +pyOpenSSL==24.3.0 +pyparsing==3.2.0 +pyperclip==1.9.0 +python-barbicanclient==5.7.0 python-dateutil==2.9.0.post0 +python-keystoneclient==5.4.0 pytz==2024.2 PyYAML==6.0.2 +referencing==0.35.1 +repoze.lru==0.7 requests==2.32.3 requests-oauthlib==2.0.0 rfc3986==2.0.0 +Routes==2.5.1 +rpds-py==0.22.3 rsa==4.9 setuptools==70.1.0 -six==1.16.0 -stevedore==5.3.0 -urllib3==2.2.3 +six==1.17.0 +SQLAlchemy==2.0.36 +statsd==4.0.1 +stevedore==5.4.0 +testresources==2.0.1 +testscenarios==0.5.0 +testtools==2.7.2 +typing_extensions==4.12.2 +tzdata==2024.2 +urllib3==2.3.0 +vine==5.1.0 +wcwidth==0.2.13 +WebOb==1.8.9 websocket-client==1.8.0 wheel==0.43.0 -wrapt==1.16.0 +wrapt==1.17.0 +yappi==1.6.10 diff --git a/test-requirements.txt b/test-requirements.txt index 58e1b263..ef21197f 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -4,22 +4,20 @@ # When modifying this file `tox -e freeze-testreq` must be run to regenerate the test-requirements-frozen.txt. -astroid==2.11.7 +astroid bandit==1.6.0 -flake8==3.8.4 -hacking==4.1.0 +flake8 +hacking -pylint==2.14.5 +pylint python-subunit==1.4.0 # Apache-2.0/BSD oslotest==3.7.0 # Apache-2.0 -stestr==3.2.1 # Apache-2.0 -testtools==2.5.0 -mock==5.0.2 +stestr +mock nose==1.3.7 -yapf==0.24.0 -pytest >= 3.0 -pytest-cov==4.0.0 +yapf +pytest +pytest-cov chardet -# chardet==3.0.4 \ No newline at end of file diff --git a/tools/gate/playbooks/roles/airship-run-script-set/tasks/main.yaml b/tools/gate/playbooks/roles/airship-run-script-set/tasks/main.yaml index fbf5b076..3f711f6e 100644 --- a/tools/gate/playbooks/roles/airship-run-script-set/tasks/main.yaml +++ b/tools/gate/playbooks/roles/airship-run-script-set/tasks/main.yaml @@ -35,7 +35,7 @@ FEATURE_GATES: "{{ osh_params.feature_gates | default('') }}" RUN_HELM_TESTS: "{{ run_helm_tests | default('yes') }}" PL_SITE: "{{ site | default('airskiff') }}" - HELM_ARTIFACT_URL: "{{ HELM_ARTIFACT_URL | default('https://get.helm.sh/helm-v3.13.2-linux-amd64.tar.gz') }}" + HELM_ARTIFACT_URL: "{{ HELM_ARTIFACT_URL | default('https://get.helm.sh/helm-v3.15.2-linux-amd64.tar.gz') }}" HTK_COMMIT: "{{ HTK_COMMIT | default('cfff60ec10a6c386f38db79bb9f59a552c2b032f') }}" OSH_INFRA_COMMIT: "{{ OSH_INFRA_COMMIT | default('cfff60ec10a6c386f38db79bb9f59a552c2b032f') }}" OSH_COMMIT: "{{ OSH_COMMIT | default('2d9457e34ca4200ed631466bd87569b0214c92e7') }}" diff --git a/tools/gate/playbooks/roles/airship-run-script/tasks/main.yaml b/tools/gate/playbooks/roles/airship-run-script/tasks/main.yaml index d87663c3..9799d374 100644 --- a/tools/gate/playbooks/roles/airship-run-script/tasks/main.yaml +++ b/tools/gate/playbooks/roles/airship-run-script/tasks/main.yaml @@ -33,7 +33,7 @@ FEATURE_GATES: "{{ osh_params.feature_gates | default('') }}" RUN_HELM_TESTS: "{{ run_helm_tests | default('yes') }}" PL_SITE: "{{ site | default('airskiff') }}" - HELM_ARTIFACT_URL: "{{ HELM_ARTIFACT_URL | default('https://get.helm.sh/helm-v3.13.2-linux-amd64.tar.gz') }}" + HELM_ARTIFACT_URL: "{{ HELM_ARTIFACT_URL | default('https://get.helm.sh/helm-v3.15.2-linux-amd64.tar.gz') }}" HTK_COMMIT: "{{ HTK_COMMIT | default('cfff60ec10a6c386f38db79bb9f59a552c2b032f') }}" OSH_INFRA_COMMIT: "{{ OSH_INFRA_COMMIT | default('cfff60ec10a6c386f38db79bb9f59a552c2b032f') }}" OSH_COMMIT: "{{ OSH_COMMIT | default('2d9457e34ca4200ed631466bd87569b0214c92e7') }}" diff --git a/tools/helm_install.sh b/tools/helm_install.sh index 4060f051..adcb9087 100755 --- a/tools/helm_install.sh +++ b/tools/helm_install.sh @@ -17,7 +17,7 @@ set -x HELM=$1 -HELM_ARTIFACT_URL=${HELM_ARTIFACT_URL:-"https://get.helm.sh/helm-v3.13.2-linux-amd64.tar.gz"} +HELM_ARTIFACT_URL=${HELM_ARTIFACT_URL:-"https://get.helm.sh/helm-v3.15.2-linux-amd64.tar.gz"} function install_helm_binary {