diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1023f4d5c8..fd2fa429ee 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -23,7 +23,7 @@ jobs: - name: Downgrade pip run: pip3 install pip==19.3.1 - name: Cache pip dependencies - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('base.txt', 'dev.txt', 'docs.txt', 'hermes.txt', 'openstack.txt', 'prod.txt', 'prod_ldap.txt', '', 'test.txt') }} @@ -102,7 +102,7 @@ jobs: run: pip3 install "${GITHUB_WORKSPACE}" - name: Cache pip dependencies - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('base.txt', 'code_style.txt', 'dev.txt', 'docs.txt', 'hermes.txt', 'openstack.txt', 'prod.txt', 'prod_ldap.txt', '', 'test.txt') }} @@ -151,7 +151,7 @@ jobs: run: pip3 install "${GITHUB_WORKSPACE}" - name: Cache pip dependencies - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('base.txt', 'code_style.txt', 'dev.txt', 'docs.txt', 'hermes.txt', 'openstack.txt', 'prod.txt', 'prod_ldap.txt', '', 'test.txt') }} @@ -244,7 +244,7 @@ jobs: run: pip3 install "${GITHUB_WORKSPACE}" - name: Cache pip dependencies - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('base.txt', 'code_style.txt', 'dev.txt', 'docs.txt', 'hermes.txt', 'openstack.txt', 'prod.txt', 'prod_ldap.txt', '', 'test.txt') }} diff --git a/src/ralph/admin/sitetrees.py b/src/ralph/admin/sitetrees.py index f5b0a0f15c..d84a552e06 100644 --- a/src/ralph/admin/sitetrees.py +++ b/src/ralph/admin/sitetrees.py @@ -109,7 +109,7 @@ def section(section_name, app, model): section(_("Databases"), "data_center", "Database"), section(_("Disk Shares"), "data_center", "DiskShare"), section(_("Server Rooms"), "data_center", "ServerRoom"), - section(_("VIPs"), "data_center", "VIP"), + # section(_("VIPs"), "data_center", "VIP"), section(_("Preboots"), "deployment", "Preboot"), section( _("Preboot configuration"), "deployment", "PrebootConfiguration" diff --git a/src/ralph/api/tests/test_rendering.py b/src/ralph/api/tests/test_rendering.py index 7ee89aa47d..39ec70c6b5 100644 --- a/src/ralph/api/tests/test_rendering.py +++ b/src/ralph/api/tests/test_rendering.py @@ -83,8 +83,8 @@ class APIBrowsableClient(APIClient): "rack-accessories": "/api/rack-accessories/", "racks": "/api/racks/", "regions": "/api/regions/", - "scm-info": "/api/scm-info/", - "security-scans": "/api/security-scans/", + # "scm-info": "/api/scm-info/", + # "security-scans": "/api/security-scans/", "server-rooms": "/api/server-rooms/", "services": "/api/services/", "services-environments": "/api/services-environments/", @@ -102,10 +102,10 @@ class APIBrowsableClient(APIClient): "transitions-job": "/api/transitions-job/", "transitions-model": "/api/transitions-model/", "users": "/api/users/", - "vips": "/api/vips/", + # "vips": "/api/vips/", "virtual-server-types": "/api/virtual-server-types/", "virtual-servers": "/api/virtual-servers/", - "vulnerabilities": "/api/vulnerabilities/", + # "vulnerabilities": "/api/vulnerabilities/", "warehouses": "/api/warehouses/", } diff --git a/src/ralph/assets/admin.py b/src/ralph/assets/admin.py index 2ded3adcc8..c02b0f0a5d 100644 --- a/src/ralph/assets/admin.py +++ b/src/ralph/assets/admin.py @@ -156,7 +156,9 @@ class ServiceBaseObjects(RalphDetailView): def get_service_base_objects_queryset(self): return BaseObject.polymorphic_objects.filter( service_env__service=self.object - ).select_related("service_env__environment", "content_type", "securityscan") + ).select_related( + "service_env__environment", "content_type", "securityscan" + ).exclude(content_type__model="vip") def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) diff --git a/src/ralph/assets/api/serializers.py b/src/ralph/assets/api/serializers.py index 1a7d03980b..d73fa6afdd 100644 --- a/src/ralph/assets/api/serializers.py +++ b/src/ralph/assets/api/serializers.py @@ -36,7 +36,6 @@ Memory, Processor ) -from ralph.configuration_management.api import SCMInfoSerializer from ralph.lib.custom_fields.api import WithCustomFieldsSerializerMixin from ralph.licences.api_simple import SimpleBaseObjectLicenceSerializer from ralph.networks.api_simple import IPAddressSimpleSerializer @@ -276,7 +275,6 @@ class BaseObjectPolymorphicSerializer( __str__ = StrField(show_type=True) service_env = ServiceEnvironmentSerializer() - scmstatuscheck = SCMInfoSerializer() class Meta: model = BaseObject diff --git a/src/ralph/assets/tests/test_api.py b/src/ralph/assets/tests/test_api.py index f7e1d1c6dd..ec540830b0 100644 --- a/src/ralph/assets/tests/test_api.py +++ b/src/ralph/assets/tests/test_api.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +from unittest import skip from urllib.parse import urlencode from ddt import data, ddt @@ -522,7 +523,7 @@ def test_patch_asset_model(self): ServiceEnvironment: ServiceEnvironmentFactory, SSLCertificate: SSLCertificatesFactory, Support: SupportFactory, - VIP: VIPFactory, + # VIP: VIPFactory, VirtualServer: VirtualServerFactory, Cluster: ClusterFactory, ConfigurationClass: ConfigurationClassFactory, @@ -640,6 +641,7 @@ def test_filter_by_ip(self): response = self.client.get(url, format="json") self.assertEqual(len(response.data["results"]), 1) + @skip("SCM Status is disabled") def test_filter_by_scm_status_check_result(self): status_checks = { SCMCheckResult.scm_error: 2, diff --git a/src/ralph/configuration_management/api.py b/src/ralph/configuration_management/api.py index 2370edc62a..d118508675 100644 --- a/src/ralph/configuration_management/api.py +++ b/src/ralph/configuration_management/api.py @@ -7,7 +7,7 @@ from rest_framework import status from rest_framework.response import Response -from ralph.api import RalphAPISerializer, RalphAPIViewSet, router +from ralph.api import RalphAPISerializer, RalphAPIViewSet from ralph.api.serializers import RalphAPISaveSerializer from ralph.assets.models import BaseObject from ralph.configuration_management.models import SCMStatusCheck @@ -95,7 +95,7 @@ def create(self, request, hostname): return Response(self.serializer_class(scan).data, status=res_status) -router.register("scm-info", SCMInfoViewSet) +# router.register("scm-info", SCMInfoViewSet) urlpatterns = [ url( r"^scm-info/(?P[\w\.-]+)", diff --git a/src/ralph/dashboards/migrations/0008_auto_20250303_0923.py b/src/ralph/dashboards/migrations/0008_auto_20250303_0923.py new file mode 100644 index 0000000000..faae109f14 --- /dev/null +++ b/src/ralph/dashboards/migrations/0008_auto_20250303_0923.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 2.2.28 on 2025-03-03 09:23 +from __future__ import unicode_literals + +from django.core.cache import caches +from django.db import migrations + + +def clear_sitetree_cache(apps, schema_editor): + try: + cache = caches["default"] + cache.delete("sitetrees") + except Exception: + pass + +class Migration(migrations.Migration): + + dependencies = [ + ('dashboards', '0007_auto_20240723_1148'), + ] + + operations = [ + migrations.RunPython( + code=clear_sitetree_cache, reverse_code=clear_sitetree_cache + ) + ] diff --git a/src/ralph/data_center/admin.py b/src/ralph/data_center/admin.py index e3736016e1..0c8ebc6d5c 100644 --- a/src/ralph/data_center/admin.py +++ b/src/ralph/data_center/admin.py @@ -11,7 +11,6 @@ from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ -from ralph.admin import filters from ralph.admin.decorators import register from ralph.admin.filters import ( BaseObjectHostnameFilter, @@ -21,8 +20,7 @@ MacAddressFilter, RelatedAutocompleteFieldListFilter, TagsListFilter, - TreeRelatedAutocompleteFilterWithDescendants, - VulnerabilitesByPatchDeadline + TreeRelatedAutocompleteFilterWithDescendants ) from ralph.admin.helpers import generate_html_link from ralph.admin.mixins import ( @@ -39,10 +37,7 @@ from ralph.assets.models.components import Ethernet from ralph.assets.views import ComponentsAdminView from ralph.attachments.admin import AttachmentsMixin -from ralph.configuration_management.views import ( - SCMCheckInfo, - SCMStatusCheckInChangeListMixin -) +from ralph.configuration_management.views import SCMCheckInfo from ralph.data_center.forms import DataCenterAssetForm from ralph.data_center.models.components import DiskShare, DiskShareMount from ralph.data_center.models.hosts import DCHost @@ -59,8 +54,7 @@ BaseObjectCluster, Cluster, ClusterType, - Database, - VIP + Database ) from ralph.data_center.views import RelationsView from ralph.data_importer import resources @@ -72,7 +66,7 @@ from ralph.networks.forms import SimpleNetworkWithManagementIPForm from ralph.networks.views import NetworkWithTerminatorsView from ralph.operations.views import OperationViewReadOnlyForExisiting -from ralph.security.views import ScanStatusInChangeListMixin, SecurityInfo +from ralph.security.views import SecurityInfo from ralph.supports.models import BaseObjectsSupport @@ -90,15 +84,6 @@ def generate_list_filter_with_common_fields(prefix=None, postfix=None): ), MacAddressFilter, IPFilter, - ( - "securityscan__vulnerabilities__patch_deadline", - VulnerabilitesByPatchDeadline, - ), - ( - "securityscan__vulnerabilities", - filters.RelatedAutocompleteFieldListFilter, - ), - "securityscan__is_patched", ] ) if type(postfix) == list: @@ -364,8 +349,6 @@ class DataCenterAssetRelationsView(RelationsView): @register(DataCenterAsset) class DataCenterAssetAdmin( - SCMStatusCheckInChangeListMixin, - ScanStatusInChangeListMixin, ActiveDeploymentMessageMixin, MulitiAddAdminMixin, TransitionAdminMixin, @@ -383,8 +366,6 @@ class DataCenterAssetAdmin( change_views = [ DataCenterAssetComponents, DataCenterAssetNetworkView, - DataCenterAssetSecurityInfo, - DataCenterAssetSCMInfo, DataCenterAssetRelationsView, DataCenterAssetLicence, DataCenterAssetSupport, @@ -406,8 +387,6 @@ class DataCenterAssetAdmin( "show_location", "service_env", "configuration_path", - "scan_status", - "scm_status_check", "property_of", "order_no", ] @@ -703,7 +682,7 @@ class DatabaseAdmin(RalphAdmin): pass -@register(VIP) +# @register(VIP) class VIPAdmin(RalphAdmin): search_fields = ["name", "ip__address"] list_display = ["name", "ip", "port", "protocol", "service_env"] @@ -748,9 +727,7 @@ class DCHostSCMInfo(SCMCheckInfo): @register(DCHost) -class DCHostAdmin( - SCMStatusCheckInChangeListMixin, ScanStatusInChangeListMixin, RalphAdmin -): +class DCHostAdmin(RalphAdmin): change_list_template = "admin/data_center/dchost/change_list.html" search_fields = [ "remarks", @@ -768,8 +745,6 @@ class DCHostAdmin( "configuration_path", "show_location", "remarks", - "scan_status", - "scm_status_check", ] # TODO: sn # TODO: hostname, DC diff --git a/src/ralph/data_center/api/routers.py b/src/ralph/data_center/api/routers.py index 54e98c1e06..b8870993bb 100644 --- a/src/ralph/data_center/api/routers.py +++ b/src/ralph/data_center/api/routers.py @@ -10,8 +10,7 @@ DataCenterViewSet, RackAccessoryViewSet, RackViewSet, - ServerRoomViewSet, - VIPViewSet + ServerRoomViewSet ) router.register(r"accessories", AccessoryViewSet) @@ -21,7 +20,7 @@ router.register(r"racks", RackViewSet) router.register(r"rack-accessories", RackAccessoryViewSet) router.register(r"server-rooms", ServerRoomViewSet) -router.register(r"vips", VIPViewSet) +# router.register(r"vips", VIPViewSet) router.register(r"clusters", ClusterViewSet) router.register(r"cluster-types", ClusterTypeViewSet) router.register(r"base-object-clusters", BaseObjectClusterViewSet) diff --git a/src/ralph/data_center/api/serializers.py b/src/ralph/data_center/api/serializers.py index 3f44db2afb..ec18c4b400 100644 --- a/src/ralph/data_center/api/serializers.py +++ b/src/ralph/data_center/api/serializers.py @@ -11,7 +11,6 @@ NetworkComponentSerializerMixin, OwnersFromServiceEnvSerializerMixin ) -from ralph.configuration_management.api import SCMInfoSerializer from ralph.data_center.models import ( Accessory, BaseObjectCluster, @@ -25,7 +24,6 @@ ServerRoom, VIP ) -from ralph.security.api import SecurityScanSerializer class ClusterTypeSerializer(RalphAPISerializer): @@ -128,8 +126,6 @@ class Meta: class DataCenterAssetSerializer(ComponentSerializerMixin, AssetSerializer): rack = SimpleRackSerializer() - scmstatuscheck = SCMInfoSerializer() - securityscan = SecurityScanSerializer() related_hosts = serializers.SerializerMethodField() def get_related_hosts(self, obj): diff --git a/src/ralph/data_center/tests/test_view.py b/src/ralph/data_center/tests/test_view.py index 901c1fe01b..47ccf50561 100644 --- a/src/ralph/data_center/tests/test_view.py +++ b/src/ralph/data_center/tests/test_view.py @@ -1,4 +1,5 @@ from datetime import datetime, timedelta +from unittest import skip from urllib.parse import urlencode from django.contrib.contenttypes.models import ContentType @@ -118,7 +119,7 @@ def test_changelist_cluster_location(self): ) self.assertContains(result, "DC1 / SR1 / Rack #1") - +@skip("Security Scans are disabled") class DCHostScanStatusInListingTest(ClientMixin, TestCase): def setUp(self): self.login_as_user() @@ -204,7 +205,7 @@ def test_listing_show_failed_icon_when_scan_error(self): ) self.assertContains(result, "Scan failed") - +@skip("Security Scans are disabled") class DCHostFilterByPatchDeadline(ClientMixin, TestCase): def setUp(self): self.login_as_user() diff --git a/src/ralph/lib/polymorphic/models.py b/src/ralph/lib/polymorphic/models.py index a85d7d1708..bf2af72b68 100644 --- a/src/ralph/lib/polymorphic/models.py +++ b/src/ralph/lib/polymorphic/models.py @@ -331,6 +331,8 @@ def __new__(cls, name, bases, attrs): if new_class._meta.proxy: continue try: + if new_class._meta.model_name == 'vip': + continue polymorphic_class._polymorphic_descendants.append(new_class) except AttributeError: # The exception is for class Polymorphic diff --git a/src/ralph/security/api.py b/src/ralph/security/api.py index 97df94014c..d1a17a8b28 100644 --- a/src/ralph/security/api.py +++ b/src/ralph/security/api.py @@ -5,7 +5,7 @@ from django.db import transaction from rest_framework import serializers -from ralph.api import RalphAPISerializer, RalphAPIViewSet, router +from ralph.api import RalphAPISerializer, RalphAPIViewSet from ralph.api.serializers import RalphAPISaveSerializer from ralph.networks.models.networks import IPAddress from ralph.security.models import any_exceeded, SecurityScan, Vulnerability @@ -115,6 +115,6 @@ def create(self, request, *args, **kwargs): return super().create(request, *args, **kwargs) -router.register(r"vulnerabilities", VulnerabilityViewSet) -router.register(r"security-scans", SecurityScanViewSet) +# router.register(r"vulnerabilities", VulnerabilityViewSet) +# router.register(r"security-scans", SecurityScanViewSet) urlpatterns = [] diff --git a/src/ralph/security/tests/test_api.py b/src/ralph/security/tests/test_api.py index 00dfcd0285..42eea75449 100644 --- a/src/ralph/security/tests/test_api.py +++ b/src/ralph/security/tests/test_api.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- from datetime import datetime, timedelta +from unittest import skip from django.urls import reverse from rest_framework import status @@ -12,7 +13,7 @@ VulnerabilityFactory ) - +@skip('Security Scans are disabled') class SecurityScanAPITests(RalphAPITestCase): def setUp(self): super().setUp() @@ -219,7 +220,7 @@ def test_posting_scan_replace_old_one_when_scan_already_exists(self): scan.id, ) - +@skip("Vulnerabilities are disabled") class VulnerabilityAPITests(RalphAPITestCase): def setUp(self): super().setUp() @@ -305,7 +306,7 @@ def test_patch_vulnerability(self): data["external_vulnerability_id"], ) - +@skip("Vulnerabilities are disabled") class TestExternalVulnerability(RalphAPITestCase): def setUp(self): super().setUp() diff --git a/src/ralph/urls/base.py b/src/ralph/urls/base.py index a00de677a8..c9fe4eaf60 100644 --- a/src/ralph/urls/base.py +++ b/src/ralph/urls/base.py @@ -33,7 +33,7 @@ "ralph.domains.api", "ralph.operations.api", "ralph.supports.api", - "ralph.security.api", + # "ralph.security.api", "ralph.sim_cards.api", "ralph.ssl_certificates.api", "ralph.networks.api", diff --git a/src/ralph/virtual/admin.py b/src/ralph/virtual/admin.py index ab20cc9e78..cfd5b35dfd 100644 --- a/src/ralph/virtual/admin.py +++ b/src/ralph/virtual/admin.py @@ -14,10 +14,7 @@ from ralph.assets.models import BaseObject from ralph.assets.models.components import Ethernet from ralph.assets.views import ComponentsAdminView, RalphDetailViewAdmin -from ralph.configuration_management.views import ( - SCMCheckInfo, - SCMStatusCheckInChangeListMixin -) +from ralph.configuration_management.views import SCMCheckInfo from ralph.data_center.admin import generate_list_filter_with_common_fields from ralph.data_center.models.physical import DataCenterAsset from ralph.data_center.models.virtual import BaseObjectCluster @@ -27,7 +24,7 @@ from ralph.licences.models import BaseObjectLicence from ralph.networks.forms import SimpleNetworkForm from ralph.networks.views import NetworkView -from ralph.security.views import ScanStatusInChangeListMixin, SecurityInfo +from ralph.security.views import SecurityInfo from ralph.virtual.forms import CloudProviderForm from ralph.virtual.models import ( CloudFlavor, @@ -113,8 +110,6 @@ class VirtualServerSCMInfo(SCMCheckInfo): @register(VirtualServer) class VirtualServerAdmin( - SCMStatusCheckInChangeListMixin, - ScanStatusInChangeListMixin, ActiveDeploymentMessageMixin, CustomFieldValueAdminMixin, TransitionAdminMixin, @@ -134,8 +129,6 @@ class VirtualServerAdmin( "service_env", "configuration_path", "parent_", - "scan_status", - "scm_status_check", ] raw_id_fields = ["parent", "service_env", "configuration_path"] fields = [ @@ -159,8 +152,6 @@ class VirtualServerAdmin( change_views = [ VirtualServerComponentsView, VirtualServerNetworkView, - VirtualServerSCMInfo, - VirtaulServerSecurityInfoView, VirtualServerLicencesView, ] if settings.ENABLE_DNSAAS_INTEGRATION: @@ -288,8 +279,6 @@ class CloudHostSCMInfo(SCMCheckInfo): @register(CloudHost) class CloudHostAdmin( - SCMStatusCheckInChangeListMixin, - ScanStatusInChangeListMixin, CustomFieldValueAdminMixin, RalphAdmin, ): @@ -303,8 +292,6 @@ class CloudHostAdmin( "created", "image_name", "get_tags", - "scan_status", - "scm_status_check", ] list_filter_prefix = [BaseObjectHostnameFilter] list_filter_postfix = ["cloudprovider", "cloudflavor", TagsListFilter, "hypervisor"] @@ -344,7 +331,7 @@ class CloudHostAdmin( ] raw_id_override_parent = {"parent": CloudProject} inlines = [CloudNetworkInline] - change_views = [CloudHostNetworkView, CloudHostSCMInfo, CloudHostSecurityInfoView] + change_views = [CloudHostNetworkView] fieldsets = ( ( None, diff --git a/src/ralph/virtual/api.py b/src/ralph/virtual/api.py index 8fbf18199d..7f6bec8139 100644 --- a/src/ralph/virtual/api.py +++ b/src/ralph/virtual/api.py @@ -19,12 +19,10 @@ BaseObjectViewSetMixin ) from ralph.assets.models import Ethernet -from ralph.configuration_management.api import SCMInfoSerializer from ralph.data_center.api.serializers import DataCenterAssetSimpleSerializer from ralph.data_center.models import DCHost from ralph.lib.api.exceptions import Conflict from ralph.lib.api.utils import renderer_classes_without_form -from ralph.security.api import SecurityScanSerializer from ralph.virtual.admin import VirtualServerAdmin from ralph.virtual.models import ( CloudFlavor, @@ -112,8 +110,6 @@ class CloudHostSerializer(NetworkComponentSerializerMixin, BaseObjectSerializer) parent = CloudProjectSimpleSerializer(source="cloudproject") cloudflavor = CloudFlavorSimpleSerializer() service_env = ServiceEnvironmentSimpleSerializer() - scmstatuscheck = SCMInfoSerializer() - securityscan = SecurityScanSerializer() class Meta(BaseObjectSerializer.Meta): model = CloudHost @@ -160,8 +156,6 @@ class VirtualServerSerializer(ComponentSerializerMixin, BaseObjectSerializer): # TODO: cast BaseObject to DataCenterAsset for hypervisor field hypervisor = DataCenterAssetSimpleSerializer(source="parent") # TODO: clusters - scmstatuscheck = SCMInfoSerializer() - securityscan = SecurityScanSerializer() class Meta(BaseObjectSerializer.Meta): model = VirtualServer @@ -248,6 +242,7 @@ class CloudHostViewSet(BaseObjectViewSetMixin, RalphAPIViewSet): "service_env__environment", "content_type", "configuration_path__module", + "securityscan", ] prefetch_related = base_object_descendant_prefetch_related + [ "tags", @@ -297,6 +292,7 @@ class VirtualServerViewSet(BaseObjectViewSetMixin, RalphAPIViewSet): "configuration_path", "content_type", "parent__cluster__type", + "securityscan", ] prefetch_related = base_object_descendant_prefetch_related + [ "tags",