mirror of https://github.com/jumpserver/jumpserver
perf: del domain node
parent
52541d1dad
commit
dd207016b2
|
@ -4,18 +4,11 @@ from django.db import migrations, models
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
# TODO 最后去掉这个迁移
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('assets', '0113_alter_accounttemplate_options'),
|
('assets', '0113_alter_accounttemplate_options'),
|
||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
migrations.AddField(
|
|
||||||
model_name='node',
|
|
||||||
name='domain',
|
|
||||||
field=models.ForeignKey(
|
|
||||||
blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL,
|
|
||||||
related_name='nodes', to='assets.domain', verbose_name='Domain'
|
|
||||||
),
|
|
||||||
),
|
|
||||||
]
|
]
|
||||||
|
|
|
@ -105,14 +105,6 @@ class Asset(NodesRelationMixin, AbsConnectivity, JMSOrgBaseModel):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '{0.name}({0.address})'.format(self)
|
return '{0.name}({0.address})'.format(self)
|
||||||
|
|
||||||
def get_domains(self):
|
|
||||||
from ..domain import Domain
|
|
||||||
node_ids = self.get_all_nodes(flat=True)
|
|
||||||
domains = Domain.objects.filter(
|
|
||||||
Q(nodes__id__in=node_ids) | Q(id=self.domain_id)
|
|
||||||
).distinct()
|
|
||||||
return domains
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def specific(self):
|
def specific(self):
|
||||||
if not hasattr(self, self.category):
|
if not hasattr(self, self.category):
|
||||||
|
|
|
@ -558,10 +558,6 @@ class Node(OrgModelMixin, SomeNodesMixin, FamilyMixin, NodeAssetsMixin):
|
||||||
max_length=64, verbose_name=_("Parent key"), db_index=True, default=''
|
max_length=64, verbose_name=_("Parent key"), db_index=True, default=''
|
||||||
)
|
)
|
||||||
assets_amount = models.IntegerField(default=0)
|
assets_amount = models.IntegerField(default=0)
|
||||||
domain = models.ForeignKey(
|
|
||||||
"assets.Domain", null=True, blank=True, related_name='nodes',
|
|
||||||
verbose_name=_("Domain"), on_delete=models.SET_NULL
|
|
||||||
)
|
|
||||||
|
|
||||||
objects = OrgManager.from_queryset(NodeQuerySet)()
|
objects = OrgManager.from_queryset(NodeQuerySet)()
|
||||||
is_node = True
|
is_node = True
|
||||||
|
|
|
@ -14,12 +14,8 @@ from .utils import validate_password_for_ansible, validate_ssh_key
|
||||||
|
|
||||||
|
|
||||||
class DomainSerializer(BulkOrgResourceModelSerializer):
|
class DomainSerializer(BulkOrgResourceModelSerializer):
|
||||||
node_count = serializers.SerializerMethodField(label=_('Nodes amount'))
|
|
||||||
asset_count = serializers.SerializerMethodField(label=_('Assets amount'))
|
asset_count = serializers.SerializerMethodField(label=_('Assets amount'))
|
||||||
gateway_count = serializers.SerializerMethodField(label=_('Gateways count'))
|
gateway_count = serializers.SerializerMethodField(label=_('Gateways count'))
|
||||||
nodes = ObjectRelatedField(
|
|
||||||
many=True, required=False, queryset=Node.objects, label=_('Node')
|
|
||||||
)
|
|
||||||
assets = ObjectRelatedField(
|
assets = ObjectRelatedField(
|
||||||
many=True, required=False, queryset=Asset.objects, label=_('Asset')
|
many=True, required=False, queryset=Asset.objects, label=_('Asset')
|
||||||
)
|
)
|
||||||
|
@ -29,17 +25,13 @@ class DomainSerializer(BulkOrgResourceModelSerializer):
|
||||||
fields_mini = ['id', 'name']
|
fields_mini = ['id', 'name']
|
||||||
fields_small = fields_mini + ['comment']
|
fields_small = fields_mini + ['comment']
|
||||||
fields_m2m = ['nodes', 'assets']
|
fields_m2m = ['nodes', 'assets']
|
||||||
read_only_fields = ['node_count', 'asset_count', 'gateway_count', 'date_created']
|
read_only_fields = ['asset_count', 'gateway_count', 'date_created']
|
||||||
fields = fields_small + fields_m2m + read_only_fields
|
fields = fields_small + fields_m2m + read_only_fields
|
||||||
|
|
||||||
extra_kwargs = {
|
extra_kwargs = {
|
||||||
'assets': {'required': False, 'label': _('Assets')},
|
'assets': {'required': False, 'label': _('Assets')},
|
||||||
}
|
}
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def get_node_count(obj):
|
|
||||||
return obj.nodes.count()
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_asset_count(obj):
|
def get_asset_count(obj):
|
||||||
return obj.assets.count()
|
return obj.assets.count()
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
# ~*~ coding: utf-8 ~*~
|
# ~*~ coding: utf-8 ~*~
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import random
|
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
@ -118,10 +117,8 @@ class JMSInventory:
|
||||||
host.update(ansible_config)
|
host.update(ansible_config)
|
||||||
|
|
||||||
gateway = None
|
gateway = None
|
||||||
domains = asset.get_domains()
|
if asset.domain:
|
||||||
if domains:
|
gateway = asset.domain.select_gateway()
|
||||||
gateways = [i.select_gateway() for i in domains if i.select_gateway()]
|
|
||||||
gateway = random.choice(gateways) if gateways else None
|
|
||||||
|
|
||||||
if ansible_connection == 'local':
|
if ansible_connection == 'local':
|
||||||
if gateway:
|
if gateway:
|
||||||
|
|
Loading…
Reference in New Issue