mirror of https://github.com/jumpserver/jumpserver
perf: change domain to zone (#15255)
* perf: change domain to zone * perf: change domain to zone * perf: change some word * perf: update gateway enabled i18n * perf: change migrations --------- Co-authored-by: ibuler <ibuler@qq.com>pull/15260/head
parent
57fcebfdd3
commit
3159a4e794
|
@ -1,10 +1,10 @@
|
|||
from .asset import *
|
||||
from .category import *
|
||||
from .domain import *
|
||||
from .favorite_asset import *
|
||||
from .mixin import *
|
||||
from .my_asset import *
|
||||
from .node import *
|
||||
from .platform import *
|
||||
from .protocol import *
|
||||
from .tree import *
|
||||
from .my_asset import *
|
||||
from .zone import *
|
||||
|
|
|
@ -37,12 +37,12 @@ class AssetFilterSet(BaseFilterSet):
|
|||
platform = drf_filters.CharFilter(method='filter_platform')
|
||||
is_gateway = drf_filters.BooleanFilter(method='filter_is_gateway')
|
||||
exclude_platform = drf_filters.CharFilter(field_name="platform__name", lookup_expr='exact', exclude=True)
|
||||
domain = drf_filters.CharFilter(method='filter_domain')
|
||||
zone = drf_filters.CharFilter(method='filter_zone')
|
||||
type = drf_filters.CharFilter(field_name="platform__type", lookup_expr="exact")
|
||||
category = drf_filters.CharFilter(field_name="platform__category", lookup_expr="exact")
|
||||
protocols = drf_filters.CharFilter(method='filter_protocols')
|
||||
domain_enabled = drf_filters.BooleanFilter(
|
||||
field_name="platform__domain_enabled", lookup_expr="exact"
|
||||
gateway_enabled = drf_filters.BooleanFilter(
|
||||
field_name="platform__gateway_enabled", lookup_expr="exact"
|
||||
)
|
||||
ping_enabled = drf_filters.BooleanFilter(
|
||||
field_name="platform__automation__ping_enabled", lookup_expr="exact"
|
||||
|
@ -85,11 +85,11 @@ class AssetFilterSet(BaseFilterSet):
|
|||
return queryset
|
||||
|
||||
@staticmethod
|
||||
def filter_domain(queryset, name, value):
|
||||
def filter_zone(queryset, name, value):
|
||||
if is_uuid(value):
|
||||
return queryset.filter(domain_id=value)
|
||||
return queryset.filter(zone_id=value)
|
||||
else:
|
||||
return queryset.filter(domain__name__contains=value)
|
||||
return queryset.filter(zone__name__contains=value)
|
||||
|
||||
@staticmethod
|
||||
def filter_protocols(queryset, name, value):
|
||||
|
@ -171,10 +171,10 @@ class AssetViewSet(SuggestionMixin, BaseAssetViewSet):
|
|||
@action(methods=["GET"], detail=True, url_path="gateways")
|
||||
def gateways(self, *args, **kwargs):
|
||||
asset = self.get_object()
|
||||
if not asset.domain:
|
||||
if not asset.zone:
|
||||
gateways = Gateway.objects.none()
|
||||
else:
|
||||
gateways = asset.domain.gateways
|
||||
gateways = asset.zone.gateways
|
||||
return self.get_paginated_response_from_queryset(gateways)
|
||||
|
||||
@action(methods=['post'], detail=False, url_path='sync-platform-protocols')
|
||||
|
|
|
@ -9,24 +9,24 @@ from common.utils import get_logger
|
|||
from orgs.mixins.api import OrgBulkModelViewSet
|
||||
from .asset import HostViewSet
|
||||
from .. import serializers
|
||||
from ..models import Domain, Gateway
|
||||
from ..models import Zone, Gateway
|
||||
|
||||
logger = get_logger(__file__)
|
||||
__all__ = ['DomainViewSet', 'GatewayViewSet', "GatewayTestConnectionApi"]
|
||||
__all__ = ['ZoneViewSet', 'GatewayViewSet', "GatewayTestConnectionApi"]
|
||||
|
||||
|
||||
class DomainViewSet(OrgBulkModelViewSet):
|
||||
model = Domain
|
||||
class ZoneViewSet(OrgBulkModelViewSet):
|
||||
model = Zone
|
||||
filterset_fields = ("name",)
|
||||
search_fields = filterset_fields
|
||||
serializer_classes = {
|
||||
'default': serializers.DomainSerializer,
|
||||
'list': serializers.DomainListSerializer,
|
||||
'default': serializers.ZoneSerializer,
|
||||
'list': serializers.ZoneListSerializer,
|
||||
}
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.request.query_params.get('gateway'):
|
||||
return serializers.DomainWithGatewaySerializer
|
||||
return serializers.ZoneWithGatewaySerializer
|
||||
return super().get_serializer_class()
|
||||
|
||||
def partial_update(self, request, *args, **kwargs):
|
||||
|
@ -36,8 +36,8 @@ class DomainViewSet(OrgBulkModelViewSet):
|
|||
|
||||
class GatewayViewSet(HostViewSet):
|
||||
perm_model = Gateway
|
||||
filterset_fields = ("domain__name", "name", "domain")
|
||||
search_fields = ("domain__name",)
|
||||
filterset_fields = ("zone__name", "name", "zone")
|
||||
search_fields = ("zone__name",)
|
||||
|
||||
def get_serializer_classes(self):
|
||||
serializer_classes = super().get_serializer_classes()
|
||||
|
@ -45,7 +45,7 @@ class GatewayViewSet(HostViewSet):
|
|||
return serializer_classes
|
||||
|
||||
def get_queryset(self):
|
||||
queryset = Domain.get_gateway_queryset()
|
||||
queryset = Zone.get_gateway_queryset()
|
||||
return queryset
|
||||
|
||||
|
||||
|
@ -55,7 +55,7 @@ class GatewayTestConnectionApi(SingleObjectMixin, APIView):
|
|||
}
|
||||
|
||||
def get_queryset(self):
|
||||
queryset = Domain.get_gateway_queryset()
|
||||
queryset = Zone.get_gateway_queryset()
|
||||
return queryset
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
|
@ -37,7 +37,7 @@ class FillType(models.TextChoices):
|
|||
class BaseType(TextChoices):
|
||||
"""
|
||||
约束应该考虑代是对平台对限制,避免多余对选项,如: mysql 开启 ssh,
|
||||
或者开启了也没有作用, 比如 k8s 开启了 domain,目前还不支持
|
||||
或者开启了也没有作用, 比如 k8s 开启了 gateway 目前还不支持
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
|
|
|
@ -13,11 +13,11 @@ class CloudTypes(BaseType):
|
|||
return {
|
||||
'*': {
|
||||
'charset_enabled': False,
|
||||
'domain_enabled': False,
|
||||
'gateway_enabled': False,
|
||||
'su_enabled': False,
|
||||
},
|
||||
cls.K8S: {
|
||||
'domain_enabled': True,
|
||||
'gateway_enabled': True,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ class CustomTypes(BaseType):
|
|||
return {
|
||||
'*': {
|
||||
'charset_enabled': False,
|
||||
'domain_enabled': False,
|
||||
'gateway_enabled': False,
|
||||
'su_enabled': False,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ class DatabaseTypes(BaseType):
|
|||
return {
|
||||
'*': {
|
||||
'charset_enabled': False,
|
||||
'domain_enabled': True,
|
||||
'gateway_enabled': True,
|
||||
'su_enabled': False,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ class DeviceTypes(BaseType):
|
|||
return {
|
||||
'*': {
|
||||
'charset_enabled': False,
|
||||
'domain_enabled': True,
|
||||
'gateway_enabled': True,
|
||||
'ds_enabled': False,
|
||||
'su_enabled': True,
|
||||
'su_methods': ['enable', 'super', 'super_level']
|
||||
|
|
|
@ -16,7 +16,7 @@ class DirectoryTypes(BaseType):
|
|||
return {
|
||||
'*': {
|
||||
'charset_enabled': True,
|
||||
'domain_enabled': True,
|
||||
'gateway_enabled': True,
|
||||
'ds_enabled': False,
|
||||
'su_enabled': True,
|
||||
},
|
||||
|
|
|
@ -11,7 +11,7 @@ class GPTTypes(BaseType):
|
|||
return {
|
||||
'*': {
|
||||
'charset_enabled': False,
|
||||
'domain_enabled': False,
|
||||
'gateway_enabled': False,
|
||||
'su_enabled': False,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ class HostTypes(BaseType):
|
|||
'*': {
|
||||
'charset_enabled': True,
|
||||
'charset': 'utf-8', # default
|
||||
'domain_enabled': True,
|
||||
'gateway_enabled': True,
|
||||
'su_enabled': True,
|
||||
'ds_enabled': True,
|
||||
'su_methods': ['sudo', 'su', 'only_sudo', 'only_su'],
|
||||
|
@ -81,7 +81,7 @@ class HostTypes(BaseType):
|
|||
{'name': 'Linux'},
|
||||
{
|
||||
'name': GATEWAY_NAME,
|
||||
'domain_enabled': True,
|
||||
'gateway_enabled': True,
|
||||
}
|
||||
],
|
||||
cls.UNIX: [
|
||||
|
|
|
@ -312,7 +312,7 @@ class AllTypes(ChoicesMixin):
|
|||
'category': category,
|
||||
'type': tp, 'internal': True,
|
||||
'charset': constraints.get('charset', 'utf-8'),
|
||||
'domain_enabled': constraints.get('domain_enabled', False),
|
||||
'gateway_enabled': constraints.get('gateway_enabled', False),
|
||||
'su_enabled': constraints.get('su_enabled', False),
|
||||
}
|
||||
if data['su_enabled'] and data.get('su_methods'):
|
||||
|
|
|
@ -11,7 +11,7 @@ class WebTypes(BaseType):
|
|||
return {
|
||||
'*': {
|
||||
'charset_enabled': False,
|
||||
'domain_enabled': False,
|
||||
'gateway_enabled': False,
|
||||
'su_enabled': False,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
# Generated by Django 4.1.13 on 2024-05-09 03:16
|
||||
|
||||
import json
|
||||
import assets.models.asset.common
|
||||
from django.db.models import F, Q
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
from django.db.models import F
|
||||
|
||||
import assets.models.asset.common
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
@ -39,22 +39,26 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='automationexecution',
|
||||
name='automation',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='executions', to='assets.baseautomation', verbose_name='Automation task'),
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='executions',
|
||||
to='assets.baseautomation', verbose_name='Automation task'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='asset',
|
||||
name='domain',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='assets', to='assets.domain', verbose_name='Zone'),
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name='assets', to='assets.domain', verbose_name='Zone'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='asset',
|
||||
name='nodes',
|
||||
field=models.ManyToManyField(default=assets.models.asset.common.default_node, related_name='assets', to='assets.node', verbose_name='Nodes'),
|
||||
field=models.ManyToManyField(default=assets.models.asset.common.default_node, related_name='assets',
|
||||
to='assets.node', verbose_name='Nodes'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='asset',
|
||||
name='platform',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='assets', to='assets.platform', verbose_name='Platform'),
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='assets',
|
||||
to='assets.platform', verbose_name='Platform'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AssetBaseAutomation',
|
||||
|
@ -71,7 +75,9 @@ class Migration(migrations.Migration):
|
|||
migrations.CreateModel(
|
||||
name='GatherFactsAutomation',
|
||||
fields=[
|
||||
('baseautomation_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.baseautomation')),
|
||||
('baseautomation_ptr',
|
||||
models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True,
|
||||
primary_key=True, serialize=False, to='assets.baseautomation')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Gather asset facts',
|
||||
|
@ -81,7 +87,9 @@ class Migration(migrations.Migration):
|
|||
migrations.CreateModel(
|
||||
name='PingAutomation',
|
||||
fields=[
|
||||
('baseautomation_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.baseautomation')),
|
||||
('baseautomation_ptr',
|
||||
models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True,
|
||||
primary_key=True, serialize=False, to='assets.baseautomation')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Ping asset',
|
||||
|
|
|
@ -18,7 +18,7 @@ platforms_data_json = '''[
|
|||
"type": "linux",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": true,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -119,7 +119,7 @@ platforms_data_json = '''[
|
|||
"type": "unix",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": true,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -209,7 +209,7 @@ platforms_data_json = '''[
|
|||
"type": "unix",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": true,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -299,7 +299,7 @@ platforms_data_json = '''[
|
|||
"type": "unix",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": true,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -389,7 +389,7 @@ platforms_data_json = '''[
|
|||
"type": "windows",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -481,7 +481,7 @@ platforms_data_json = '''[
|
|||
"security": "any"
|
||||
},
|
||||
"internal": false,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -582,7 +582,7 @@ platforms_data_json = '''[
|
|||
"type": "other",
|
||||
"meta": {},
|
||||
"internal": false,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -684,7 +684,7 @@ platforms_data_json = '''[
|
|||
"security": "rdp"
|
||||
},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -776,7 +776,7 @@ platforms_data_json = '''[
|
|||
"security": "tls"
|
||||
},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -866,7 +866,7 @@ platforms_data_json = '''[
|
|||
"type": "unix",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": true,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -956,7 +956,7 @@ platforms_data_json = '''[
|
|||
"type": "linux",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": true,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -1057,7 +1057,7 @@ platforms_data_json = '''[
|
|||
"type": "windows",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -1136,7 +1136,7 @@ platforms_data_json = '''[
|
|||
"type": "general",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -1201,7 +1201,7 @@ platforms_data_json = '''[
|
|||
"type": "general",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": true,
|
||||
"su_method": "enable",
|
||||
"custom_fields": [],
|
||||
|
@ -1266,7 +1266,7 @@ platforms_data_json = '''[
|
|||
"type": "general",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": true,
|
||||
"su_method": "super",
|
||||
"custom_fields": [],
|
||||
|
@ -1332,7 +1332,7 @@ platforms_data_json = '''[
|
|||
"type": "general",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": true,
|
||||
"su_method": "super_level",
|
||||
"custom_fields": [],
|
||||
|
@ -1397,7 +1397,7 @@ platforms_data_json = '''[
|
|||
"type": "mysql",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -1449,7 +1449,7 @@ platforms_data_json = '''[
|
|||
"type": "mariadb",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -1501,7 +1501,7 @@ platforms_data_json = '''[
|
|||
"type": "postgresql",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -1553,7 +1553,7 @@ platforms_data_json = '''[
|
|||
"type": "oracle",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -1605,7 +1605,7 @@ platforms_data_json = '''[
|
|||
"type": "sqlserver",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -1657,7 +1657,7 @@ platforms_data_json = '''[
|
|||
"type": "clickhouse",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -1709,7 +1709,7 @@ platforms_data_json = '''[
|
|||
"type": "mongodb",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -1761,7 +1761,7 @@ platforms_data_json = '''[
|
|||
"type": "redis",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -1815,7 +1815,7 @@ platforms_data_json = '''[
|
|||
"type": "redis",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -1869,7 +1869,7 @@ platforms_data_json = '''[
|
|||
"type": "website",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": false,
|
||||
"gateway_enabled": false,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -1924,7 +1924,7 @@ platforms_data_json = '''[
|
|||
"type": "private",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": false,
|
||||
"gateway_enabled": false,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -1979,7 +1979,7 @@ platforms_data_json = '''[
|
|||
"type": "k8s",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": false,
|
||||
"gateway_enabled": false,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -2029,7 +2029,7 @@ platforms_data_json = '''[
|
|||
"type": "chatgpt",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": false,
|
||||
"gateway_enabled": false,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -2081,7 +2081,7 @@ platforms_data_json = '''[
|
|||
"type": "db2",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -2131,7 +2131,7 @@ platforms_data_json = '''[
|
|||
"type": "dameng",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
|
|
@ -52,6 +52,6 @@ class Migration(migrations.Migration):
|
|||
related_name="assets",
|
||||
to="assets.directoryservice",
|
||||
verbose_name="Directory services",
|
||||
),
|
||||
)
|
||||
),
|
||||
]
|
||||
|
|
|
@ -19,7 +19,7 @@ def add_ds_platforms(apps, schema_editor):
|
|||
"type": "windows_ad",
|
||||
"meta": {},
|
||||
"internal": true,
|
||||
"domain_enabled": true,
|
||||
"gateway_enabled": true,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [],
|
||||
|
@ -117,7 +117,7 @@ def add_ds_platforms(apps, schema_editor):
|
|||
"meta": {
|
||||
},
|
||||
"internal": true,
|
||||
"domain_enabled": false,
|
||||
"gateway_enabled": false,
|
||||
"su_enabled": false,
|
||||
"su_method": null,
|
||||
"custom_fields": [
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
# Generated by Django 4.1.13 on 2025-04-18 08:05
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("assets", "0017_auto_20250407_1124"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name="platform",
|
||||
old_name="domain_enabled",
|
||||
new_name="gateway_enabled",
|
||||
),
|
||||
migrations.RenameModel(
|
||||
old_name="Domain",
|
||||
new_name="Zone",
|
||||
),
|
||||
migrations.RenameField(
|
||||
model_name="asset",
|
||||
old_name="domain",
|
||||
new_name="zone",
|
||||
),
|
||||
]
|
|
@ -1,9 +1,10 @@
|
|||
# noqa
|
||||
from .base import *
|
||||
from .platform import *
|
||||
from .asset import *
|
||||
from .label import Label
|
||||
from .gateway import *
|
||||
from .domain import *
|
||||
from .zone import * # noqa
|
||||
from .node import *
|
||||
from .favorite_asset import *
|
||||
from .automations import *
|
||||
|
|
|
@ -168,8 +168,8 @@ class Asset(NodesRelationMixin, LabeledMixin, AbsConnectivity, JSONFilterMixin,
|
|||
platform = models.ForeignKey(
|
||||
Platform, on_delete=models.PROTECT, verbose_name=_("Platform"), related_name='assets'
|
||||
)
|
||||
domain = models.ForeignKey(
|
||||
"assets.Domain", null=True, blank=True, related_name='assets',
|
||||
zone = models.ForeignKey(
|
||||
"assets.Zone", null=True, blank=True, related_name='assets',
|
||||
verbose_name=_("Zone"), on_delete=models.SET_NULL
|
||||
)
|
||||
nodes = models.ManyToManyField(
|
||||
|
@ -177,7 +177,7 @@ class Asset(NodesRelationMixin, LabeledMixin, AbsConnectivity, JSONFilterMixin,
|
|||
)
|
||||
directory_services = models.ManyToManyField(
|
||||
'assets.DirectoryService', related_name='assets',
|
||||
verbose_name=_("Directory service")
|
||||
verbose_name=_("Directory services")
|
||||
)
|
||||
is_active = models.BooleanField(default=True, verbose_name=_('Active'))
|
||||
gathered_info = models.JSONField(verbose_name=_('Gathered info'), default=dict, blank=True) # 资产的一些信息,如 硬件信息
|
||||
|
@ -244,7 +244,7 @@ class Asset(NodesRelationMixin, LabeledMixin, AbsConnectivity, JSONFilterMixin,
|
|||
platform = self.platform
|
||||
auto_config = {
|
||||
'su_enabled': platform.su_enabled,
|
||||
'domain_enabled': platform.domain_enabled,
|
||||
'gateway_enabled': platform.gateway_enabled,
|
||||
'ansible_enabled': False
|
||||
}
|
||||
automation = getattr(self.platform, 'automation', None)
|
||||
|
@ -362,11 +362,11 @@ class Asset(NodesRelationMixin, LabeledMixin, AbsConnectivity, JSONFilterMixin,
|
|||
|
||||
@lazyproperty
|
||||
def gateway(self):
|
||||
if not self.domain_id:
|
||||
if not self.zone_id:
|
||||
return
|
||||
if not self.platform.domain_enabled:
|
||||
if not self.platform.gateway_enabled:
|
||||
return
|
||||
return self.domain.select_gateway()
|
||||
return self.zone.select_gateway()
|
||||
|
||||
def as_node(self):
|
||||
from assets.models import Node
|
||||
|
|
|
@ -101,7 +101,7 @@ class Platform(LabeledMixin, JMSBaseModel):
|
|||
default=CharsetChoices.utf8, choices=CharsetChoices.choices,
|
||||
max_length=8, verbose_name=_("Charset")
|
||||
)
|
||||
domain_enabled = models.BooleanField(default=True, verbose_name=_("Gateway enabled"))
|
||||
gateway_enabled = models.BooleanField(default=True, verbose_name=_("Gateway enabled"))
|
||||
ds_enabled = models.BooleanField(default=False, verbose_name=_("DS enabled"))
|
||||
# 账号有关的
|
||||
su_enabled = models.BooleanField(default=False, verbose_name=_("Su enabled"))
|
||||
|
|
|
@ -12,10 +12,10 @@ from .gateway import Gateway
|
|||
|
||||
logger = get_logger(__file__)
|
||||
|
||||
__all__ = ['Domain']
|
||||
__all__ = ['Zone']
|
||||
|
||||
|
||||
class Domain(LabeledMixin, JMSOrgBaseModel):
|
||||
class Zone(LabeledMixin, JMSOrgBaseModel):
|
||||
name = models.CharField(max_length=128, verbose_name=_('Name'))
|
||||
|
||||
class Meta:
|
||||
|
@ -49,7 +49,7 @@ class Domain(LabeledMixin, JMSOrgBaseModel):
|
|||
|
||||
@property
|
||||
def gateways(self):
|
||||
queryset = self.get_gateway_queryset().filter(domain=self)
|
||||
queryset = self.get_gateway_queryset().filter(zone=self)
|
||||
return queryset
|
||||
|
||||
@classmethod
|
|
@ -154,7 +154,7 @@ class AssetSerializer(BulkOrgResourceModelSerializer, ResourceLabelsMixin, Writa
|
|||
|
||||
class Meta:
|
||||
model = Asset
|
||||
fields_fk = ['domain', 'platform']
|
||||
fields_fk = ['zone', 'platform']
|
||||
fields_mini = ['id', 'name', 'address'] + fields_fk
|
||||
fields_small = fields_mini + ['is_active', 'comment']
|
||||
fields_m2m = [
|
||||
|
@ -233,7 +233,7 @@ class AssetSerializer(BulkOrgResourceModelSerializer, ResourceLabelsMixin, Writa
|
|||
@classmethod
|
||||
def setup_eager_loading(cls, queryset):
|
||||
""" Perform necessary eager loading of data. """
|
||||
queryset = queryset.prefetch_related('domain', 'nodes', 'protocols', 'directory_services') \
|
||||
queryset = queryset.prefetch_related('zone', 'nodes', 'protocols', 'directory_services') \
|
||||
.prefetch_related('platform', 'platform__automation') \
|
||||
.annotate(category=F("platform__category")) \
|
||||
.annotate(type=F("platform__type")) \
|
||||
|
@ -271,9 +271,9 @@ class AssetSerializer(BulkOrgResourceModelSerializer, ResourceLabelsMixin, Writa
|
|||
raise serializers.ValidationError({'platform': _("Platform not exist")})
|
||||
return platform
|
||||
|
||||
def validate_domain(self, value):
|
||||
def validate_zone(self, value):
|
||||
platform = self._asset_platform
|
||||
if platform.domain_enabled:
|
||||
if platform.gateway_enabled:
|
||||
return value
|
||||
else:
|
||||
return None
|
||||
|
|
|
@ -8,12 +8,12 @@ from common.serializers import ResourceLabelsMixin
|
|||
from common.serializers.fields import ObjectRelatedField
|
||||
from orgs.mixins.serializers import BulkOrgResourceModelSerializer
|
||||
from .gateway import GatewayWithAccountSecretSerializer
|
||||
from ..models import Domain, Gateway
|
||||
from ..models import Zone, Gateway
|
||||
|
||||
__all__ = ['DomainSerializer', 'DomainWithGatewaySerializer', 'DomainListSerializer']
|
||||
__all__ = ['ZoneSerializer', 'ZoneWithGatewaySerializer', 'ZoneListSerializer']
|
||||
|
||||
|
||||
class DomainSerializer(ResourceLabelsMixin, BulkOrgResourceModelSerializer):
|
||||
class ZoneSerializer(ResourceLabelsMixin, BulkOrgResourceModelSerializer):
|
||||
gateways = ObjectRelatedField(
|
||||
many=True, required=False, label=_('Gateway'), queryset=Gateway.objects,
|
||||
help_text=_(
|
||||
|
@ -23,7 +23,7 @@ class DomainSerializer(ResourceLabelsMixin, BulkOrgResourceModelSerializer):
|
|||
assets_amount = serializers.IntegerField(label=_('Assets amount'), read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Domain
|
||||
model = Zone
|
||||
fields_mini = ['id', 'name']
|
||||
fields_small = fields_mini + ['comment']
|
||||
fields_m2m = ['assets', 'gateways', 'labels', 'assets_amount']
|
||||
|
@ -55,9 +55,9 @@ class DomainSerializer(ResourceLabelsMixin, BulkOrgResourceModelSerializer):
|
|||
return super().update(instance, validated_data)
|
||||
|
||||
|
||||
class DomainListSerializer(DomainSerializer):
|
||||
class Meta(DomainSerializer.Meta):
|
||||
fields = list(set(DomainSerializer.Meta.fields + ['assets_amount']) - {'assets'})
|
||||
class ZoneListSerializer(ZoneSerializer):
|
||||
class Meta(ZoneSerializer.Meta):
|
||||
fields = list(set(ZoneSerializer.Meta.fields + ['assets_amount']) - {'assets'})
|
||||
|
||||
@classmethod
|
||||
def setup_eager_loading(cls, queryset):
|
||||
|
@ -67,9 +67,9 @@ class DomainListSerializer(DomainSerializer):
|
|||
return queryset
|
||||
|
||||
|
||||
class DomainWithGatewaySerializer(serializers.ModelSerializer):
|
||||
class ZoneWithGatewaySerializer(serializers.ModelSerializer):
|
||||
gateways = GatewayWithAccountSecretSerializer(many=True, read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Domain
|
||||
model = Zone
|
||||
fields = '__all__'
|
||||
|
|
|
@ -194,7 +194,7 @@ class PlatformSerializer(ResourceLabelsMixin, CommonSerializerMixin, WritableNes
|
|||
]
|
||||
fields_m2m = ['assets', 'assets_amount']
|
||||
fields = fields_small + fields_m2m + [
|
||||
"protocols", "domain_enabled", "su_enabled", "su_method",
|
||||
"protocols", "gateway_enabled", "su_enabled", "su_method",
|
||||
"ds_enabled", "automation", "comment", "custom_fields", "labels"
|
||||
] + read_only_fields
|
||||
extra_kwargs = {
|
||||
|
@ -205,11 +205,11 @@ class PlatformSerializer(ResourceLabelsMixin, CommonSerializerMixin, WritableNes
|
|||
"similar to logging in with a regular account and then switching to root"
|
||||
)
|
||||
},
|
||||
"domain_enabled": {
|
||||
"gateway_enabled": {
|
||||
"label": _('Gateway enabled'),
|
||||
"help_text": _("Assets can be connected using a zone gateway")
|
||||
},
|
||||
"domain_default": {"label": _('Default Domain')},
|
||||
"zone_default": {"label": _('Default zone')},
|
||||
'assets': {'required': False, 'label': _('Assets')},
|
||||
}
|
||||
|
||||
|
@ -262,8 +262,8 @@ class PlatformSerializer(ResourceLabelsMixin, CommonSerializerMixin, WritableNes
|
|||
def validate_su_enabled(self, su_enabled):
|
||||
return su_enabled and self.constraints.get('su_enabled', False)
|
||||
|
||||
def validate_domain_enabled(self, domain_enabled):
|
||||
return domain_enabled and self.constraints.get('domain_enabled', False)
|
||||
def validate_gateway_enabled(self, gateway_enabled):
|
||||
return gateway_enabled and self.constraints.get('gateway_enabled', False)
|
||||
|
||||
def validate_automation(self, automation):
|
||||
automation = automation or {}
|
||||
|
|
|
@ -20,7 +20,7 @@ router.register(r'directories', api.DSViewSet, 'ds')
|
|||
router.register(r'customs', api.CustomViewSet, 'custom')
|
||||
router.register(r'platforms', api.AssetPlatformViewSet, 'platform')
|
||||
router.register(r'nodes', api.NodeViewSet, 'node')
|
||||
router.register(r'domains', api.DomainViewSet, 'domain')
|
||||
router.register(r'zones', api.ZoneViewSet, 'zone')
|
||||
router.register(r'gateways', api.GatewayViewSet, 'gateway')
|
||||
router.register(r'favorite-assets', api.FavoriteAssetViewSet, 'favorite-asset')
|
||||
router.register(r'protocol-settings', api.PlatformProtocolViewSet, 'protocol-setting')
|
||||
|
|
|
@ -251,7 +251,7 @@ class ConnectionToken(JMSOrgBaseModel):
|
|||
raise JMSException({'error': 'No host account available, please check the applet, host and account'})
|
||||
|
||||
host, account, lock_key = bulk_get(host_account, ('host', 'account', 'lock_key'))
|
||||
gateway = host.domain.select_gateway() if host.domain else None
|
||||
gateway = host.zone.select_gateway() if host.zone else None
|
||||
platform = host.platform
|
||||
|
||||
data = {
|
||||
|
@ -305,17 +305,17 @@ class ConnectionToken(JMSOrgBaseModel):
|
|||
return account
|
||||
|
||||
@lazyproperty
|
||||
def domain(self):
|
||||
if not self.asset.platform.domain_enabled:
|
||||
def zone(self):
|
||||
if not self.asset.platform.gateway_enabled:
|
||||
return
|
||||
if self.asset.platform.name == GATEWAY_NAME:
|
||||
return
|
||||
domain = self.asset.domain if self.asset.domain else None
|
||||
return domain
|
||||
zone = self.asset.zone if self.asset.zone else None
|
||||
return zone
|
||||
|
||||
@lazyproperty
|
||||
def gateway(self):
|
||||
if not self.asset or not self.domain:
|
||||
if not self.asset or not self.zone:
|
||||
return
|
||||
return self.asset.gateway
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ from rest_framework import serializers
|
|||
from accounts.const import SecretType
|
||||
from accounts.models import Account
|
||||
from acls.models import CommandGroup, CommandFilterACL
|
||||
from assets.models import Asset, Platform, Gateway, Domain
|
||||
from assets.models import Asset, Platform, Gateway, Zone
|
||||
from assets.serializers.asset import AssetProtocolsSerializer
|
||||
from assets.serializers.platform import PlatformSerializer
|
||||
from common.serializers.fields import LabeledChoiceField
|
||||
|
@ -135,7 +135,7 @@ class ConnectionTokenSecretSerializer(OrgResourceModelSerializerMixin):
|
|||
account = _ConnectionTokenAccountSerializer(read_only=True, source='account_object')
|
||||
gateway = _ConnectionTokenGatewaySerializer(read_only=True)
|
||||
platform = _ConnectionTokenPlatformSerializer(read_only=True)
|
||||
domain = ObjectRelatedField(queryset=Domain.objects, required=False, label=_('Domain'))
|
||||
zone = ObjectRelatedField(queryset=Zone.objects, required=False, label=_('Domain'))
|
||||
command_filter_acls = _ConnectionTokenCommandFilterACLSerializer(read_only=True, many=True)
|
||||
expire_now = serializers.BooleanField(label=_('Expired now'), write_only=True, default=True)
|
||||
connect_method = _ConnectTokenConnectMethodSerializer(read_only=True, source='connect_method_object')
|
||||
|
@ -148,7 +148,7 @@ class ConnectionTokenSecretSerializer(OrgResourceModelSerializerMixin):
|
|||
fields = [
|
||||
'id', 'value', 'user', 'asset', 'account',
|
||||
'platform', 'command_filter_acls', 'protocol',
|
||||
'domain', 'gateway', 'actions', 'expire_at',
|
||||
'zone', 'gateway', 'actions', 'expire_at',
|
||||
'from_ticket', 'expire_now', 'connect_method',
|
||||
'connect_options', 'face_monitor_token'
|
||||
]
|
||||
|
|
|
@ -2882,7 +2882,7 @@ msgstr "Código"
|
|||
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:209
|
||||
msgid "Gateway enabled"
|
||||
msgstr "Activar dominio"
|
||||
msgstr "Activar gateway de zona"
|
||||
|
||||
#: assets/models/platform.py:105
|
||||
msgid "DS enabled"
|
||||
|
|
|
@ -2769,7 +2769,7 @@ msgstr "シャーセット"
|
|||
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:209
|
||||
msgid "Gateway enabled"
|
||||
msgstr "ゲートウェイが有効になりました"
|
||||
msgstr "ゾーンゲートウェイを有効化"
|
||||
|
||||
#: assets/models/platform.py:105
|
||||
msgid "DS enabled"
|
||||
|
|
|
@ -2862,7 +2862,7 @@ msgstr "Codificação"
|
|||
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:209
|
||||
msgid "Gateway enabled"
|
||||
msgstr "Habilitar domínio"
|
||||
msgstr "Ativar zone gateway"
|
||||
|
||||
#: assets/models/platform.py:105
|
||||
msgid "DS enabled"
|
||||
|
|
|
@ -2827,7 +2827,7 @@ msgstr "Кодировка"
|
|||
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:209
|
||||
msgid "Gateway enabled"
|
||||
msgstr "Шлюз включен"
|
||||
msgstr "Включить шлюз зоны"
|
||||
|
||||
#: assets/models/platform.py:105
|
||||
msgid "DS enabled"
|
||||
|
|
|
@ -2780,11 +2780,11 @@ msgstr "编码"
|
|||
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:209
|
||||
msgid "Gateway enabled"
|
||||
msgstr "启用网域"
|
||||
msgstr "启用网域网关"
|
||||
|
||||
#: assets/models/platform.py:105
|
||||
msgid "DS enabled"
|
||||
msgstr "目录服务已启用"
|
||||
msgstr "启用目录服务"
|
||||
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:202
|
||||
msgid "Su enabled"
|
||||
|
|
|
@ -2751,7 +2751,7 @@ msgstr "編碼"
|
|||
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:209
|
||||
msgid "Gateway enabled"
|
||||
msgstr "啟用網域"
|
||||
msgstr "啟用網域網関"
|
||||
|
||||
#: assets/models/platform.py:105
|
||||
msgid "DS enabled"
|
||||
|
|
|
@ -37,7 +37,7 @@ class JMSInventory:
|
|||
from assets.models import Asset
|
||||
asset_ids = [asset.id for asset in assets]
|
||||
assets = Asset.objects.filter(id__in=asset_ids, is_active=True) \
|
||||
.prefetch_related('platform', 'domain', 'accounts')
|
||||
.prefetch_related('platform', 'zone', 'accounts')
|
||||
return assets
|
||||
|
||||
@staticmethod
|
||||
|
@ -236,8 +236,8 @@ class JMSInventory:
|
|||
host.update(ansible_config)
|
||||
|
||||
gateway = None
|
||||
if not asset.is_gateway and asset.domain:
|
||||
gateway = asset.domain.select_gateway()
|
||||
if not asset.is_gateway and asset.zone:
|
||||
gateway = asset.zone.select_gateway()
|
||||
|
||||
self.make_account_vars(
|
||||
host, asset, account, automation, protocol, platform, gateway, path_dir, ansible_config
|
||||
|
|
|
@ -7,7 +7,7 @@ from rest_framework.exceptions import PermissionDenied
|
|||
from rest_framework.generics import RetrieveAPIView
|
||||
|
||||
from assets.models import (
|
||||
Asset, Domain, Label, Node,
|
||||
Asset, Zone, Label, Node,
|
||||
)
|
||||
from common.api import JMSBulkModelViewSet
|
||||
from common.permissions import IsValidUser
|
||||
|
@ -24,7 +24,7 @@ logger = get_logger(__file__)
|
|||
|
||||
# 部分 org 相关的 model,需要清空这些数据之后才能删除该组织
|
||||
org_related_models = [
|
||||
User, UserGroup, Asset, Node, Label, Domain, AssetPermission
|
||||
User, UserGroup, Asset, Node, Label, Zone, AssetPermission
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
from django.db.transaction import on_commit
|
||||
|
||||
from orgs.models import Organization
|
||||
from orgs.tasks import refresh_org_cache_task
|
||||
from orgs.utils import current_org, tmp_to_org
|
||||
from accounts.models import Account
|
||||
from assets.models import Node, Zone, Asset
|
||||
from common.cache import Cache, IntegerField
|
||||
from common.utils import get_logger
|
||||
from common.utils.timezone import local_zero_hour, local_monday
|
||||
from users.models import UserGroup, User
|
||||
from assets.models import Node, Domain, Asset
|
||||
from accounts.models import Account
|
||||
from terminal.models import Session
|
||||
from orgs.models import Organization
|
||||
from orgs.tasks import refresh_org_cache_task
|
||||
from orgs.utils import current_org, tmp_to_org
|
||||
from perms.models import AssetPermission
|
||||
from terminal.models import Session
|
||||
from users.models import UserGroup, User
|
||||
|
||||
logger = get_logger(__file__)
|
||||
|
||||
|
@ -57,7 +57,7 @@ class OrgResourceStatisticsCache(OrgRelatedCache):
|
|||
new_users_amount_this_week = IntegerField()
|
||||
new_assets_amount_this_week = IntegerField()
|
||||
nodes_amount = IntegerField(queryset=Node.objects)
|
||||
domains_amount = IntegerField(queryset=Domain.objects)
|
||||
zones_amount = IntegerField(queryset=Zone.objects)
|
||||
groups_amount = IntegerField(queryset=UserGroup.objects)
|
||||
accounts_amount = IntegerField(queryset=Account.objects)
|
||||
asset_perms_amount = IntegerField(queryset=AssetPermission.objects)
|
||||
|
|
|
@ -12,7 +12,7 @@ class ResourceStatisticsSerializer(serializers.Serializer):
|
|||
|
||||
assets_amount = serializers.IntegerField(required=False, label=_('Assets amount'))
|
||||
nodes_amount = serializers.IntegerField(required=False, label=_('Nodes amount'))
|
||||
domains_amount = serializers.IntegerField(required=False, label=_('Domains amount'))
|
||||
zones_amount = serializers.IntegerField(required=False, label=_('Domains amount'))
|
||||
gateways_amount = serializers.IntegerField(required=False, label=_('Gateways amount'))
|
||||
|
||||
asset_perms_amount = serializers.IntegerField(required=False, label=_('Asset permissions amount'))
|
||||
|
|
|
@ -2,7 +2,7 @@ from django.db.models.signals import post_save, pre_delete, pre_save, post_delet
|
|||
from django.dispatch import receiver
|
||||
|
||||
from accounts.models import Account
|
||||
from assets.models import Asset, Domain
|
||||
from assets.models import Asset, Zone
|
||||
from assets.models import Node
|
||||
from common.decorators import merge_delay_run
|
||||
from common.utils import get_logger
|
||||
|
@ -64,7 +64,7 @@ def on_user_delete_refresh_cache(sender, instance, **kwargs):
|
|||
|
||||
model_cache_field_mapper = {
|
||||
Node: ['nodes_amount'],
|
||||
Domain: ['domains_amount'],
|
||||
Zone: ['zones_amount'],
|
||||
UserGroup: ['groups_amount'],
|
||||
Account: ['accounts_amount'],
|
||||
RoleBinding: ['users_amount', 'new_users_amount_this_week'],
|
||||
|
|
|
@ -25,12 +25,12 @@ class AssetPermedSerializer(OrgResourceModelSerializerMixin, ResourceLabelsMixin
|
|||
platform = ObjectRelatedField(required=False, queryset=Platform.objects, label=_('Platform'))
|
||||
category = LabeledChoiceField(choices=Category.choices, read_only=True, label=_('Category'))
|
||||
type = LabeledChoiceField(choices=AllTypes.choices(), read_only=True, label=_('Type'))
|
||||
domain = ObjectRelatedField(required=False, queryset=Node.objects, label=_('Domain'))
|
||||
zone = ObjectRelatedField(required=False, read_only=True, label=_('Zone'))
|
||||
|
||||
class Meta:
|
||||
model = Asset
|
||||
only_fields = [
|
||||
'id', 'name', 'address', 'domain', 'platform',
|
||||
'id', 'name', 'address', 'zone', 'platform',
|
||||
'comment', 'org_id', 'is_active', 'date_verified',
|
||||
'created_by', 'date_created', 'connectivity', 'nodes', 'labels'
|
||||
]
|
||||
|
@ -40,7 +40,7 @@ class AssetPermedSerializer(OrgResourceModelSerializerMixin, ResourceLabelsMixin
|
|||
@classmethod
|
||||
def setup_eager_loading(cls, queryset):
|
||||
""" Perform necessary eager loading of data. """
|
||||
queryset = queryset.prefetch_related('domain', 'nodes') \
|
||||
queryset = queryset.prefetch_related('zone', 'nodes') \
|
||||
.prefetch_related('platform') \
|
||||
.annotate(category=F("platform__category")) \
|
||||
.annotate(type=F("platform__type"))
|
||||
|
|
Loading…
Reference in New Issue