perf: 修改 platforms

pull/10232/head
ibuler 2 years ago
parent faff0cd20a
commit ce38b2263c

@ -0,0 +1,52 @@
import difflib
import json
import sys
def diff_list(f1, f2):
with open(f1) as f:
data1 = json.load(f)
data1_mapper = {
d['name']: d for d in data1
}
with open(f2) as f:
data2 = json.load(f)
data2_mapper = {
d['name']: d for d in data2
}
d1_names = set(data1_mapper.keys())
d2_names = set(data2_mapper.keys())
diff_names = d1_names - d2_names
if diff_names:
print("Diff Names1: ", diff_names)
diff_names = d2_names - d1_names
if diff_names:
print("Diff Names2: ", diff_names)
for name, data in data1_mapper.items():
if name not in data2_mapper:
continue
data2 = data2_mapper[name]
print("Diff: ", name)
diff = difflib.unified_diff(
json.dumps(data, indent=4, sort_keys=True).splitlines(),
json.dumps(data2, indent=4, sort_keys=True).splitlines()
)
print('\n'.join(diff))
print()
if __name__ == '__main__':
if len(sys.argv) != 3:
print('Usage: python diff.py file1 file2')
sys.exit(1)
f1 = sys.argv[1]
f2 = sys.argv[2]
diff = diff_list(f1, f2)

@ -1,3 +1,4 @@
import json
from collections import defaultdict from collections import defaultdict
from copy import deepcopy from copy import deepcopy
@ -302,20 +303,20 @@ class AllTypes(ChoicesMixin):
if platform_cls is None: if platform_cls is None:
platform_cls = cls platform_cls = cls
print("\n\tCreate internal platforms") # print("\n\tCreate internal platforms")
for category, type_cls in cls.category_types(): for category, type_cls in cls.category_types():
print("\t## Category: {}".format(category.label)) # print("\t## Category: {}".format(category.label))
data = type_cls.internal_platforms() data = type_cls.internal_platforms()
for tp, platform_datas in data.items(): for tp, platform_datas in data.items():
print("\t >> Type: {}".format(tp.label)) # print("\t >> Type: {}".format(tp.label))
default_platform_data = cls.get_type_default_platform(category, tp) default_platform_data = cls.get_type_default_platform(category, tp)
default_automation = default_platform_data.pop('automation', {}) default_automation = default_platform_data.pop('automation', {})
default_protocols = default_platform_data.pop('protocols', []) default_protocols = default_platform_data.pop('protocols', [])
for d in platform_datas: for d in platform_datas:
name = d['name'] name = d['name']
print("\t - Platform: {}".format(name)) # print("\t - Platform: {}".format(name))
_automation = d.pop('automation', {}) _automation = d.pop('automation', {})
_protocols = d.pop('_protocols', []) _protocols = d.pop('_protocols', [])
_protocols_setting = d.pop('protocols_setting', {}) _protocols_setting = d.pop('protocols_setting', {})
@ -335,7 +336,8 @@ class AllTypes(ChoicesMixin):
'automation': {**default_automation, **_automation}, 'automation': {**default_automation, **_automation},
'protocols': protocols_data 'protocols': protocols_data
} }
cls.create_or_update_by_platform_data(platform_data, platform_cls=platform_cls) print(json.dumps(platform_data, indent=4))
# cls.create_or_update_by_platform_data(platform_data, platform_cls=platform_cls)
@classmethod @classmethod
def update_user_create_platforms(cls, platform_cls): def update_user_create_platforms(cls, platform_cls):

@ -2,8 +2,6 @@
from django.db import migrations, models from django.db import migrations, models
from assets.const import AllTypes
def migrate_platform_charset(apps, schema_editor): def migrate_platform_charset(apps, schema_editor):
platform_model = apps.get_model('assets', 'Platform') platform_model = apps.get_model('assets', 'Platform')
@ -25,9 +23,46 @@ def migrate_platform_protocol_primary(apps, schema_editor):
p.save() p.save()
def migrate_internal_platforms(apps, schema_editor): def migrate_winrm_for_win(apps, *args):
platform_cls = apps.get_model('assets', 'Platform')
windows_name = ['Windows', 'Windows-TLS', 'Windows-RDP']
windows = platform_cls.objects.filter(name__in=windows_name)
for platform in windows:
if platform.protocols.filter(name='winrm').exists():
continue
data = {
'name': 'winrm',
'port': 5985,
'primary': False,
'public': False,
'required': False,
'default': False,
'setting': {"use_ssl": False}
}
platform.protocols.create(**data)
def migrate_device_platform_automation(apps, *args):
platform_cls = apps.get_model('assets', 'Platform') platform_cls = apps.get_model('assets', 'Platform')
AllTypes.create_or_update_internal_platforms(platform_cls) names = ['General', 'Cisco', 'H3C', 'Huawei']
platforms = platform_cls.objects.filter(name__in=names, category='device')
for platform in platforms:
automation = getattr(platform, 'automation', None)
if not automation:
continue
automation.ansible_config = {
"ansible_connection": "local",
"first_connect_delay": 0.5,
}
automation.ansible_enable = True
automation.change_secret_enabled = True
automation.change_secret_method = "change_secret_by_ssh"
automation.ping_enabled = True
automation.ping_method = "ping_by_ssh"
automation.verify_account_enabled = True
automation.verify_account_method = "verify_account_by_ssh"
automation.save()
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -48,4 +83,6 @@ class Migration(migrations.Migration):
), ),
migrations.RunPython(migrate_platform_charset), migrations.RunPython(migrate_platform_charset),
migrations.RunPython(migrate_platform_protocol_primary), migrations.RunPython(migrate_platform_protocol_primary),
migrations.RunPython(migrate_winrm_for_win),
migrations.RunPython(migrate_device_platform_automation),
] ]

Loading…
Cancel
Save