mirror of https://github.com/jumpserver/jumpserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.3 KiB
49 lines
1.3 KiB
6 years ago
|
#!/usr/bin/python
|
||
|
import os
|
||
|
import sys
|
||
|
import django
|
||
|
|
||
|
if os.path.exists('../apps'):
|
||
|
sys.path.insert(0, '../apps')
|
||
|
elif os.path.exists('./apps'):
|
||
|
sys.path.insert(0, './apps')
|
||
|
|
||
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "jumpserver.settings")
|
||
|
django.setup()
|
||
|
|
||
|
from assets.models import Node, Asset
|
||
|
from common.utils import get_object_or_none
|
||
|
from django.db import transaction
|
||
|
|
||
|
src_node = Node.objects.get(key="0:1")
|
||
|
target_node = Node.objects.get(key="2:1")
|
||
|
|
||
|
def sync_node(src, target, cut=False):
|
||
|
assets = src.get_assets()
|
||
|
# 同步本节点资产
|
||
|
for asset in assets:
|
||
|
if cut:
|
||
|
src.assets.remove(asset)
|
||
|
asset.org_id = target.org_id
|
||
|
asset.save()
|
||
|
new_asset = asset
|
||
|
else:
|
||
|
new_asset = get_object_or_none(Asset, hostname=asset.hostname, org_id=target.org_id)
|
||
|
if new_asset is None:
|
||
|
asset.id = None
|
||
|
asset.org_id = target.org_id
|
||
|
asset.save()
|
||
|
new_asset = asset
|
||
|
target.assets.add(new_asset)
|
||
|
# 同步子节点资产
|
||
|
for child in src.get_children():
|
||
|
node_new = target.create_child(child.value)
|
||
|
node_new.org_id = target.org_id
|
||
|
node_new.save()
|
||
|
sync_node(child, node_new)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
with transaction.atomic():
|
||
|
sync_node(src_node, target_node)
|
||
|
|