mirror of https://github.com/jumpserver/jumpserver
parent
c2d5928273
commit
86fcd3c251
@ -0,0 +1,72 @@
|
|||||||
|
# Generated by Jiangjie.Bai on 2020-12-01 10:47
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
from django.db.models import Q
|
||||||
|
|
||||||
|
default_node_value = 'Default' # Always
|
||||||
|
old_default_node_key = '0' # Version <= 1.4.3
|
||||||
|
new_default_node_key = '1' # Version >= 1.4.4
|
||||||
|
|
||||||
|
|
||||||
|
def compute_parent_key(key):
|
||||||
|
try:
|
||||||
|
return key[:key.rindex(':')]
|
||||||
|
except ValueError:
|
||||||
|
return ''
|
||||||
|
|
||||||
|
|
||||||
|
def migrate_default_node_key(apps, schema_editor):
|
||||||
|
""" 将已经存在的Default节点的key从0修改为1 """
|
||||||
|
# 1.4.3版本中Default节点的key为0
|
||||||
|
print('')
|
||||||
|
Node = apps.get_model('assets', 'Node')
|
||||||
|
Asset = apps.get_model('assets', 'Asset')
|
||||||
|
|
||||||
|
# key为0的节点
|
||||||
|
old_default_node = Node.objects.filter(key=old_default_node_key, value=default_node_value).first()
|
||||||
|
if not old_default_node:
|
||||||
|
print(f'Check old default node `key={old_default_node_key} value={default_node_value}` not exists')
|
||||||
|
return
|
||||||
|
print(f'Check old default node `key={old_default_node_key} value={default_node_value}` exists')
|
||||||
|
# key为1的节点
|
||||||
|
new_default_node = Node.objects.filter(key=new_default_node_key, value=default_node_value).first()
|
||||||
|
if new_default_node:
|
||||||
|
print(f'Check new default node `key={new_default_node_key} value={default_node_value}` exists')
|
||||||
|
all_assets = Asset.objects.filter(
|
||||||
|
Q(nodes__key__startswith=f'{new_default_node_key}:') | Q(nodes__key=new_default_node_key)
|
||||||
|
).distinct()
|
||||||
|
if all_assets:
|
||||||
|
print(f'Check new default node has assets (count: {len(all_assets)})')
|
||||||
|
return
|
||||||
|
all_children = Node.objects.filter(Q(key__startswith=f'{new_default_node_key}:'))
|
||||||
|
if all_children:
|
||||||
|
print(f'Check new default node has children nodes (count: {len(all_children)})')
|
||||||
|
return
|
||||||
|
print(f'Check new default node not has assets and children nodes, delete it.')
|
||||||
|
new_default_node.delete()
|
||||||
|
# 执行修改
|
||||||
|
print(f'Modify old default node key from `{old_default_node_key}` to `{new_default_node_key}`')
|
||||||
|
nodes = Node.objects.filter(
|
||||||
|
Q(key__istartswith=f'{old_default_node_key}:') | Q(key=old_default_node_key)
|
||||||
|
)
|
||||||
|
for node in nodes:
|
||||||
|
old_key = node.key
|
||||||
|
key_list = old_key.split(':', maxsplit=1)
|
||||||
|
key_list[0] = new_default_node_key
|
||||||
|
new_key = ':'.join(key_list)
|
||||||
|
node.key = new_key
|
||||||
|
node.parent_key = compute_parent_key(node.key)
|
||||||
|
# 批量更新
|
||||||
|
Node.objects.bulk_update(nodes, ['key', 'parent_key'])
|
||||||
|
print('Bulk update key and parent_key')
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('assets', '0062_auto_20201117_1938'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RunPython(migrate_default_node_key)
|
||||||
|
]
|
Loading…
Reference in new issue