mirror of https://github.com/jumpserver/jumpserver
				
				
				
			
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
| #!/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.name, 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)
 | |
| 
 |