mirror of https://github.com/jumpserver/jumpserver
Merge branch 'dev' into perm_tree
commit
e7c7c3a7a8
|
@ -31,7 +31,7 @@ from .. import serializers
|
||||||
logger = get_logger(__file__)
|
logger = get_logger(__file__)
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'NodeViewSet', 'NodeChildrenApi',
|
'NodeViewSet', 'NodeChildrenApi',
|
||||||
'NodeAssetsApi', 'NodeWithAssetsApi',
|
'NodeAssetsApi',
|
||||||
'NodeAddAssetsApi', 'NodeRemoveAssetsApi',
|
'NodeAddAssetsApi', 'NodeRemoveAssetsApi',
|
||||||
'NodeReplaceAssetsApi',
|
'NodeReplaceAssetsApi',
|
||||||
'NodeAddChildrenApi', 'RefreshNodeHardwareInfoApi',
|
'NodeAddChildrenApi', 'RefreshNodeHardwareInfoApi',
|
||||||
|
@ -42,14 +42,7 @@ __all__ = [
|
||||||
class NodeViewSet(BulkModelViewSet):
|
class NodeViewSet(BulkModelViewSet):
|
||||||
queryset = Node.objects.all()
|
queryset = Node.objects.all()
|
||||||
permission_classes = (IsSuperUser,)
|
permission_classes = (IsSuperUser,)
|
||||||
# serializer_class = serializers.NodeSerializer
|
serializer_class = serializers.NodeSerializer
|
||||||
|
|
||||||
def get_serializer_class(self):
|
|
||||||
show_current_asset = self.request.query_params.get('show_current_asset')
|
|
||||||
if show_current_asset:
|
|
||||||
return serializers.NodeCurrentSerializer
|
|
||||||
else:
|
|
||||||
return serializers.NodeSerializer
|
|
||||||
|
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
child_key = Node.root().get_next_child_key()
|
child_key = Node.root().get_next_child_key()
|
||||||
|
@ -57,32 +50,32 @@ class NodeViewSet(BulkModelViewSet):
|
||||||
serializer.save()
|
serializer.save()
|
||||||
|
|
||||||
|
|
||||||
class NodeWithAssetsApi(generics.ListAPIView):
|
# class NodeWithAssetsApi(generics.ListAPIView):
|
||||||
permission_classes = (IsSuperUser,)
|
# permission_classes = (IsSuperUser,)
|
||||||
serializers = serializers.NodeSerializer
|
# serializers = serializers.NodeSerializer
|
||||||
|
#
|
||||||
def get_node(self):
|
# def get_node(self):
|
||||||
pk = self.kwargs.get('pk') or self.request.query_params.get('node')
|
# pk = self.kwargs.get('pk') or self.request.query_params.get('node')
|
||||||
if not pk:
|
# if not pk:
|
||||||
node = Node.root()
|
# node = Node.root()
|
||||||
else:
|
# else:
|
||||||
node = get_object_or_404(Node, pk)
|
# node = get_object_or_404(Node, pk)
|
||||||
return node
|
# return node
|
||||||
|
#
|
||||||
def get_queryset(self):
|
# def get_queryset(self):
|
||||||
queryset = []
|
# queryset = []
|
||||||
node = self.get_node()
|
# node = self.get_node()
|
||||||
children = node.get_children()
|
# children = node.get_children()
|
||||||
assets = node.get_assets()
|
# assets = node.get_assets()
|
||||||
queryset.extend(list(children))
|
# queryset.extend(list(children))
|
||||||
|
#
|
||||||
for asset in assets:
|
# for asset in assets:
|
||||||
node = Node()
|
# node = Node()
|
||||||
node.id = asset.id
|
# node.id = asset.id
|
||||||
node.parent = node.id
|
# node.parent = node.id
|
||||||
node.value = asset.hostname
|
# node.value = asset.hostname
|
||||||
queryset.append(node)
|
# queryset.append(node)
|
||||||
return queryset
|
# return queryset
|
||||||
|
|
||||||
|
|
||||||
class NodeChildrenApi(mixins.ListModelMixin, generics.CreateAPIView):
|
class NodeChildrenApi(mixins.ListModelMixin, generics.CreateAPIView):
|
||||||
|
@ -146,9 +139,9 @@ class NodeChildrenApi(mixins.ListModelMixin, generics.CreateAPIView):
|
||||||
for asset in assets:
|
for asset in assets:
|
||||||
node_fake = Node()
|
node_fake = Node()
|
||||||
node_fake.id = asset.id
|
node_fake.id = asset.id
|
||||||
|
node_fake.is_node = False
|
||||||
node_fake.parent = node
|
node_fake.parent = node
|
||||||
node_fake.value = asset.hostname
|
node_fake.value = asset.hostname
|
||||||
node_fake.is_node = False
|
|
||||||
queryset.append(node_fake)
|
queryset.append(node_fake)
|
||||||
queryset = sorted(queryset, key=lambda x: x.is_node, reverse=True)
|
queryset = sorted(queryset, key=lambda x: x.is_node, reverse=True)
|
||||||
return queryset
|
return queryset
|
||||||
|
@ -184,9 +177,7 @@ class NodeAddChildrenApi(generics.UpdateAPIView):
|
||||||
for node in children:
|
for node in children:
|
||||||
if not node:
|
if not node:
|
||||||
continue
|
continue
|
||||||
# node.parent = instance
|
node.parent = instance
|
||||||
# node.save()
|
|
||||||
node.set_parent(instance)
|
|
||||||
return Response("OK")
|
return Response("OK")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -52,16 +52,6 @@ class Node(models.Model):
|
||||||
def level(self):
|
def level(self):
|
||||||
return len(self.key.split(':'))
|
return len(self.key.split(':'))
|
||||||
|
|
||||||
def set_parent(self, instance):
|
|
||||||
children = self.get_all_children()
|
|
||||||
old_key = self.key
|
|
||||||
with transaction.atomic():
|
|
||||||
self.parent = instance
|
|
||||||
for child in children:
|
|
||||||
child.key = child.key.replace(old_key, self.key, 1)
|
|
||||||
child.save()
|
|
||||||
self.save()
|
|
||||||
|
|
||||||
def get_next_child_key(self):
|
def get_next_child_key(self):
|
||||||
mark = self.child_mark
|
mark = self.child_mark
|
||||||
self.child_mark += 1
|
self.child_mark += 1
|
||||||
|
@ -142,7 +132,17 @@ class Node(models.Model):
|
||||||
|
|
||||||
@parent.setter
|
@parent.setter
|
||||||
def parent(self, parent):
|
def parent(self, parent):
|
||||||
|
if self.is_node:
|
||||||
|
children = self.get_all_children()
|
||||||
|
old_key = self.key
|
||||||
|
with transaction.atomic():
|
||||||
self.key = parent.get_next_child_key()
|
self.key = parent.get_next_child_key()
|
||||||
|
for child in children:
|
||||||
|
child.key = child.key.replace(old_key, self.key, 1)
|
||||||
|
child.save()
|
||||||
|
self.save()
|
||||||
|
else:
|
||||||
|
self.key = parent.key+':fake'
|
||||||
|
|
||||||
def get_ancestor(self, with_self=False):
|
def get_ancestor(self, with_self=False):
|
||||||
if self.is_root():
|
if self.is_root():
|
||||||
|
|
|
@ -9,7 +9,7 @@ from .asset import AssetGrantedSerializer
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'NodeSerializer', "NodeGrantedSerializer", "NodeAddChildrenSerializer",
|
'NodeSerializer', "NodeGrantedSerializer", "NodeAddChildrenSerializer",
|
||||||
"NodeAssetsSerializer", "NodeCurrentSerializer",
|
"NodeAssetsSerializer",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -80,12 +80,6 @@ class NodeSerializer(serializers.ModelSerializer):
|
||||||
return fields
|
return fields
|
||||||
|
|
||||||
|
|
||||||
class NodeCurrentSerializer(NodeSerializer):
|
|
||||||
@staticmethod
|
|
||||||
def get_assets_amount(obj):
|
|
||||||
return obj.get_assets().count()
|
|
||||||
|
|
||||||
|
|
||||||
class NodeAssetsSerializer(serializers.ModelSerializer):
|
class NodeAssetsSerializer(serializers.ModelSerializer):
|
||||||
assets = serializers.PrimaryKeyRelatedField(many=True, queryset=Asset.objects.all())
|
assets = serializers.PrimaryKeyRelatedField(many=True, queryset=Asset.objects.all())
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ function initTree2() {
|
||||||
};
|
};
|
||||||
|
|
||||||
var zNodes = [];
|
var zNodes = [];
|
||||||
$.get("{% url 'api-assets:node-list' %}?show_current_asset=1", function(data, status){
|
$.get("{% url 'api-assets:node-list' %}", function(data, status){
|
||||||
$.each(data, function (index, value) {
|
$.each(data, function (index, value) {
|
||||||
value["pId"] = value["parent"];
|
value["pId"] = value["parent"];
|
||||||
{#value["open"] = true;#}
|
{#value["open"] = true;#}
|
||||||
|
|
|
@ -399,8 +399,7 @@ function initTree() {
|
||||||
};
|
};
|
||||||
|
|
||||||
var zNodes = [];
|
var zNodes = [];
|
||||||
var query_params = {'show_current_asset': getCookie('show_current_asset')};
|
$.get("{% url 'api-assets:node-list' %}", function(data, status){
|
||||||
$.get("{% url 'api-assets:node-list' %}", query_params, function(data, status){
|
|
||||||
$.each(data, function (index, value) {
|
$.each(data, function (index, value) {
|
||||||
value["pId"] = value["parent"];
|
value["pId"] = value["parent"];
|
||||||
if (value["key"] === "0") {
|
if (value["key"] === "0") {
|
||||||
|
@ -436,7 +435,7 @@ $(document).ready(function(){
|
||||||
initTable();
|
initTable();
|
||||||
initTree();
|
initTree();
|
||||||
|
|
||||||
if(getCookie('show_current_asset') === 'yes'){
|
if(getCookie('show_current_asset') === '1'){
|
||||||
$('#show_all_asset').css('display', 'inline-block');
|
$('#show_all_asset').css('display', 'inline-block');
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
@ -564,7 +563,7 @@ $(document).ready(function(){
|
||||||
hideRMenu();
|
hideRMenu();
|
||||||
$(this).css('display', 'none');
|
$(this).css('display', 'none');
|
||||||
$('#show_all_asset').css('display', 'inline-block');
|
$('#show_all_asset').css('display', 'inline-block');
|
||||||
setCookie('show_current_asset', 'yes');
|
setCookie('show_current_asset', '1');
|
||||||
location.reload();
|
location.reload();
|
||||||
})
|
})
|
||||||
.on('click', '.btn-show-all-asset', function(){
|
.on('click', '.btn-show-all-asset', function(){
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
if grep -q 'source ~/.autoenv/activate.sh' ~/.bashrc; then
|
if grep -q 'source /opt/autoenv/activate.sh' ~/.bashrc; then
|
||||||
echo -e "\033[31m 正在自动载入 python 环境 \033[0m"
|
echo -e "\033[31m 正在自动载入 python 环境 \033[0m"
|
||||||
else
|
else
|
||||||
echo -e "\033[31m 不支持自动升级,请参考 http://docs.jumpserver.org/zh/docs/upgrade.html 手动升级 \033[0m"
|
echo -e "\033[31m 不支持自动升级,请参考 http://docs.jumpserver.org/zh/docs/upgrade.html 手动升级 \033[0m"
|
||||||
|
@ -40,5 +40,6 @@ git pull && pip install -r requirements/requirements.txt && cd utils && sh make_
|
||||||
cd .. && ./jms start all -d
|
cd .. && ./jms start all -d
|
||||||
echo -e "\033[31m 请检查jumpserver是否启动成功 \033[0m"
|
echo -e "\033[31m 请检查jumpserver是否启动成功 \033[0m"
|
||||||
echo -e "\033[31m 备份文件存放于$jumpserver_backup目录 \033[0m"
|
echo -e "\033[31m 备份文件存放于$jumpserver_backup目录 \033[0m"
|
||||||
|
stty erase ^?
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|
Loading…
Reference in New Issue