From 2c578619cbeab0c9d6d8086c0a2ccd27a283f630 Mon Sep 17 00:00:00 2001 From: Aleksandr Alferov Date: Fri, 7 Apr 2023 19:16:41 +0300 Subject: [PATCH] Fixed the order of creating jobs --- python/api/action/views.py | 1 + python/api/adcm/views.py | 1 + python/api/cluster/views.py | 11 +++++++++++ python/api/component/views.py | 6 +++++- python/api/concern/views.py | 2 ++ python/api/config/views.py | 4 ++++ python/api/config_log/views.py | 1 + python/api/group_config/views.py | 3 +++ python/api/host/views.py | 10 +++++++--- python/api/job/views.py | 1 + python/api/object_config/views.py | 1 + python/api/provider/views.py | 5 +++++ python/api/service/views.py | 7 +++++++ python/api/stack/views.py | 5 +++++ python/api/stats/views.py | 2 ++ python/cm/api.py | 15 ++++++++------- python/cm/bundle.py | 10 +++++----- python/cm/hierarchy.py | 12 +++++++----- python/cm/inventory.py | 2 +- python/cm/job.py | 2 +- python/cm/management/commands/dumpcluster.py | 2 +- python/cm/management/commands/logrotate.py | 2 +- python/cm/models.py | 20 ++++++++++---------- python/cm/upgrade.py | 2 +- python/init_db.py | 2 +- python/rbac/ldap.py | 2 +- python/rbac/models.py | 10 +++++----- python/rbac/services/group.py | 2 +- python/rbac/services/role.py | 2 +- python/rbac/services/user.py | 2 +- python/rbac/upgrade/role.py | 2 +- 31 files changed, 102 insertions(+), 47 deletions(-) diff --git a/python/api/action/views.py b/python/api/action/views.py index dc5a9eb92d..dc1542c407 100644 --- a/python/api/action/views.py +++ b/python/api/action/views.py @@ -155,6 +155,7 @@ class RunTask(GenericUIView): queryset = TaskLog.objects.all() serializer_class = RunTaskRetrieveSerializer permission_classes = (IsAuthenticated,) + ordering = ["id"] def has_action_perm(self, action: Action, obj) -> bool: user = self.request.user diff --git a/python/api/adcm/views.py b/python/api/adcm/views.py index f4242b3c71..e28da98b48 100644 --- a/python/api/adcm/views.py +++ b/python/api/adcm/views.py @@ -25,6 +25,7 @@ class ADCMViewSet(ListModelMixin, RetrieveModelMixin, GenericUIViewSet): queryset = ADCM.objects.select_related("prototype").all() serializer_class = ADCMSerializer lookup_url_kwarg = "adcm_pk" + ordering = ["id"] def get_serializer_class(self): if self.is_for_ui(): diff --git a/python/api/cluster/views.py b/python/api/cluster/views.py index 98d90b5ad1..a7e17966b6 100644 --- a/python/api/cluster/views.py +++ b/python/api/cluster/views.py @@ -95,6 +95,7 @@ class ClusterList(PermissionListMixin, PaginatedView): filterset_fields = ("name", "prototype_id") ordering_fields = ("id", "name", "state", "prototype__display_name", "prototype__version_order") permission_required = [VIEW_CLUSTER_PERM] + ordering = ["id"] @audit def post(self, request, *args, **kwargs): # pylint: disable=unused-argument @@ -114,6 +115,7 @@ class ClusterDetail(PermissionListMixin, DetailView): lookup_field = "id" lookup_url_kwarg = "cluster_id" error_code = "CLUSTER_NOT_FOUND" + ordering = ["id"] @audit def patch(self, request, *args, **kwargs): # pylint: disable=unused-argument @@ -161,6 +163,7 @@ class ClusterImport(GenericUIView): serializer_class = ImportSerializer serializer_class_post = PostImportSerializer permission_classes = (IsAuthenticated,) + ordering = ["id"] @staticmethod def get(request, *args, **kwargs): # pylint: disable=unused-argument @@ -188,6 +191,7 @@ class ClusterBindList(GenericUIView): serializer_class = ClusterBindSerializer serializer_class_post = DoBindSerializer permission_classes = (IsAuthenticated,) + ordering = ["id"] def get(self, request, *args, **kwargs): # pylint: disable=unused-argument cluster = get_object_for_user(request.user, VIEW_CLUSTER_PERM, Cluster, id=kwargs["cluster_id"]) @@ -210,6 +214,7 @@ class ClusterBindDetail(GenericUIView): queryset = ClusterBind.objects.all() serializer_class = BindSerializer permission_classes = (IsAuthenticated,) + ordering = ["id"] @staticmethod def get_obj(kwargs, bind_id): # pylint: disable=unused-argument @@ -241,6 +246,7 @@ class ClusterUpgrade(GenericUIView): queryset = Upgrade.objects.all() serializer_class = ClusterUpgradeSerializer permission_classes = (IsAuthenticated,) + ordering = ["id"] def get_ordering(self): order = AdcmOrderingFilter() @@ -260,6 +266,7 @@ class ClusterUpgradeDetail(GenericUIView): queryset = Upgrade.objects.all() serializer_class = ClusterUpgradeSerializer permission_classes = (IsAuthenticated,) + ordering = ["id"] def get(self, request, *args, **kwargs): # pylint: disable=unused-argument cluster = get_object_for_user(request.user, VIEW_CLUSTER_PERM, Cluster, id=kwargs["cluster_id"]) @@ -274,6 +281,7 @@ class DoClusterUpgrade(GenericUIView): queryset = Upgrade.objects.all() serializer_class = DoClusterUpgradeSerializer permission_classes = (IsAuthenticated,) + ordering = ["id"] @audit def post(self, request, *args, **kwargs): # pylint: disable=unused-argument @@ -302,6 +310,7 @@ class StatusList(GenericUIView): permission_classes = (IsAuthenticated,) queryset = HostComponent.objects.all() serializer_class = ClusterStatusSerializer + ordering = ["id"] def get(self, request, *args, **kwargs): # pylint: disable=unused-argument cluster = get_object_for_user(request.user, VIEW_CLUSTER_PERM, Cluster, id=kwargs["cluster_id"]) @@ -320,6 +329,7 @@ class HostComponentList(GenericUIView): serializer_class_ui = HostComponentUISerializer serializer_class_post = HostComponentSaveSerializer permission_classes = (IsAuthenticated,) + ordering = ["id"] def get(self, request, *args, **kwargs): # pylint: disable=unused-argument cluster = get_object_for_user(request.user, VIEW_CLUSTER_PERM, Cluster, id=kwargs["cluster_id"]) @@ -358,6 +368,7 @@ class HostComponentDetail(GenericUIView): queryset = HostComponent.objects.all() serializer_class = HostComponentSerializer permission_classes = (IsAuthenticated,) + ordering = ["id"] def get_obj(self, cluster_id, hs_id): cluster = get_object_for_user(self.request.user, VIEW_CLUSTER_PERM, Cluster, id=cluster_id) diff --git a/python/api/component/views.py b/python/api/component/views.py index 0e76d43e99..f17eab398a 100644 --- a/python/api/component/views.py +++ b/python/api/component/views.py @@ -61,6 +61,7 @@ class ComponentListView(PermissionListMixin, PaginatedView): filterset_fields = ("cluster_id", "service_id") ordering_fields = ("state", "prototype__display_name", "prototype__version_order") permission_required = ["cm.view_servicecomponent"] + ordering = ["id"] def get_queryset(self, *args, **kwargs): queryset = super().get_queryset(*args, **kwargs) @@ -76,6 +77,7 @@ class ComponentDetailView(PermissionListMixin, DetailView): permission_required = ["cm.view_servicecomponent"] lookup_url_kwarg = "component_id" error_code = ServiceComponent.__error_code__ + ordering = ["id"] def get_queryset(self, *args, **kwargs): queryset = super().get_queryset(*args, **kwargs) @@ -89,6 +91,7 @@ class ComponentMaintenanceModeView(GenericUIView): serializer_class = ComponentChangeMaintenanceModeSerializer lookup_field = "id" lookup_url_kwarg = "component_id" + ordering = ["id"] @update_mm_objects @audit @@ -115,9 +118,10 @@ class StatusList(GenericUIView): queryset = HostComponent.objects.all() permission_classes = (permissions.IsAuthenticated,) serializer_class = ComponentStatusSerializer + ordering = ["id"] def get(self, request, *args, **kwargs): # pylint: disable=unused-argument - queryset = get_component_queryset(ServiceComponent.objects.all(), request.user, kwargs) + queryset = get_component_queryset(ServiceComponent.objects.order_by("id"), request.user, kwargs) component = get_object_for_user(request.user, "cm.view_servicecomponent", queryset, id=kwargs["component_id"]) if self._is_for_ui(): host_components = self.get_queryset().filter(component=component) diff --git a/python/api/concern/views.py b/python/api/concern/views.py index b1e7870731..4c24cf44b9 100644 --- a/python/api/concern/views.py +++ b/python/api/concern/views.py @@ -92,6 +92,7 @@ class ConcernItemList(PaginatedView): permission_classes = (IsAuthenticated,) filterset_class = ConcernFilter ordering_fields = ("name",) + ordering = ["id"] class ConcernItemDetail(DetailView): @@ -106,3 +107,4 @@ class ConcernItemDetail(DetailView): lookup_field = "id" lookup_url_kwarg = "concern_id" error_code = "CONCERNITEM_NOT_FOUND" + ordering = ["id"] diff --git a/python/api/config/views.py b/python/api/config/views.py index 2d685de33c..e46ac202bf 100644 --- a/python/api/config/views.py +++ b/python/api/config/views.py @@ -96,6 +96,7 @@ class ConfigView(GenericUIView): queryset = ConfigLog.objects.all() serializer_class = HistoryCurrentPreviousConfigSerializer permission_classes = (IsAuthenticated,) + ordering = ["id"] def get(self, request, *args, **kwargs): # pylint: disable=unused-argument object_type, object_id, _ = get_object_type_id_version(**kwargs) @@ -111,6 +112,7 @@ class ConfigHistoryView(PermissionListMixin, GenericUIView): serializer_class = ConfigHistorySerializer serializer_class_post = ObjectConfigUpdateSerializer permission_required = ["cm.view_configlog"] + ordering = ["id"] def get_queryset(self, *args, **kwargs): if self.request.user.has_perm("cm.view_settings_of_adcm"): @@ -146,6 +148,7 @@ class ConfigVersionView(PermissionListMixin, GenericUIView): permission_classes = (DjangoOnlyObjectPermissions,) serializer_class = ConfigObjectConfigSerializer permission_required = ["cm.view_configlog"] + ordering = ["id"] def get_queryset(self, *args, **kwargs): if self.request.user.has_perm("cm.view_settings_of_adcm"): @@ -189,6 +192,7 @@ class ConfigHistoryRestoreView(PermissionListMixin, GenericUIView): serializer_class = ObjectConfigRestoreSerializer permission_classes = (DjangoOnlyObjectPermissions,) permission_required = ["cm.view_configlog"] + ordering = ["id"] def get_queryset(self, *args, **kwargs): if self.request.user.has_perm("cm.view_settings_of_adcm"): diff --git a/python/api/config_log/views.py b/python/api/config_log/views.py index 6ffdea3106..3e8cdae234 100644 --- a/python/api/config_log/views.py +++ b/python/api/config_log/views.py @@ -37,6 +37,7 @@ class ConfigLogViewSet( # pylint: disable=too-many-ancestors permission_required = ["cm.view_configlog"] filterset_fields = ("id", "obj_ref") ordering_fields = ("id",) + ordering = ["id"] def get_serializer_class(self): if self.is_for_ui(): diff --git a/python/api/group_config/views.py b/python/api/group_config/views.py index d7075ddf2e..8bfbf37bcb 100644 --- a/python/api/group_config/views.py +++ b/python/api/group_config/views.py @@ -86,6 +86,7 @@ class GroupConfigHostViewSet( permission_classes = (DjangoObjectPermissionsAudit,) permission_required = ["view_host"] lookup_url_kwarg = "host_id" + ordering = ["id"] @audit def create(self, request, *args, **kwargs): @@ -165,6 +166,7 @@ class GroupConfigConfigViewSet( serializer_class = GroupConfigConfigSerializer permission_classes = (DjangoObjectPermissionsAudit,) permission_required = ["view_objectconfig"] + ordering = ["id"] def get_serializer_context(self): context = super().get_serializer_context() @@ -241,6 +243,7 @@ class GroupConfigViewSet(PermissionListMixin, NestedViewSetMixin, ModelViewSet): filterset_class = GroupConfigFilterSet permission_classes = (DjangoObjectPermissionsAudit,) permission_required = ["cm.view_groupconfig"] + ordering = ["id"] @audit def create(self, request, *args, **kwargs): diff --git a/python/api/host/views.py b/python/api/host/views.py index ca006a714b..f78bbe3d99 100644 --- a/python/api/host/views.py +++ b/python/api/host/views.py @@ -76,18 +76,18 @@ class HostFilter(drf_filters.FilterSet): cluster_is_null = drf_filters.BooleanFilter(field_name="cluster_id", lookup_expr="isnull") provider_is_null = drf_filters.BooleanFilter(field_name="provider_id", lookup_expr="isnull") group_config = drf_filters.ModelChoiceFilter( - queryset=GroupConfig.objects.all(), + queryset=GroupConfig.objects.order_by("id"), field_name="group_config", label="GroupConfig", ) hostcomponent__service_id = drf_filters.ModelChoiceFilter( - queryset=ClusterObject.objects.all(), + queryset=ClusterObject.objects.order_by("id"), field_name="hostcomponent__service_id", label="HostComponentService", distinct=True, ) hostcomponent__component_id = drf_filters.ModelChoiceFilter( - queryset=ServiceComponent.objects.all(), + queryset=ServiceComponent.objects.order_by("id"), field_name="hostcomponent__component_id", label="HostComponentComponent", distinct=True, @@ -154,6 +154,7 @@ class HostList(PermissionListMixin, PaginatedView): "prototype__display_name", "prototype__version_order", ) + ordering = ["id"] def get_queryset(self, *args, **kwargs): queryset = super().get_queryset(*args, **kwargs) @@ -229,6 +230,7 @@ class HostDetail(PermissionListMixin, DetailView): lookup_field = "id" lookup_url_kwarg = "host_id" error_code = "HOST_NOT_FOUND" + ordering = ["id"] def _update_host_object( # pylint: disable=unused-argument self, @@ -295,6 +297,7 @@ class HostMaintenanceModeView(GenericUIView): serializer_class = HostChangeMaintenanceModeSerializer lookup_field = "id" lookup_url_kwarg = "host_id" + ordering = ["id"] @update_mm_objects @audit @@ -322,6 +325,7 @@ class StatusList(GenericUIView): queryset = HostComponent.objects.all() permission_classes = (IsAuthenticated,) serializer_class = HostStatusSerializer + ordering = ["id"] def get(self, request, *args, **kwargs): # pylint: disable=unused-argument cluster = None diff --git a/python/api/job/views.py b/python/api/job/views.py index defbed8ec7..57321fbe49 100644 --- a/python/api/job/views.py +++ b/python/api/job/views.py @@ -241,6 +241,7 @@ class LogStorageViewSet(PermissionListMixin, ListModelMixin, RetrieveModelMixin, ordering_fields = ("id", "name") permission_required = ["cm.view_logstorage"] lookup_url_kwarg = "log_pk" + ordering = ["id"] def get_queryset(self, *args, **kwargs): queryset = super().get_queryset(*args, **kwargs) diff --git a/python/api/object_config/views.py b/python/api/object_config/views.py index 79faf1c430..bfecf7de3a 100644 --- a/python/api/object_config/views.py +++ b/python/api/object_config/views.py @@ -22,6 +22,7 @@ class ObjectConfigViewSet(PermissionListMixin, ReadOnlyModelViewSet): # pylint: serializer_class = ObjectConfigSerializer permission_classes = (DjangoObjectPermissions,) permission_required = ["cm.view_objectconfig"] + ordering = ["id"] def get_queryset(self, *args, **kwargs): if self.request.user.has_perm("cm.view_settings_of_adcm"): diff --git a/python/api/provider/views.py b/python/api/provider/views.py index 4076666796..28bd58991e 100644 --- a/python/api/provider/views.py +++ b/python/api/provider/views.py @@ -54,6 +54,7 @@ class ProviderList(PermissionListMixin, PaginatedView): filterset_fields = ("name", "prototype_id") ordering_fields = ("id", "name", "state", "prototype__display_name", "prototype__version_order") permission_required = ["cm.view_hostprovider"] + ordering = ["id"] @audit def post(self, request, *args, **kwargs): # pylint: disable=unused-argument @@ -76,6 +77,7 @@ class ProviderDetail(PermissionListMixin, DetailView): lookup_field = "id" lookup_url_kwarg = "provider_id" error_code = "PROVIDER_NOT_FOUND" + ordering = ["id"] @audit def delete(self, request, *args, **kwargs): # pylint: disable=unused-argument @@ -94,6 +96,7 @@ class ProviderUpgrade(GenericUIView): serializer_class = ProviderUpgradeSerializer permission_classes = (permissions.IsAuthenticated,) filter_backends = (AdcmFilterBackend, AdcmOrderingFilter) + ordering = ["id"] def get_ordering(self): order = AdcmOrderingFilter() @@ -118,6 +121,7 @@ class ProviderUpgradeDetail(GenericUIView): queryset = Upgrade.objects.all() serializer_class = ProviderUpgradeSerializer permission_classes = (permissions.IsAuthenticated,) + ordering = ["id"] def get(self, request, *args, **kwargs): # pylint: disable=unused-argument """ @@ -136,6 +140,7 @@ class DoProviderUpgrade(GenericUIView): queryset = Upgrade.objects.all() serializer_class = DoProviderUpgradeSerializer permission_classes = (permissions.IsAuthenticated,) + ordering = ["id"] @audit def post(self, request, *args, **kwargs): # pylint: disable=unused-argument diff --git a/python/api/service/views.py b/python/api/service/views.py index 815139a86e..0414994aa8 100644 --- a/python/api/service/views.py +++ b/python/api/service/views.py @@ -71,6 +71,7 @@ class ServiceListView(PermissionListMixin, PaginatedView): serializer_class_cluster = ClusterServiceSerializer filterset_fields = ("cluster_id",) ordering_fields = ("id", "state", "prototype__display_name", "prototype__version_order") + ordering = ["id"] def get(self, request, *args, **kwargs): queryset = self.get_queryset() @@ -106,6 +107,7 @@ class ServiceDetailView(PermissionListMixin, DetailView): lookup_url_kwarg = "service_id" permission_required = ["cm.view_clusterobject"] error_code = ClusterObject.__error_code__ + ordering = ["id"] def get_queryset(self, *args, **kwargs): queryset = super().get_queryset(*args, **kwargs) @@ -173,6 +175,7 @@ class ServiceMaintenanceModeView(GenericUIView): serializer_class = ServiceChangeMaintenanceModeSerializer lookup_field = "id" lookup_url_kwarg = "service_id" + ordering = ["id"] @update_mm_objects @audit @@ -194,6 +197,7 @@ class ServiceImportView(GenericUIView): serializer_class = ImportSerializer serializer_class_post = ImportPostSerializer permission_classes = (permissions.IsAuthenticated,) + ordering = ["id"] @staticmethod def get(request, *args, **kwargs): # pylint: disable=unused-argument @@ -223,6 +227,7 @@ class ServiceBindView(GenericUIView): serializer_class = ServiceBindSerializer serializer_class_post = ServiceBindPostSerializer permission_classes = (permissions.IsAuthenticated,) + ordering = ["id"] def get(self, request, *args, **kwargs): # pylint: disable=unused-argument service = get_object_for_user(request.user, "cm.view_clusterobject", ClusterObject, id=kwargs["service_id"]) @@ -246,6 +251,7 @@ class ServiceBindDetailView(GenericUIView): queryset = ClusterBind.objects.all() serializer_class = BindSerializer permission_classes = (permissions.IsAuthenticated,) + ordering = ["id"] def get_obj(self, kwargs, bind_id): service = get_object_for_user( @@ -278,6 +284,7 @@ class StatusList(GenericUIView): permission_classes = (permissions.IsAuthenticated,) queryset = HostComponent.objects.all() serializer_class = ServiceStatusSerializer + ordering = ["id"] def get(self, request, *args, **kwargs): # pylint: disable=unused-argument service = get_object_for_user(request.user, "cm.view_clusterobject", ClusterObject, id=kwargs["service_id"]) diff --git a/python/api/stack/views.py b/python/api/stack/views.py index 75a0bc6d6e..3e48e58e5d 100644 --- a/python/api/stack/views.py +++ b/python/api/stack/views.py @@ -116,6 +116,7 @@ class UploadBundleView(CreateModelMixin, GenericUIViewSet): permission_classes = (DjangoObjectPermissionsAudit,) authentication_classes = (CsrfOffSessionAuthentication, TokenAuthentication) parser_classes = (MultiPartParser,) + ordering = ["id"] @audit def create(self, request: Request, *args, **kwargs) -> Response: @@ -135,6 +136,7 @@ class LoadBundleView(CreateModelMixin, GenericUIViewSet): queryset = Bundle.objects.all() serializer_class = LoadBundleSerializer permission_classes = (DjangoObjectPermissionsAudit,) + ordering = ["id"] @audit def create(self, request: Request, *args, **kwargs) -> Response: @@ -153,6 +155,7 @@ class BundleViewSet(ModelViewSet): # pylint: disable=too-many-ancestors filterset_fields = ("name", "version") ordering_fields = ("id", "name", "version_order") lookup_url_kwarg = "bundle_pk" + ordering = ["id"] def get_permissions(self): if self.action == "list": @@ -213,6 +216,7 @@ class PrototypeViewSet(ListModelMixin, PrototypeRetrieveViewSet): filterset_fields = ("name", "bundle_id", "license") ordering_fields = ("display_name", "version_order") lookup_url_kwarg = "prototype_pk" + ordering = ["id"] def get_permissions(self): if self.action == "list": @@ -254,6 +258,7 @@ class ProtoActionViewSet(RetrieveModelMixin, GenericUIViewSet): queryset = Action.objects.all() serializer_class = StackActionSerializer lookup_url_kwarg = "action_pk" + ordering = ["id"] def retrieve(self, request: Request, *args, **kwargs) -> Response: obj = check_obj(Action, kwargs["action_pk"], "ACTION_NOT_FOUND") diff --git a/python/api/stats/views.py b/python/api/stats/views.py index f26b475362..a98317b1c2 100644 --- a/python/api/stats/views.py +++ b/python/api/stats/views.py @@ -23,6 +23,7 @@ class JobStats(PermissionListMixin, GenericUIView): serializer_class = StatsSerializer permission_classes = (permissions.IsAuthenticated,) permission_required = ["cm.view_joblog"] + ordering = ["id"] def get(self, request, pk): # pylint: disable=unused-argument jobs = self.get_queryset().filter(id__gt=pk) @@ -44,6 +45,7 @@ class TaskStats(PermissionListMixin, GenericUIView): serializer_class = StatsSerializer permission_classes = (permissions.IsAuthenticated,) permission_required = ["cm.view_tasklog"] + ordering = ["id"] def get(self, request, pk): # pylint: disable=unused-argument tasks = self.get_queryset().filter(id__gt=pk) diff --git a/python/cm/api.py b/python/cm/api.py index 6218e7bec1..248589272a 100644 --- a/python/cm/api.py +++ b/python/cm/api.py @@ -96,7 +96,7 @@ def load_service_map(): # noqa: C901 for service_component in ServiceComponent.objects.filter(prototype__monitoring="passive"): passive[service_component.pk] = True - for hostcomponent in HostComponent.objects.all(): + for hostcomponent in HostComponent.objects.order_by("id"): if hostcomponent.component.pk in passive: continue @@ -148,7 +148,7 @@ def load_mm_objects(): for service in ClusterObject.objects.filter(cluster__in=clusters).prefetch_related("servicecomponent_set"): if service.maintenance_mode == MaintenanceMode.ON: service_ids.add(service.pk) - for component in service.servicecomponent_set.all(): + for component in service.servicecomponent_set.order_by("id"): if component.maintenance_mode == MaintenanceMode.ON: component_ids.add(component.pk) @@ -360,9 +360,10 @@ def _clean_up_related_hc(service: ClusterObject) -> None: HostComponent.objects.filter(cluster=service.cluster) .exclude(service=service) .select_related("host", "component") + .order_by("id") ) new_hc_list = [] - for hostcomponent in queryset.all(): + for hostcomponent in queryset: new_hc_list.append((hostcomponent.service, hostcomponent.host, hostcomponent.component)) save_hc(service.cluster, new_hc_list) @@ -412,7 +413,7 @@ def delete_cluster(cluster, cancel_tasks=True): cancel_locking_tasks(cluster, obj_deletion=True) cluster_pk = cluster.pk - hosts = cluster.host_set.all() + hosts = cluster.host_set.order_by("id") host_pks = [str(host.pk) for host in hosts] hosts.update(maintenance_mode=MaintenanceMode.OFF) logger.debug( @@ -441,7 +442,7 @@ def remove_host_from_cluster(host: Host) -> Host: host.cluster = None host.save() - for group in cluster.group_config.all(): + for group in cluster.group_config.order_by("id"): group.hosts.remove(host) update_hierarchy_issues(obj=host) @@ -679,9 +680,9 @@ def still_existed_hc(cluster, host_comp_list): def save_hc(cluster, host_comp_list): # pylint: disable=too-many-locals - hc_queryset = HostComponent.objects.filter(cluster=cluster) + hc_queryset = HostComponent.objects.filter(cluster=cluster).order_by("id") service_map = {hc.service for hc in hc_queryset} - old_hosts = {i.host for i in hc_queryset.select_related("host").all()} + old_hosts = {i.host for i in hc_queryset.select_related("host")} new_hosts = {i[1] for i in host_comp_list} for removed_host in old_hosts.difference(new_hosts): removed_host.remove_from_concerns(CTX.lock) diff --git a/python/cm/bundle.py b/python/cm/bundle.py index 4f31bf9353..a4b887ef87 100644 --- a/python/cm/bundle.py +++ b/python/cm/bundle.py @@ -106,7 +106,7 @@ def update_bundle(bundle): def order_model_versions(model): items = [] - for obj in model.objects.all(): + for obj in model.objects.order_by("id"): items.append(obj) ver = "" count = 0 @@ -306,7 +306,7 @@ def update_obj(dest, source, fields): def re_check_actions(): - for act in StageAction.objects.all(): + for act in StageAction.objects.order_by("id"): if not act.hostcomponentmap: continue @@ -769,7 +769,7 @@ def copy_stage(bundle_hash, bundle_proto): def update_bundle_from_stage( # noqa: C901 bundle, ): # pylint: disable=too-many-locals,too-many-branches,too-many-statements - for stage_prototype in StagePrototype.objects.all(): + for stage_prototype in StagePrototype.objects.order_by("id"): try: prototype = Prototype.objects.get( bundle=bundle, @@ -951,7 +951,7 @@ def update_bundle_from_stage( # noqa: C901 prototype_import.save() Upgrade.objects.filter(bundle=bundle).delete() - for stage_upgrade in StageUpgrade.objects.all(): + for stage_upgrade in StageUpgrade.objects.order_by("id"): upg = copy_obj( stage_upgrade, Upgrade, @@ -1015,7 +1015,7 @@ def delete_bundle(bundle): bundle.delete() for role in Role.objects.filter(class_name="ParentRole"): - if not role.child.all(): + if not role.child.order_by("id"): role.delete() ProductCategory.re_collect() diff --git a/python/cm/hierarchy.py b/python/cm/hierarchy.py index ac482408e6..90562cd6e0 100644 --- a/python/cm/hierarchy.py +++ b/python/cm/hierarchy.py @@ -133,9 +133,11 @@ def _build_tree_down(self, node: Node) -> None: children_values = [n.value for n in node.children] if node.type == "cluster": - children_values = ClusterObject.objects.filter(cluster=node.value).all() + children_values = ClusterObject.objects.filter(cluster=node.value).order_by("id") elif node.type == "service": - children_values = ServiceComponent.objects.filter(cluster=node.value.cluster, service=node.value).all() + children_values = ServiceComponent.objects.filter(cluster=node.value.cluster, service=node.value).order_by( + "id" + ) elif node.type == "component": children_values = [ c.host @@ -145,7 +147,7 @@ def _build_tree_down(self, node: Node) -> None: component=node.value, ) .select_related("host") - .all() + .order_by("id") ] elif node.type == "host": children_values = [] @@ -178,10 +180,10 @@ def _build_tree_up(self, node: Node) -> None: for hc in HostComponent.objects.filter(host=node.value) .exclude(host__maintenance_mode=MaintenanceMode.ON) .select_related("component") - .all() + .order_by("id") ] elif node.type == "provider": - parent_values = Host.objects.filter(provider=node.value).all() + parent_values = Host.objects.filter(provider=node.value).order_by("id") for value in parent_values: parent = self._make_node(value) diff --git a/python/cm/inventory.py b/python/cm/inventory.py index 8afd45d9fa..432921fb5c 100644 --- a/python/cm/inventory.py +++ b/python/cm/inventory.py @@ -203,7 +203,7 @@ def get_group_config(obj: ADCMEntity, host: Host) -> dict | None: def get_host_vars(host: Host, obj: ADCMEntity) -> dict: variables = {} - if not host.group_config.all().exists(): + if not host.group_config.exists(): return variables if isinstance(obj, Cluster): diff --git a/python/cm/job.py b/python/cm/job.py index fbf95013f0..c4295d0a99 100644 --- a/python/cm/job.py +++ b/python/cm/job.py @@ -720,7 +720,7 @@ def create_task( if action.type == ActionType.JOB.value: sub_actions = [None] else: - sub_actions = SubAction.objects.filter(action=action).all() + sub_actions = SubAction.objects.filter(action=action).order_by("id") for sub_action in sub_actions: job = JobLog.obj.create( diff --git a/python/cm/management/commands/dumpcluster.py b/python/cm/management/commands/dumpcluster.py index 32ab5bd9d8..86c1f0c259 100644 --- a/python/cm/management/commands/dumpcluster.py +++ b/python/cm/management/commands/dumpcluster.py @@ -147,7 +147,7 @@ def get_groups(object_id, model_name): group = get_object(GroupConfig, group_config.id, fields) group["config"] = get_config(group["config"]) group["model_name"] = model_name - group["hosts"] = [host.id for host in group_config.hosts.all()] + group["hosts"] = [host.id for host in group_config.hosts.order_by("id")] groups.append(group) return groups diff --git a/python/cm/management/commands/logrotate.py b/python/cm/management/commands/logrotate.py index af89a53f58..6a30fea95e 100644 --- a/python/cm/management/commands/logrotate.py +++ b/python/cm/management/commands/logrotate.py @@ -163,7 +163,7 @@ def __run_configlog_rotation(self): for cl_pk in (config_log.obj_ref.current, config_log.obj_ref.previous): exclude_pks.add(cl_pk) - for group_config in GroupConfig.objects.all(): + for group_config in GroupConfig.objects.order_by("id"): if group_config.config: exclude_pks.add(group_config.config.previous) exclude_pks.add(group_config.config.current) diff --git a/python/cm/models.py b/python/cm/models.py index d04ece1c34..e21c87b31f 100644 --- a/python/cm/models.py +++ b/python/cm/models.py @@ -202,13 +202,13 @@ class ProductCategory(ADCMModel): @classmethod def re_collect(cls) -> None: """Re-sync category list with installed bundles""" - for bundle in Bundle.objects.filter(category=None).all(): + for bundle in Bundle.objects.filter(category=None).order_by("id"): prototype = Prototype.objects.filter(bundle=bundle, name=bundle.name, type=ObjectType.CLUSTER).first() if prototype: value = prototype.display_name or bundle.name bundle.category, _ = cls.objects.get_or_create(value=value) bundle.save() - for category in cls.objects.all(): + for category in cls.objects.order_by("id"): if category.bundle_set.count() == 0: category.delete() @@ -356,7 +356,7 @@ def clean_group_keys(_group_keys, _spec): obj = self.obj_ref.object if isinstance(obj, (Cluster, ClusterObject, ServiceComponent, HostProvider)): # Sync group configs with object config - for conf_group in obj.group_config.all(): + for conf_group in obj.group_config.order_by("id"): diff_config, diff_attr = conf_group.get_diff_config_attr() group_config = ConfigLog() current_group_config = ConfigLog.objects.get(id=conf_group.config.current) @@ -1074,7 +1074,7 @@ def host_candidate(self): """Returns candidate hosts valid to add to the group""" if isinstance(self.object, (Cluster, HostProvider)): - hosts = self.object.host_set.all() + hosts = self.object.host_set.order_by("id") elif isinstance(self.object, ClusterObject): hosts = Host.objects.filter(cluster=self.object.cluster, hostcomponent__service=self.object).distinct() elif isinstance(self.object, ServiceComponent): @@ -1942,12 +1942,12 @@ class ConcernItem(ADCMModel): def related_objects(self) -> Iterable[ADCMEntity]: """List of objects that has that item in concerns""" return chain( - self.adcm_entities.all(), - self.cluster_entities.all(), - self.clusterobject_entities.all(), - self.servicecomponent_entities.all(), - self.hostprovider_entities.all(), - self.host_entities.all(), + self.adcm_entities.order_by("id"), + self.cluster_entities.order_by("id"), + self.clusterobject_entities.order_by("id"), + self.servicecomponent_entities.order_by("id"), + self.hostprovider_entities.order_by("id"), + self.host_entities.order_by("id"), ) def delete(self, using=None, keep_parents=False): diff --git a/python/cm/upgrade.py b/python/cm/upgrade.py index e8f969935b..e9e3903b4c 100644 --- a/python/cm/upgrade.py +++ b/python/cm/upgrade.py @@ -226,7 +226,7 @@ def get_import(_cbind): def check_upgrade(obj: Cluster | HostProvider, upgrade: Upgrade) -> tuple[bool, str]: if obj.locked: - concerns = [i.name or "Action lock" for i in obj.concerns.all()] + concerns = [i.name or "Action lock" for i in obj.concerns.order_by("id")] return False, f"{obj} has blocking concerns to address: {concerns}" diff --git a/python/init_db.py b/python/init_db.py index 357d8f55dc..bf7120e3d1 100755 --- a/python/init_db.py +++ b/python/init_db.py @@ -81,7 +81,7 @@ def recheck_issues(): """ ConcernItem.objects.filter(type=ConcernType.ISSUE).delete() for model in chain([Cluster, HostProvider]): - for obj in model.objects.all(): + for obj in model.objects.order_by("id"): update_hierarchy_issues(obj) diff --git a/python/rbac/ldap.py b/python/rbac/ldap.py index 60f08c3ca2..41d2ca4c71 100644 --- a/python/rbac/ldap.py +++ b/python/rbac/ldap.py @@ -230,7 +230,7 @@ def _get_local_groups_by_username(username: str) -> list[Group]: groups = [] with suppress(User.DoesNotExist): user = User.objects.get(username__iexact=username, type=OriginType.LDAP) - groups = [g.group for g in user.groups.all() if g.group.type == OriginType.LOCAL] + groups = [g.group for g in user.groups.order_by("id") if g.group.type == OriginType.LOCAL] return groups def get_user_model(self) -> type[User]: diff --git a/python/rbac/models.py b/python/rbac/models.py index 57695d59cd..0320d0d4ed 100644 --- a/python/rbac/models.py +++ b/python/rbac/models.py @@ -242,7 +242,7 @@ class Policy(models.Model): def remove_permissions(self): with atomic(): - for policy_permission in self.model_perm.all(): + for policy_permission in self.model_perm.order_by("id"): if policy_permission.policy_set.count() <= 1: if policy_permission.user: policy_permission.user.user_permissions.remove(policy_permission.permission) @@ -252,11 +252,11 @@ def remove_permissions(self): policy_permission.policy_set.remove(self) - for uop in self.user_object_perm.all(): + for uop in self.user_object_perm.order_by("id"): if uop.policy_set.count() <= 1: uop.delete() - for gop in self.group_object_perm.all(): + for gop in self.group_object_perm.order_by("id"): if gop.policy_set.count() <= 1: gop.delete() @@ -271,7 +271,7 @@ def get_objects(self, param_obj=None): return [param_obj] obj_list = [] - for obj in self.object.all(): + for obj in self.object.order_by("id"): obj_list.append(obj.object) return obj_list @@ -286,7 +286,7 @@ def delete(self, using=None, keep_parents=False): @atomic def apply_without_deletion(self): - for user in self.user.all(): + for user in self.user.order_by("id"): self.role.apply(self, user, None) for group in self.group.all(): diff --git a/python/rbac/services/group.py b/python/rbac/services/group.py index e2cadf339e..bfdea3e004 100644 --- a/python/rbac/services/group.py +++ b/python/rbac/services/group.py @@ -25,7 +25,7 @@ def _update_users(group: models.Group, users: [Empty, list[dict]]) -> None: return if group.type == models.OriginType.LDAP: raise_adcm_ex("GROUP_CONFLICT", msg="You can't change users in LDAP group") - group_users = {u.id: u for u in group.user_set.all()} + group_users = {u.id: u for u in group.user_set.order_by("id")} new_users = [u["id"] for u in users] for user_id in new_users: diff --git a/python/rbac/services/role.py b/python/rbac/services/role.py index a6a5968834..2a8a4e9bcf 100644 --- a/python/rbac/services/role.py +++ b/python/rbac/services/role.py @@ -81,6 +81,6 @@ def role_update(role: Role, partial, **kwargs) -> Role: if child: update_m2m_field(role.child, child) - for policy in role.policy_set.all(): + for policy in role.policy_set.order_by("id"): policy.apply() return role diff --git a/python/rbac/services/user.py b/python/rbac/services/user.py index 8d797e95bf..2ac3eb61ae 100644 --- a/python/rbac/services/user.py +++ b/python/rbac/services/user.py @@ -43,7 +43,7 @@ def _update_groups(user: models.User, groups: [Empty, list[dict]]) -> None: if groups is Empty: return - user_groups = {g.id: g.group for g in user.groups.all()} + user_groups = {g.id: g.group for g in user.groups.order_by("id")} new_groups = [g["id"] for g in groups] for group_id in new_groups: diff --git a/python/rbac/upgrade/role.py b/python/rbac/upgrade/role.py index e0374b8d35..ff03f56f99 100644 --- a/python/rbac/upgrade/role.py +++ b/python/rbac/upgrade/role.py @@ -34,7 +34,7 @@ def upgrade(data: dict): for role in data["roles"]: role_obj = new_roles[role["name"]] task_roles = [] - for child in role_obj.child.all(): + for child in role_obj.child.order_by("id"): if child.class_name == "TaskRole": task_roles.append(child) role_obj.child.clear()