From ba19b9edc5e5f24e1538c96d7543e83f8ec2359f Mon Sep 17 00:00:00 2001 From: Megha Agarwal Date: Mon, 22 Nov 2021 10:33:07 +0530 Subject: [PATCH 01/14] avi-mapping --- .../nsxt_converter/pools_converter.py | 40 +++++++++++++++++++ .../nsxt_converter/profiles_converter.py | 40 +++++++++++++++++++ .../nsxt_converter/vs_converter.py | 0 3 files changed, 80 insertions(+) create mode 100644 python/avi/migrationtools/nsxt_converter/pools_converter.py create mode 100644 python/avi/migrationtools/nsxt_converter/profiles_converter.py create mode 100644 python/avi/migrationtools/nsxt_converter/vs_converter.py diff --git a/python/avi/migrationtools/nsxt_converter/pools_converter.py b/python/avi/migrationtools/nsxt_converter/pools_converter.py new file mode 100644 index 0000000000..abcd503bb7 --- /dev/null +++ b/python/avi/migrationtools/nsxt_converter/pools_converter.py @@ -0,0 +1,40 @@ +from avi.migrationtools.nsxt_converter import nsxt_client as nsx_client_util, profiles_converter +def update_alb_type(lb_pl, alb_pl): + if lb_pl['algorithm']=='ROUND_ROBIN': + alb_pl['lb_algorithm'] = 'LB_ALGORITHM_ROUND_ROBIN' + elif lb_pl['algorithm']=='LEAST_CONNECTION': + alb_pl['lb_algorithm'] = 'LB_ALGORITHM_LEAST_CONNECTION' + elif lb_pl['algorithm']== 'IP_HASH': + alb_pl['lb_algorithm'] = 'LB_ALGORITHM_CONSISTENT_HASH_SOURCE_IP_ADDRESS' + alb_pl['min_servers_up']=lb_pl['min_active_members'] + alb_pl['max_concurrent_connections']=lb_pl.get('max_concurrent_connections_per_server') + alb_pl['health_monitor_refs']=lb_pl.get('active_monitor_paths') + alb_pl['servers'] = dict( + ip=dict( + + )) + + for member in lb_pl['members']: + alb_pl['servers']['enabled']=member['admin_state'] + alb_pl['servers']['ip']['addr']=member['ip_address'] + alb_pl['servers']['port']=member['port'] + alb_pl['servers']['ratio']=member['weight'] + alb_pl['servers']['description']=member['display_name'] + + + + alb_pl['ConnPoolProperties']=dict( + upstream_connpool_server_max_cache=lb_pl['tcp_multiplexing_number'] + + ) + + + +def convert(alb_config, nsx_lb_config): + alb_config['Pool'] = list() + for lb_pl in nsx_lb_config['LbPools']: + alb_pl=dict( + name=lb_pl['display_name'] + ) + update_alb_type(lb_pl, alb_pl) + alb_config['Pool'].append(alb_pl) diff --git a/python/avi/migrationtools/nsxt_converter/profiles_converter.py b/python/avi/migrationtools/nsxt_converter/profiles_converter.py new file mode 100644 index 0000000000..f2da092d27 --- /dev/null +++ b/python/avi/migrationtools/nsxt_converter/profiles_converter.py @@ -0,0 +1,40 @@ +from avi.migrationtools.nsxt_converter import nsxt_client as nsx_client_util +def update_alb_type(lb_pr, alb_pr): + if lb_pr['resource_type'] == 'LBHttpProfile': + alb_pr['type'] = 'APPLICATION_PROFILE_TYPE_HTTP' + + alb_pr['http_profile'] = dict( + xff_enabled=lb_pr.get('xForwardedFor'), + http_to_https=lb_pr.get('httpRedirectToHttps'), + keepalive_timeout=lb_pr.get('idle_timeout'), + client_max_header_size=lb_pr['request_header_size'], + client_max_body_size=lb_pr.get('requestBodySize') + ) + elif lb_pr['resource_type'] == 'LBFastTcpProfile': + alb_pr['profile']=dict( + type = 'APPLICATION_PROFILE_TYPE_TCP', + tcp_fast_path_profile=dict( + session_idle_timeout=lb_pr['idle_timeout']) + ) + + elif lb_pr['resource_type'] == 'LBFastUdpProfile': + alb_pr['profile'] = dict( + type='APPLICATION_PROFILE_TYPE_UDP', + udp_fast_path_profile=dict( + session_idle_timeout=lb_pr['idle_timeout'] + + ) + ) + +def convert(alb_config, nsx_lb_config): + alb_config['ApplicationProfile'] = list() + alb_config['NetworkProfile'] = list() + for lb_pr in nsx_lb_config['LbAppProfiles']: + alb_pr=dict( + name=lb_pr['display_name'] + ) + update_alb_type(lb_pr, alb_pr) + if lb_pr['resource_type'] == 'LBHttpProfile': + alb_config['ApplicationProfile'].append(alb_pr) + else: + alb_config['NetworkProfile'].append(alb_pr) diff --git a/python/avi/migrationtools/nsxt_converter/vs_converter.py b/python/avi/migrationtools/nsxt_converter/vs_converter.py new file mode 100644 index 0000000000..e69de29bb2 From e261f765601a18ce8e405a0ff91b1d79fe6c8d29 Mon Sep 17 00:00:00 2001 From: Megha Agarwal Date: Tue, 23 Nov 2021 12:05:44 +0530 Subject: [PATCH 02/14] code for mapping --- .../nsxt_converter/conversion_util.py | 0 .../nsxt_converter/nsxt_config_converter.py | 10 +++++++- .../nsxt_converter/nsxt_util.py | 3 +++ .../nsxt_converter/vs_converter.py | 23 +++++++++++++++++++ 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 python/avi/migrationtools/nsxt_converter/conversion_util.py diff --git a/python/avi/migrationtools/nsxt_converter/conversion_util.py b/python/avi/migrationtools/nsxt_converter/conversion_util.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/python/avi/migrationtools/nsxt_converter/nsxt_config_converter.py b/python/avi/migrationtools/nsxt_converter/nsxt_config_converter.py index 0bc6516cbf..97fb29da1c 100644 --- a/python/avi/migrationtools/nsxt_converter/nsxt_config_converter.py +++ b/python/avi/migrationtools/nsxt_converter/nsxt_config_converter.py @@ -1,7 +1,10 @@ import sys -from avi.migrationtools.nsxt_converter import nsxt_client as nsx_client_util + +from avi.migrationtools.ace_converter import pool_converter +from avi.migrationtools.nsxt_converter import nsxt_client as nsx_client_util, pools_converter, vs_converter from avi.migrationtools.nsxt_converter import monitor_converter +from avi.migrationtools.nsxt_converter import profiles_converter from vmware.vapi.bindings.struct import PrettyPrinter from com.vmware.vapi.std.errors_client import NotFound from com.vmware.nsx.loadbalancer_client import Pools @@ -28,13 +31,18 @@ def convert(nsx_ip, nsx_un, nsx_pw, nsx_port, output_dir): alb_config = dict() # Result Config monitor_converter.convert(alb_config, nsx_lb_config) + profiles_converter.convert(alb_config, nsx_lb_config) + pools_converter.convert(alb_config, nsx_lb_config) + vs_converter.convert(alb_config,nsx_lb_config) output_path = output_dir + os.path.sep + nsx_ip + os.path.sep + "output" + print(output_path) if not os.path.exists(output_path): os.makedirs(output_path) output_config = output_path + os.path.sep + "avi_config.json" with open(output_config, "w", encoding='utf-8') as text_file: json.dump(alb_config, text_file, indent=4) + pp = PrettyPrinter() pp.pprint(alb_config) \ No newline at end of file diff --git a/python/avi/migrationtools/nsxt_converter/nsxt_util.py b/python/avi/migrationtools/nsxt_converter/nsxt_util.py index 2f87478867..b0c4fd0e2c 100644 --- a/python/avi/migrationtools/nsxt_converter/nsxt_util.py +++ b/python/avi/migrationtools/nsxt_converter/nsxt_util.py @@ -14,6 +14,9 @@ def get_nsx_config(self): nsx_lb_config["LBServices"] = self.nsx_api_client.infra.LbServices.list().to_dict().get("results", []) nsx_lb_config["LbMonitorProfiles"] = self.nsx_api_client.infra.LbMonitorProfiles.list().to_dict().get("results", []) nsx_lb_config["LbPools"] = self.nsx_api_client.infra.LbPools.list().to_dict().get("results", []) + nsx_lb_config["LbAppProfiles"] = self.nsx_api_client.infra.LbAppProfiles.list().to_dict().get("results", []) + nsx_lb_config["LBVirtualServers"] = self.nsx_api_client.infra.LbVirtualServers.list().to_dict().get("results", []) + return nsx_lb_config if __name__ == "__main__": diff --git a/python/avi/migrationtools/nsxt_converter/vs_converter.py b/python/avi/migrationtools/nsxt_converter/vs_converter.py index e69de29bb2..1b19761b41 100644 --- a/python/avi/migrationtools/nsxt_converter/vs_converter.py +++ b/python/avi/migrationtools/nsxt_converter/vs_converter.py @@ -0,0 +1,23 @@ + +def update_alb_type(lb_vs, alb_vs): + alb_vs['enabled'] = lb_vs['enabled'] + alb_vs['vip']=lb_vs.get('ip_address') + alb_vs['services']=dict( + port=lb_vs['ports'][0] + ) + alb_vs['pool_ref']=lb_vs['pool_path'] + alb_vs['application_profile_ref']=lb_vs['application_profile_path'] + alb_vs['ssl_profile_ref']=lb_vs.get('client_ssl_profile_binding') + +def convert(alb_config, nsx_lb_config): + alb_config['VirtualService'] = list() + + for lb_vs in nsx_lb_config['LBVirtualServers']: + alb_vs = dict( + name=lb_vs['display_name'], + + ) + + update_alb_type(lb_vs, alb_vs) + + alb_config['VirtualService'].append(alb_vs) From 1cba5d1584c423b34ca5f1c973196c4fadae840b Mon Sep 17 00:00:00 2001 From: Megha Agarwal Date: Tue, 23 Nov 2021 12:24:51 +0530 Subject: [PATCH 03/14] code for review avi-mapping --- .../nsxt_converter/conversion_util.py | 30 +++++++++++++++++ .../nsxt_converter/monitor_converter.py | 11 +++++-- .../nsxt_converter/nsxt_config_converter.py | 10 +++--- .../nsxt_converter/nsxt_converter.py | 3 +- .../nsxt_converter/nsxt_util.py | 2 +- .../nsxt_converter/pools_converter.py | 33 +++++++++++++------ .../nsxt_converter/profiles_converter.py | 13 ++++++-- .../nsxt_converter/vs_converter.py | 20 ++++++++--- 8 files changed, 96 insertions(+), 26 deletions(-) diff --git a/python/avi/migrationtools/nsxt_converter/conversion_util.py b/python/avi/migrationtools/nsxt_converter/conversion_util.py index e69de29bb2..9da6b62859 100644 --- a/python/avi/migrationtools/nsxt_converter/conversion_util.py +++ b/python/avi/migrationtools/nsxt_converter/conversion_util.py @@ -0,0 +1,30 @@ +def get_obj_url_uuid(path,unique_id): + url = path + "-" +unique_id + uuid = url.split('/')[-1] + return url,uuid +def get_tenant_ref(name): + tenant="admin" + if name and name.startswith('/'): + parts = name.split('/', 2) + tenant = parts[1] + if not parts[2]: + LOG.warning('Invalid tenant ref : %s' % name) + elif name and '/' in name: + parts = name.split('/') + # Changed the index to get the tenant and name in case of + # prefixed name + tenant = parts[-2] + if tenant.lower() == 'common': + tenant = 'admin' + if '/' in name: + name = name.split('/')[1] + if ' ' in tenant: + tenant = tenant.split(' ')[-1] + return tenant,name +def get_object_ref( object_name, object_type, tenant='admin', + cloud_name='Default-Cloud', prefix=None): + if object_type == 'tenant': + ref = '/api/tenant/?name=%s' %(object_name) + elif object_type == 'cloud': + ref = '/api/%s/?tenant=admin&name=%s' % (object_type, object_name) + return ref \ No newline at end of file diff --git a/python/avi/migrationtools/nsxt_converter/monitor_converter.py b/python/avi/migrationtools/nsxt_converter/monitor_converter.py index bcfab16f46..9380d377ee 100644 --- a/python/avi/migrationtools/nsxt_converter/monitor_converter.py +++ b/python/avi/migrationtools/nsxt_converter/monitor_converter.py @@ -1,5 +1,8 @@ import com.vmware.nsx_policy.model_client as model_client +from avi.migrationtools.nsxt_converter import conversion_util + + def get_alb_response_codes(response_codes): if not response_codes: return None @@ -48,9 +51,11 @@ def update_alb_type(lb_hm, alb_hm): alb_hm['type'] = 'HEALTH_MONITOR_TCP' elif lb_hm['resource_type'] == 'LbUdpMonitorProfile': alb_hm['type'] = 'HEALTH_MONITOR_UDP' + alb_hm['url'], alb_hm['uuid'] = conversion_util.get_obj_url_uuid(lb_hm['path'], lb_hm['unique_id']) + tenant = conversion_util.get_tenant_ref(alb_hm['url']) + alb_hm['tenant_ref'] = conversion_util.get_object_ref('admin', 'tenant') - -def convert(alb_config, nsx_lb_config): +def convert(alb_config, nsx_lb_config,cloud_name): alb_config['HealthMonitor'] = list() for lb_hm in nsx_lb_config['LbMonitorProfiles']: @@ -64,5 +69,5 @@ def convert(alb_config, nsx_lb_config): monitor_port=lb_hm.get('monitor_port', None), ) update_alb_type(lb_hm, alb_hm) - + alb_hm['cloud_ref'] = conversion_util.get_object_ref(cloud_name, 'cloud') alb_config['HealthMonitor'].append(alb_hm) diff --git a/python/avi/migrationtools/nsxt_converter/nsxt_config_converter.py b/python/avi/migrationtools/nsxt_converter/nsxt_config_converter.py index 97fb29da1c..025f1aeb67 100644 --- a/python/avi/migrationtools/nsxt_converter/nsxt_config_converter.py +++ b/python/avi/migrationtools/nsxt_converter/nsxt_config_converter.py @@ -17,7 +17,7 @@ import json -def convert(nsx_ip, nsx_un, nsx_pw, nsx_port, output_dir): +def convert(nsx_ip, nsx_un, nsx_pw, nsx_port, output_dir,cloud_name='Default-Cloud'): nsx_util = NSXUtil(nsx_un, nsx_pw, nsx_ip, nsx_port) nsx_lb_config = nsx_util.get_nsx_config() input_path = output_dir + os.path.sep + nsx_ip + os.path.sep + "input" @@ -30,10 +30,10 @@ def convert(nsx_ip, nsx_un, nsx_pw, nsx_port, output_dir): alb_config = dict() # Result Config - monitor_converter.convert(alb_config, nsx_lb_config) - profiles_converter.convert(alb_config, nsx_lb_config) - pools_converter.convert(alb_config, nsx_lb_config) - vs_converter.convert(alb_config,nsx_lb_config) + monitor_converter.convert(alb_config, nsx_lb_config,cloud_name) + profiles_converter.convert(alb_config, nsx_lb_config,cloud_name) + pools_converter.convert(alb_config, nsx_lb_config,cloud_name) + vs_converter.convert(alb_config,nsx_lb_config,cloud_name) output_path = output_dir + os.path.sep + nsx_ip + os.path.sep + "output" print(output_path) diff --git a/python/avi/migrationtools/nsxt_converter/nsxt_converter.py b/python/avi/migrationtools/nsxt_converter/nsxt_converter.py index f5e9d2246f..96f120f2e6 100644 --- a/python/avi/migrationtools/nsxt_converter/nsxt_converter.py +++ b/python/avi/migrationtools/nsxt_converter/nsxt_converter.py @@ -6,7 +6,7 @@ def conver_lb_config(args): output_file_path = args.output_file_path if args.output_file_path else 'output' - nsxt_config_converter.convert(args.nsxt_ip, args.nsxt_user, args.nsxt_passord, args.nsxt_port, output_file_path) + nsxt_config_converter.convert(args.nsxt_ip, args.nsxt_user, args.nsxt_passord, args.nsxt_port, output_file_path,args.cloud_name) @@ -33,6 +33,7 @@ def conver_lb_config(args): parser.add_argument('-o', '--output_file_path', help='Folder path for output files to be created in', ) + parser.add_argument('--cloud_name', default='Default_Cloud',help='cloud name for auto upload') args = parser.parse_args() conver_lb_config(args) diff --git a/python/avi/migrationtools/nsxt_converter/nsxt_util.py b/python/avi/migrationtools/nsxt_converter/nsxt_util.py index b0c4fd0e2c..7122c3377c 100644 --- a/python/avi/migrationtools/nsxt_converter/nsxt_util.py +++ b/python/avi/migrationtools/nsxt_converter/nsxt_util.py @@ -22,4 +22,4 @@ def get_nsx_config(self): if __name__ == "__main__": nsx_util = NSXUtil('admin', 'Admin!23Admin', '10.168.204.70', '443') nsx_lb_config = nsx_util.get_nsx_config() - print(nsx_lb_config) \ No newline at end of file + print(nsx_lb_config) diff --git a/python/avi/migrationtools/nsxt_converter/pools_converter.py b/python/avi/migrationtools/nsxt_converter/pools_converter.py index abcd503bb7..b482acd79a 100644 --- a/python/avi/migrationtools/nsxt_converter/pools_converter.py +++ b/python/avi/migrationtools/nsxt_converter/pools_converter.py @@ -1,5 +1,8 @@ -from avi.migrationtools.nsxt_converter import nsxt_client as nsx_client_util, profiles_converter +from avi.migrationtools.nsxt_converter import nsxt_client as nsx_client_util, profiles_converter, conversion_util + + def update_alb_type(lb_pl, alb_pl): + if lb_pl['algorithm']=='ROUND_ROBIN': alb_pl['lb_algorithm'] = 'LB_ALGORITHM_ROUND_ROBIN' elif lb_pl['algorithm']=='LEAST_CONNECTION': @@ -13,28 +16,38 @@ def update_alb_type(lb_pl, alb_pl): ip=dict( )) - - for member in lb_pl['members']: - alb_pl['servers']['enabled']=member['admin_state'] - alb_pl['servers']['ip']['addr']=member['ip_address'] - alb_pl['servers']['port']=member['port'] - alb_pl['servers']['ratio']=member['weight'] - alb_pl['servers']['description']=member['display_name'] - + if(lb_pl.get('members')): + for member in lb_pl.get('members'): + alb_pl['servers']['enabled']=member['admin_state'] + alb_pl['servers']['ip']['addr']=member['ip_address'] + alb_pl['servers']['port']=member['port'] + alb_pl['servers']['ratio']=member['weight'] + alb_pl['servers']['description']=member['display_name'] + #todo for snat_translation to preserve_client_ip in application profile alb_pl['ConnPoolProperties']=dict( upstream_connpool_server_max_cache=lb_pl['tcp_multiplexing_number'] ) + if(lb_pl.get('member_group')): + alb_pl['nsx_membergroup']=dict( + nsx_securitygroup=lb_pl['member_group']['group_path'] + ) + if(lb_pl['member_group']['port']): + alb_pl['default_server_port']=lb_pl['member_group']['port'] + alb_pl['url'], alb_pl['uuid'] = conversion_util.get_obj_url_uuid(lb_pl['path'], lb_pl['unique_id']) + tenant = conversion_util.get_tenant_ref(alb_pl['url']) + alb_pl['tenant_ref'] = conversion_util.get_object_ref('admin', 'tenant') -def convert(alb_config, nsx_lb_config): +def convert(alb_config, nsx_lb_config,cloud_name): alb_config['Pool'] = list() for lb_pl in nsx_lb_config['LbPools']: alb_pl=dict( name=lb_pl['display_name'] ) update_alb_type(lb_pl, alb_pl) + alb_pl['cloud_ref'] = conversion_util.get_object_ref(cloud_name, 'cloud') alb_config['Pool'].append(alb_pl) diff --git a/python/avi/migrationtools/nsxt_converter/profiles_converter.py b/python/avi/migrationtools/nsxt_converter/profiles_converter.py index f2da092d27..011589b988 100644 --- a/python/avi/migrationtools/nsxt_converter/profiles_converter.py +++ b/python/avi/migrationtools/nsxt_converter/profiles_converter.py @@ -1,5 +1,11 @@ -from avi.migrationtools.nsxt_converter import nsxt_client as nsx_client_util +from avi.migrationtools.nsxt_converter import nsxt_client as nsx_client_util, conversion_util + + def update_alb_type(lb_pr, alb_pr): + alb_pr['url'],alb_pr['uuid']=conversion_util.get_obj_url_uuid(lb_pr['path'],lb_pr['unique_id']) + tenant=conversion_util.get_tenant_ref(alb_pr['url']) + alb_pr['tenant_ref']=conversion_util.get_object_ref('admin','tenant') + if lb_pr['resource_type'] == 'LBHttpProfile': alb_pr['type'] = 'APPLICATION_PROFILE_TYPE_HTTP' @@ -26,7 +32,7 @@ def update_alb_type(lb_pr, alb_pr): ) ) -def convert(alb_config, nsx_lb_config): +def convert(alb_config, nsx_lb_config,cloud_name): alb_config['ApplicationProfile'] = list() alb_config['NetworkProfile'] = list() for lb_pr in nsx_lb_config['LbAppProfiles']: @@ -35,6 +41,9 @@ def convert(alb_config, nsx_lb_config): ) update_alb_type(lb_pr, alb_pr) if lb_pr['resource_type'] == 'LBHttpProfile': + alb_pr['cloud_ref'] = conversion_util.get_object_ref(cloud_name, 'cloud') alb_config['ApplicationProfile'].append(alb_pr) + else: + alb_pr['cloud_ref'] = conversion_util.get_object_ref(cloud_name, 'cloud') alb_config['NetworkProfile'].append(alb_pr) diff --git a/python/avi/migrationtools/nsxt_converter/vs_converter.py b/python/avi/migrationtools/nsxt_converter/vs_converter.py index 1b19761b41..c195ade233 100644 --- a/python/avi/migrationtools/nsxt_converter/vs_converter.py +++ b/python/avi/migrationtools/nsxt_converter/vs_converter.py @@ -1,23 +1,35 @@ +from avi.migrationtools.nsxt_converter import conversion_util + def update_alb_type(lb_vs, alb_vs): + alb_vs['url'], alb_vs['uuid'] = conversion_util.get_obj_url_uuid(lb_vs['path'], lb_vs['unique_id']) alb_vs['enabled'] = lb_vs['enabled'] - alb_vs['vip']=lb_vs.get('ip_address') + alb_vs['services']=dict( port=lb_vs['ports'][0] ) alb_vs['pool_ref']=lb_vs['pool_path'] alb_vs['application_profile_ref']=lb_vs['application_profile_path'] alb_vs['ssl_profile_ref']=lb_vs.get('client_ssl_profile_binding') + tenant = conversion_util.get_tenant_ref(alb_vs['url']) + alb_vs['tenant_ref'] = conversion_util.get_object_ref('admin', 'tenant') -def convert(alb_config, nsx_lb_config): +def convert(alb_config, nsx_lb_config,cloud_name): alb_config['VirtualService'] = list() - + alb_config['vsvip']=list() for lb_vs in nsx_lb_config['LBVirtualServers']: + vsvip=dict( + ip_address=dict( + addr=lb_vs['ip_address'], + type="V4" + ) + ) alb_vs = dict( name=lb_vs['display_name'], ) update_alb_type(lb_vs, alb_vs) - + alb_vs['cloud_ref'] = conversion_util.get_object_ref(cloud_name, 'cloud') alb_config['VirtualService'].append(alb_vs) + alb_config['vsvip'].append(vsvip) From ed02d2fb0fbc5f032e85d1352903332914ab48bf Mon Sep 17 00:00:00 2001 From: Megha Agarwal Date: Wed, 24 Nov 2021 16:18:46 +0530 Subject: [PATCH 04/14] Update conversion_util.py --- .../nsxt_converter/conversion_util.py | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/python/avi/migrationtools/nsxt_converter/conversion_util.py b/python/avi/migrationtools/nsxt_converter/conversion_util.py index 9da6b62859..06ea328670 100644 --- a/python/avi/migrationtools/nsxt_converter/conversion_util.py +++ b/python/avi/migrationtools/nsxt_converter/conversion_util.py @@ -17,14 +17,28 @@ def get_tenant_ref(name): if tenant.lower() == 'common': tenant = 'admin' if '/' in name: - name = name.split('/')[1] + name = name.split('/')[-1] if ' ' in tenant: tenant = tenant.split(' ')[-1] return tenant,name -def get_object_ref( object_name, object_type, tenant='admin', - cloud_name='Default-Cloud', prefix=None): +def get_object_ref( object_name, object_type, + prefix=None,cloud_name='Default-cloud'): + if prefix: + object_name = prefix + '-' + object_name if object_type == 'tenant': ref = '/api/tenant/?name=%s' %(object_name) elif object_type == 'cloud': ref = '/api/%s/?tenant=admin&name=%s' % (object_type, object_name) - return ref \ No newline at end of file + elif object_type == 'vrfcontext': + ref = '/api/%s/?tenant=admin&name=%s&cloud=%s' % ( + object_type, object_name, cloud_name) + else: + ref='/api/%s/?tenant=admin&name=%s' % (object_type,object_name ) + return ref + + + + + + + From 08fe1e0d2f3dfc2cdb08b2a71a0f71bf243e3680 Mon Sep 17 00:00:00 2001 From: Megha Agarwal Date: Wed, 24 Nov 2021 16:19:37 +0530 Subject: [PATCH 05/14] Update conversion_util.py --- .../avi/migrationtools/nsxt_converter/conversion_util.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/python/avi/migrationtools/nsxt_converter/conversion_util.py b/python/avi/migrationtools/nsxt_converter/conversion_util.py index 06ea328670..3fa830d203 100644 --- a/python/avi/migrationtools/nsxt_converter/conversion_util.py +++ b/python/avi/migrationtools/nsxt_converter/conversion_util.py @@ -35,10 +35,3 @@ def get_object_ref( object_name, object_type, else: ref='/api/%s/?tenant=admin&name=%s' % (object_type,object_name ) return ref - - - - - - - From c60462a7f39e794aaba428629c50cd7f7913d804 Mon Sep 17 00:00:00 2001 From: Megha Agarwal Date: Wed, 24 Nov 2021 16:20:20 +0530 Subject: [PATCH 06/14] Update monitor_converter.py --- .../nsxt_converter/monitor_converter.py | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/python/avi/migrationtools/nsxt_converter/monitor_converter.py b/python/avi/migrationtools/nsxt_converter/monitor_converter.py index 9380d377ee..37bf1007ca 100644 --- a/python/avi/migrationtools/nsxt_converter/monitor_converter.py +++ b/python/avi/migrationtools/nsxt_converter/monitor_converter.py @@ -32,18 +32,18 @@ def update_alb_type(lb_hm, alb_hm): if lb_hm['resource_type'] == 'LBHttpMonitorProfile': alb_hm['type'] = 'HEALTH_MONITOR_HTTP' alb_hm['http_monitor'] = dict( - http_request=lb_hm['request_url'], + http_request=lb_hm.get('request_url'), http_request_body=lb_hm.get('request_body'), http_response=lb_hm.get('response_body'), - http_response_code=get_alb_response_codes(lb_hm['response_status_codes']), + http_response_code=get_alb_response_codes(lb_hm.get('response_status_codes')), ) elif lb_hm['resource_type'] == 'LBHttpsMonitorProfile': alb_hm['type'] = 'HEALTH_MONITOR_HTTPS' alb_hm['https_monitor'] = dict( - http_request=lb_hm['request_url'], + http_request=lb_hm.get('request_url'), http_request_body=lb_hm.get('request_body'), http_response=lb_hm.get('response_body'), - http_response_code=get_alb_response_codes(lb_hm['response_status_codes']), + http_response_code=get_alb_response_codes(lb_hm.get('response_status_codes')), ) elif lb_hm['resource_type'] == 'LBIcmpMonitorProfile': alb_hm['type'] = 'HEALTH_MONITOR_PING' @@ -51,23 +51,25 @@ def update_alb_type(lb_hm, alb_hm): alb_hm['type'] = 'HEALTH_MONITOR_TCP' elif lb_hm['resource_type'] == 'LbUdpMonitorProfile': alb_hm['type'] = 'HEALTH_MONITOR_UDP' - alb_hm['url'], alb_hm['uuid'] = conversion_util.get_obj_url_uuid(lb_hm['path'], lb_hm['unique_id']) - tenant = conversion_util.get_tenant_ref(alb_hm['url']) + alb_hm['tenant_ref'] = conversion_util.get_object_ref('admin', 'tenant') -def convert(alb_config, nsx_lb_config,cloud_name): +def convert(alb_config, nsx_lb_config,cloud_name,prefix): alb_config['HealthMonitor'] = list() for lb_hm in nsx_lb_config['LbMonitorProfiles']: if lb_hm['resource_type'] == 'LBPassiveMonitorProfile': continue + if prefix: + name='%s-%s' % (prefix,lb_hm['display_name']) + else : + name=lb_hm.get('display_name') alb_hm = dict( - name=lb_hm['display_name'], - failed_checks=lb_hm['fall_count'], - receive_timeout=lb_hm['timeout'], - send_interval=lb_hm['interval'], + name=name, + failed_checks=lb_hm.get('fall_count'), + receive_timeout=lb_hm.get('timeout'), + send_interval=lb_hm.get('interval'), monitor_port=lb_hm.get('monitor_port', None), ) update_alb_type(lb_hm, alb_hm) - alb_hm['cloud_ref'] = conversion_util.get_object_ref(cloud_name, 'cloud') alb_config['HealthMonitor'].append(alb_hm) From 6b221d6c740b18b310acc06a8d89ee838e552f2f Mon Sep 17 00:00:00 2001 From: Megha Agarwal Date: Wed, 24 Nov 2021 16:23:20 +0530 Subject: [PATCH 07/14] Update pools_converter.py --- .../nsxt_converter/pools_converter.py | 36 +++++++++++-------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/python/avi/migrationtools/nsxt_converter/pools_converter.py b/python/avi/migrationtools/nsxt_converter/pools_converter.py index b482acd79a..7b98eaff70 100644 --- a/python/avi/migrationtools/nsxt_converter/pools_converter.py +++ b/python/avi/migrationtools/nsxt_converter/pools_converter.py @@ -1,7 +1,8 @@ from avi.migrationtools.nsxt_converter import nsxt_client as nsx_client_util, profiles_converter, conversion_util -def update_alb_type(lb_pl, alb_pl): + +def update_alb_type(lb_pl, alb_pl,prefix): if lb_pl['algorithm']=='ROUND_ROBIN': alb_pl['lb_algorithm'] = 'LB_ALGORITHM_ROUND_ROBIN' @@ -9,25 +10,26 @@ def update_alb_type(lb_pl, alb_pl): alb_pl['lb_algorithm'] = 'LB_ALGORITHM_LEAST_CONNECTION' elif lb_pl['algorithm']== 'IP_HASH': alb_pl['lb_algorithm'] = 'LB_ALGORITHM_CONSISTENT_HASH_SOURCE_IP_ADDRESS' - alb_pl['min_servers_up']=lb_pl['min_active_members'] + alb_pl['min_servers_up']=lb_pl.get('min_active_members') alb_pl['max_concurrent_connections']=lb_pl.get('max_concurrent_connections_per_server') - alb_pl['health_monitor_refs']=lb_pl.get('active_monitor_paths') + alb_pl['servers'] = dict( ip=dict( )) if(lb_pl.get('members')): for member in lb_pl.get('members'): - alb_pl['servers']['enabled']=member['admin_state'] - alb_pl['servers']['ip']['addr']=member['ip_address'] - alb_pl['servers']['port']=member['port'] - alb_pl['servers']['ratio']=member['weight'] - alb_pl['servers']['description']=member['display_name'] + alb_pl['servers']['enabled']=member.get('admin_state') + alb_pl['servers']['ip']['addr']=member.get('ip_address') + alb_pl['servers']['ip']['type']='V4' + alb_pl['servers']['port']=member.get('port') + alb_pl['servers']['ratio']=member.get('weight') + alb_pl['servers']['description']=member.get('display_name') #todo for snat_translation to preserve_client_ip in application profile alb_pl['ConnPoolProperties']=dict( - upstream_connpool_server_max_cache=lb_pl['tcp_multiplexing_number'] + upstream_connpool_server_max_cache=lb_pl.get('tcp_multiplexing_number') ) if(lb_pl.get('member_group')): @@ -37,17 +39,23 @@ def update_alb_type(lb_pl, alb_pl): if(lb_pl['member_group']['port']): alb_pl['default_server_port']=lb_pl['member_group']['port'] - alb_pl['url'], alb_pl['uuid'] = conversion_util.get_obj_url_uuid(lb_pl['path'], lb_pl['unique_id']) - tenant = conversion_util.get_tenant_ref(alb_pl['url']) alb_pl['tenant_ref'] = conversion_util.get_object_ref('admin', 'tenant') + if lb_pl.get('active_monitor_paths'): + tenant,name=conversion_util.get_tenant_ref(lb_pl.get('active_monitor_paths')[0]) + alb_pl['health_monitor_ref'] = conversion_util.get_object_ref(name,'healthmonitor',prefix) -def convert(alb_config, nsx_lb_config,cloud_name): +def convert(alb_config, nsx_lb_config,cloud_name,prefix): alb_config['Pool'] = list() for lb_pl in nsx_lb_config['LbPools']: - alb_pl=dict( + if prefix: + name='%s-%s' % (prefix,lb_pl['display_name']) + else : name=lb_pl['display_name'] + alb_pl=dict( + name=name ) - update_alb_type(lb_pl, alb_pl) + update_alb_type(lb_pl, alb_pl,prefix) alb_pl['cloud_ref'] = conversion_util.get_object_ref(cloud_name, 'cloud') + alb_config['Pool'].append(alb_pl) From f47d2a40ae846ace569fb01bd9bf6a6cb0514861 Mon Sep 17 00:00:00 2001 From: Megha Agarwal Date: Wed, 24 Nov 2021 16:24:32 +0530 Subject: [PATCH 08/14] Update profiles_converter.py --- .../nsxt_converter/profiles_converter.py | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/python/avi/migrationtools/nsxt_converter/profiles_converter.py b/python/avi/migrationtools/nsxt_converter/profiles_converter.py index 011589b988..264c21bcab 100644 --- a/python/avi/migrationtools/nsxt_converter/profiles_converter.py +++ b/python/avi/migrationtools/nsxt_converter/profiles_converter.py @@ -2,48 +2,49 @@ def update_alb_type(lb_pr, alb_pr): - alb_pr['url'],alb_pr['uuid']=conversion_util.get_obj_url_uuid(lb_pr['path'],lb_pr['unique_id']) - tenant=conversion_util.get_tenant_ref(alb_pr['url']) + alb_pr['tenant_ref']=conversion_util.get_object_ref('admin','tenant') if lb_pr['resource_type'] == 'LBHttpProfile': alb_pr['type'] = 'APPLICATION_PROFILE_TYPE_HTTP' alb_pr['http_profile'] = dict( - xff_enabled=lb_pr.get('xForwardedFor'), - http_to_https=lb_pr.get('httpRedirectToHttps'), + xff_enabled=lb_pr.get('xForwardedFor',False), + http_to_https=lb_pr.get('httpRedirectToHttps',False), keepalive_timeout=lb_pr.get('idle_timeout'), - client_max_header_size=lb_pr['request_header_size'], + client_max_header_size=lb_pr.get('request_header_size'), client_max_body_size=lb_pr.get('requestBodySize') ) elif lb_pr['resource_type'] == 'LBFastTcpProfile': alb_pr['profile']=dict( type = 'APPLICATION_PROFILE_TYPE_TCP', tcp_fast_path_profile=dict( - session_idle_timeout=lb_pr['idle_timeout']) + session_idle_timeout=lb_pr.get('idle_timeout')) ) elif lb_pr['resource_type'] == 'LBFastUdpProfile': alb_pr['profile'] = dict( type='APPLICATION_PROFILE_TYPE_UDP', udp_fast_path_profile=dict( - session_idle_timeout=lb_pr['idle_timeout'] + session_idle_timeout=lb_pr.get('idle_timeout') ) ) -def convert(alb_config, nsx_lb_config,cloud_name): +def convert(alb_config, nsx_lb_config,cloud_name,prefix): alb_config['ApplicationProfile'] = list() alb_config['NetworkProfile'] = list() for lb_pr in nsx_lb_config['LbAppProfiles']: + if prefix: + name='%s-%s' % (prefix,lb_pr.get('display_name')) + else : + name=lb_pr.get('display_name') alb_pr=dict( - name=lb_pr['display_name'] + name=name ) update_alb_type(lb_pr, alb_pr) if lb_pr['resource_type'] == 'LBHttpProfile': - alb_pr['cloud_ref'] = conversion_util.get_object_ref(cloud_name, 'cloud') alb_config['ApplicationProfile'].append(alb_pr) else: - alb_pr['cloud_ref'] = conversion_util.get_object_ref(cloud_name, 'cloud') alb_config['NetworkProfile'].append(alb_pr) From 02a7cc42a9942362cf0ee106c04e30b675f3d771 Mon Sep 17 00:00:00 2001 From: Megha Agarwal Date: Wed, 24 Nov 2021 16:25:19 +0530 Subject: [PATCH 09/14] Update vs_converter.py --- .../nsxt_converter/vs_converter.py | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/python/avi/migrationtools/nsxt_converter/vs_converter.py b/python/avi/migrationtools/nsxt_converter/vs_converter.py index c195ade233..aa53aa856e 100644 --- a/python/avi/migrationtools/nsxt_converter/vs_converter.py +++ b/python/avi/migrationtools/nsxt_converter/vs_converter.py @@ -1,23 +1,28 @@ from avi.migrationtools.nsxt_converter import conversion_util -def update_alb_type(lb_vs, alb_vs): - alb_vs['url'], alb_vs['uuid'] = conversion_util.get_obj_url_uuid(lb_vs['path'], lb_vs['unique_id']) - alb_vs['enabled'] = lb_vs['enabled'] +def update_alb_type(lb_vs, alb_vs,prefix): + + alb_vs['enabled'] = lb_vs.get('enabled') alb_vs['services']=dict( - port=lb_vs['ports'][0] + port=lb_vs.get('ports')[0] ) - alb_vs['pool_ref']=lb_vs['pool_path'] - alb_vs['application_profile_ref']=lb_vs['application_profile_path'] + + alb_vs['ssl_profile_ref']=lb_vs.get('client_ssl_profile_binding') - tenant = conversion_util.get_tenant_ref(alb_vs['url']) alb_vs['tenant_ref'] = conversion_util.get_object_ref('admin', 'tenant') -def convert(alb_config, nsx_lb_config,cloud_name): + + +def convert(alb_config, nsx_lb_config,cloud_name,prefix): alb_config['VirtualService'] = list() alb_config['vsvip']=list() for lb_vs in nsx_lb_config['LBVirtualServers']: + if prefix: + name='%s-%s' % (prefix,lb_vs['display_name']) + else : + name=lb_vs['display_name'] vsvip=dict( ip_address=dict( addr=lb_vs['ip_address'], @@ -25,11 +30,11 @@ def convert(alb_config, nsx_lb_config,cloud_name): ) ) alb_vs = dict( - name=lb_vs['display_name'], + name=name, ) - update_alb_type(lb_vs, alb_vs) + update_alb_type(lb_vs, alb_vs,prefix) alb_vs['cloud_ref'] = conversion_util.get_object_ref(cloud_name, 'cloud') alb_config['VirtualService'].append(alb_vs) alb_config['vsvip'].append(vsvip) From 0e94ceabd1ee7d3772db0d1390e5d87f38750b63 Mon Sep 17 00:00:00 2001 From: Megha Agarwal Date: Wed, 24 Nov 2021 16:27:39 +0530 Subject: [PATCH 10/14] Update nsxt_converter.py --- .../avi/migrationtools/nsxt_converter/nsxt_converter.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/python/avi/migrationtools/nsxt_converter/nsxt_converter.py b/python/avi/migrationtools/nsxt_converter/nsxt_converter.py index 96f120f2e6..1dacb4586c 100644 --- a/python/avi/migrationtools/nsxt_converter/nsxt_converter.py +++ b/python/avi/migrationtools/nsxt_converter/nsxt_converter.py @@ -6,7 +6,7 @@ def conver_lb_config(args): output_file_path = args.output_file_path if args.output_file_path else 'output' - nsxt_config_converter.convert(args.nsxt_ip, args.nsxt_user, args.nsxt_passord, args.nsxt_port, output_file_path,args.cloud_name) + nsxt_config_converter.convert(args.nsxt_ip, args.nsxt_user, args.nsxt_passord, args.nsxt_port, output_file_path,args.cloud_name,args.prefix) @@ -33,8 +33,11 @@ def conver_lb_config(args): parser.add_argument('-o', '--output_file_path', help='Folder path for output files to be created in', ) - parser.add_argument('--cloud_name', default='Default_Cloud',help='cloud name for auto upload') - + parser.add_argument('--vrf', + help='Update the available vrf ref with the custom vrf' + 'reference') + parser.add_argument('--cloud_name', required=True,help='cloud name for auto upload') + parser.add_argument('--prefix' ,help='Prefix for objects') args = parser.parse_args() conver_lb_config(args) From e0406722e7441034108a032c7f0f54ae52075992 Mon Sep 17 00:00:00 2001 From: Megha Agarwal Date: Wed, 24 Nov 2021 16:28:34 +0530 Subject: [PATCH 11/14] Update nsxt_config_converter.py --- .../nsxt_converter/nsxt_config_converter.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/python/avi/migrationtools/nsxt_converter/nsxt_config_converter.py b/python/avi/migrationtools/nsxt_converter/nsxt_config_converter.py index 025f1aeb67..ef1ab678c9 100644 --- a/python/avi/migrationtools/nsxt_converter/nsxt_config_converter.py +++ b/python/avi/migrationtools/nsxt_converter/nsxt_config_converter.py @@ -17,7 +17,7 @@ import json -def convert(nsx_ip, nsx_un, nsx_pw, nsx_port, output_dir,cloud_name='Default-Cloud'): +def convert(nsx_ip, nsx_un, nsx_pw, nsx_port, output_dir,cloud_name,prefix): nsx_util = NSXUtil(nsx_un, nsx_pw, nsx_ip, nsx_port) nsx_lb_config = nsx_util.get_nsx_config() input_path = output_dir + os.path.sep + nsx_ip + os.path.sep + "input" @@ -30,10 +30,10 @@ def convert(nsx_ip, nsx_un, nsx_pw, nsx_port, output_dir,cloud_name='Default-Clo alb_config = dict() # Result Config - monitor_converter.convert(alb_config, nsx_lb_config,cloud_name) - profiles_converter.convert(alb_config, nsx_lb_config,cloud_name) - pools_converter.convert(alb_config, nsx_lb_config,cloud_name) - vs_converter.convert(alb_config,nsx_lb_config,cloud_name) + monitor_converter.convert(alb_config, nsx_lb_config,cloud_name,prefix) + profiles_converter.convert(alb_config, nsx_lb_config,cloud_name,prefix) + pools_converter.convert(alb_config, nsx_lb_config,cloud_name,prefix) + vs_converter.convert(alb_config,nsx_lb_config,cloud_name,prefix) output_path = output_dir + os.path.sep + nsx_ip + os.path.sep + "output" print(output_path) @@ -45,4 +45,4 @@ def convert(nsx_ip, nsx_un, nsx_pw, nsx_port, output_dir,cloud_name='Default-Clo pp = PrettyPrinter() - pp.pprint(alb_config) \ No newline at end of file + pp.pprint(alb_config) From 5fb000a9b7a05505177061270c1bc49d9cb4e675 Mon Sep 17 00:00:00 2001 From: Megha Agarwal Date: Wed, 24 Nov 2021 16:31:02 +0530 Subject: [PATCH 12/14] Update nsxt_config_converter.py From f0918c4f70ce76c2d399c47e53189b96658b537f Mon Sep 17 00:00:00 2001 From: Megha Agarwal Date: Thu, 25 Nov 2021 14:00:54 +0530 Subject: [PATCH 13/14] changes done --- .../nsxt_converter/conversion_util.py | 22 +++++-- .../nsxt_converter/monitor_converter.py | 38 +++++------ .../nsxt_converter/nsxt_config_converter.py | 15 ++--- .../nsxt_converter/nsxt_converter.py | 9 ++- .../nsxt_converter/pools_converter.py | 63 ++++++++++--------- .../nsxt_converter/profiles_converter.py | 31 ++++----- 6 files changed, 100 insertions(+), 78 deletions(-) diff --git a/python/avi/migrationtools/nsxt_converter/conversion_util.py b/python/avi/migrationtools/nsxt_converter/conversion_util.py index 9da6b62859..06ea328670 100644 --- a/python/avi/migrationtools/nsxt_converter/conversion_util.py +++ b/python/avi/migrationtools/nsxt_converter/conversion_util.py @@ -17,14 +17,28 @@ def get_tenant_ref(name): if tenant.lower() == 'common': tenant = 'admin' if '/' in name: - name = name.split('/')[1] + name = name.split('/')[-1] if ' ' in tenant: tenant = tenant.split(' ')[-1] return tenant,name -def get_object_ref( object_name, object_type, tenant='admin', - cloud_name='Default-Cloud', prefix=None): +def get_object_ref( object_name, object_type, + prefix=None,cloud_name='Default-cloud'): + if prefix: + object_name = prefix + '-' + object_name if object_type == 'tenant': ref = '/api/tenant/?name=%s' %(object_name) elif object_type == 'cloud': ref = '/api/%s/?tenant=admin&name=%s' % (object_type, object_name) - return ref \ No newline at end of file + elif object_type == 'vrfcontext': + ref = '/api/%s/?tenant=admin&name=%s&cloud=%s' % ( + object_type, object_name, cloud_name) + else: + ref='/api/%s/?tenant=admin&name=%s' % (object_type,object_name ) + return ref + + + + + + + diff --git a/python/avi/migrationtools/nsxt_converter/monitor_converter.py b/python/avi/migrationtools/nsxt_converter/monitor_converter.py index 9380d377ee..18e3f66ba1 100644 --- a/python/avi/migrationtools/nsxt_converter/monitor_converter.py +++ b/python/avi/migrationtools/nsxt_converter/monitor_converter.py @@ -9,41 +9,40 @@ def get_alb_response_codes(response_codes): HttpResponseCode = model_client.ALBHealthMonitorHttp codes = list() for code in response_codes: - if code<200: + if code < 200: if HttpResponseCode.HTTP_RESPONSE_CODE_1XX not in codes: codes.append(HttpResponseCode.HTTP_RESPONSE_CODE_1XX) - elif code>199 and code<300: + elif code > 199 and code < 300: if HttpResponseCode.HTTP_RESPONSE_CODE_2XX not in codes: codes.append(HttpResponseCode.HTTP_RESPONSE_CODE_2XX) - elif code>299 and code<400: + elif code > 299 and code < 400: if HttpResponseCode.HTTP_RESPONSE_CODE_3XX not in codes: codes.append(HttpResponseCode.HTTP_RESPONSE_CODE_3XX) - elif code>399 and code<500: + elif code > 399 and code < 500: if HttpResponseCode.HTTP_RESPONSE_CODE_4XX not in codes: codes.append(HttpResponseCode.HTTP_RESPONSE_CODE_4XX) - elif code>499 and code<600: + elif code > 499 and code < 600: if HttpResponseCode.HTTP_RESPONSE_CODE_5XX not in codes: codes.append(HttpResponseCode.HTTP_RESPONSE_CODE_5XX) return codes def update_alb_type(lb_hm, alb_hm): - if lb_hm['resource_type'] == 'LBHttpMonitorProfile': alb_hm['type'] = 'HEALTH_MONITOR_HTTP' alb_hm['http_monitor'] = dict( - http_request=lb_hm['request_url'], + http_request=lb_hm.get('request_url'), http_request_body=lb_hm.get('request_body'), http_response=lb_hm.get('response_body'), - http_response_code=get_alb_response_codes(lb_hm['response_status_codes']), + http_response_code=get_alb_response_codes(lb_hm.get('response_status_codes')), ) elif lb_hm['resource_type'] == 'LBHttpsMonitorProfile': alb_hm['type'] = 'HEALTH_MONITOR_HTTPS' alb_hm['https_monitor'] = dict( - http_request=lb_hm['request_url'], + http_request=lb_hm.get('request_url'), http_request_body=lb_hm.get('request_body'), http_response=lb_hm.get('response_body'), - http_response_code=get_alb_response_codes(lb_hm['response_status_codes']), + http_response_code=get_alb_response_codes(lb_hm.get('response_status_codes')), ) elif lb_hm['resource_type'] == 'LBIcmpMonitorProfile': alb_hm['type'] = 'HEALTH_MONITOR_PING' @@ -51,23 +50,26 @@ def update_alb_type(lb_hm, alb_hm): alb_hm['type'] = 'HEALTH_MONITOR_TCP' elif lb_hm['resource_type'] == 'LbUdpMonitorProfile': alb_hm['type'] = 'HEALTH_MONITOR_UDP' - alb_hm['url'], alb_hm['uuid'] = conversion_util.get_obj_url_uuid(lb_hm['path'], lb_hm['unique_id']) - tenant = conversion_util.get_tenant_ref(alb_hm['url']) + alb_hm['tenant_ref'] = conversion_util.get_object_ref('admin', 'tenant') -def convert(alb_config, nsx_lb_config,cloud_name): + +def convert(alb_config, nsx_lb_config, cloud_name, prefix): alb_config['HealthMonitor'] = list() for lb_hm in nsx_lb_config['LbMonitorProfiles']: if lb_hm['resource_type'] == 'LBPassiveMonitorProfile': continue + if prefix: + name = '%s-%s' % (prefix, lb_hm['display_name']) + else: + name = lb_hm.get('display_name') alb_hm = dict( - name=lb_hm['display_name'], - failed_checks=lb_hm['fall_count'], - receive_timeout=lb_hm['timeout'], - send_interval=lb_hm['interval'], + name=name, + failed_checks=lb_hm.get('fall_count'), + receive_timeout=lb_hm.get('timeout'), + send_interval=lb_hm.get('interval'), monitor_port=lb_hm.get('monitor_port', None), ) update_alb_type(lb_hm, alb_hm) - alb_hm['cloud_ref'] = conversion_util.get_object_ref(cloud_name, 'cloud') alb_config['HealthMonitor'].append(alb_hm) diff --git a/python/avi/migrationtools/nsxt_converter/nsxt_config_converter.py b/python/avi/migrationtools/nsxt_converter/nsxt_config_converter.py index 025f1aeb67..98299650d7 100644 --- a/python/avi/migrationtools/nsxt_converter/nsxt_config_converter.py +++ b/python/avi/migrationtools/nsxt_converter/nsxt_config_converter.py @@ -1,4 +1,3 @@ - import sys from avi.migrationtools.ace_converter import pool_converter @@ -17,7 +16,7 @@ import json -def convert(nsx_ip, nsx_un, nsx_pw, nsx_port, output_dir,cloud_name='Default-Cloud'): +def convert(nsx_ip, nsx_un, nsx_pw, nsx_port, output_dir, cloud_name, prefix): nsx_util = NSXUtil(nsx_un, nsx_pw, nsx_ip, nsx_port) nsx_lb_config = nsx_util.get_nsx_config() input_path = output_dir + os.path.sep + nsx_ip + os.path.sep + "input" @@ -27,13 +26,12 @@ def convert(nsx_ip, nsx_un, nsx_pw, nsx_port, output_dir,cloud_name='Default-Clo with open(input_config, "w", encoding='utf-8') as text_file: json.dump(nsx_lb_config, text_file, indent=4) - alb_config = dict() # Result Config - monitor_converter.convert(alb_config, nsx_lb_config,cloud_name) - profiles_converter.convert(alb_config, nsx_lb_config,cloud_name) - pools_converter.convert(alb_config, nsx_lb_config,cloud_name) - vs_converter.convert(alb_config,nsx_lb_config,cloud_name) + monitor_converter.convert(alb_config, nsx_lb_config, cloud_name, prefix) + profiles_converter.convert(alb_config, nsx_lb_config, cloud_name, prefix) + pools_converter.convert(alb_config, nsx_lb_config, cloud_name, prefix) + # vs_converter.convert(alb_config, nsx_lb_config, cloud_name, prefix) output_path = output_dir + os.path.sep + nsx_ip + os.path.sep + "output" print(output_path) @@ -43,6 +41,5 @@ def convert(nsx_ip, nsx_un, nsx_pw, nsx_port, output_dir,cloud_name='Default-Clo with open(output_config, "w", encoding='utf-8') as text_file: json.dump(alb_config, text_file, indent=4) - pp = PrettyPrinter() - pp.pprint(alb_config) \ No newline at end of file + pp.pprint(alb_config) diff --git a/python/avi/migrationtools/nsxt_converter/nsxt_converter.py b/python/avi/migrationtools/nsxt_converter/nsxt_converter.py index 96f120f2e6..1dacb4586c 100644 --- a/python/avi/migrationtools/nsxt_converter/nsxt_converter.py +++ b/python/avi/migrationtools/nsxt_converter/nsxt_converter.py @@ -6,7 +6,7 @@ def conver_lb_config(args): output_file_path = args.output_file_path if args.output_file_path else 'output' - nsxt_config_converter.convert(args.nsxt_ip, args.nsxt_user, args.nsxt_passord, args.nsxt_port, output_file_path,args.cloud_name) + nsxt_config_converter.convert(args.nsxt_ip, args.nsxt_user, args.nsxt_passord, args.nsxt_port, output_file_path,args.cloud_name,args.prefix) @@ -33,8 +33,11 @@ def conver_lb_config(args): parser.add_argument('-o', '--output_file_path', help='Folder path for output files to be created in', ) - parser.add_argument('--cloud_name', default='Default_Cloud',help='cloud name for auto upload') - + parser.add_argument('--vrf', + help='Update the available vrf ref with the custom vrf' + 'reference') + parser.add_argument('--cloud_name', required=True,help='cloud name for auto upload') + parser.add_argument('--prefix' ,help='Prefix for objects') args = parser.parse_args() conver_lb_config(args) diff --git a/python/avi/migrationtools/nsxt_converter/pools_converter.py b/python/avi/migrationtools/nsxt_converter/pools_converter.py index b482acd79a..f991e4ce2f 100644 --- a/python/avi/migrationtools/nsxt_converter/pools_converter.py +++ b/python/avi/migrationtools/nsxt_converter/pools_converter.py @@ -1,53 +1,58 @@ from avi.migrationtools.nsxt_converter import nsxt_client as nsx_client_util, profiles_converter, conversion_util -def update_alb_type(lb_pl, alb_pl): - - if lb_pl['algorithm']=='ROUND_ROBIN': +def update_alb_type(lb_pl, alb_pl, prefix): + if lb_pl['algorithm'] == 'ROUND_ROBIN': alb_pl['lb_algorithm'] = 'LB_ALGORITHM_ROUND_ROBIN' - elif lb_pl['algorithm']=='LEAST_CONNECTION': + elif lb_pl['algorithm'] == 'LEAST_CONNECTION': alb_pl['lb_algorithm'] = 'LB_ALGORITHM_LEAST_CONNECTION' - elif lb_pl['algorithm']== 'IP_HASH': + elif lb_pl['algorithm'] == 'IP_HASH': alb_pl['lb_algorithm'] = 'LB_ALGORITHM_CONSISTENT_HASH_SOURCE_IP_ADDRESS' - alb_pl['min_servers_up']=lb_pl['min_active_members'] - alb_pl['max_concurrent_connections']=lb_pl.get('max_concurrent_connections_per_server') - alb_pl['health_monitor_refs']=lb_pl.get('active_monitor_paths') + alb_pl['min_servers_up'] = lb_pl.get('min_active_members') + alb_pl['max_concurrent_connections'] = lb_pl.get('max_concurrent_connections_per_server') + alb_pl['servers'] = dict( ip=dict( - )) - if(lb_pl.get('members')): + )) + if lb_pl.get('members'): for member in lb_pl.get('members'): - alb_pl['servers']['enabled']=member['admin_state'] - alb_pl['servers']['ip']['addr']=member['ip_address'] - alb_pl['servers']['port']=member['port'] - alb_pl['servers']['ratio']=member['weight'] - alb_pl['servers']['description']=member['display_name'] - #todo for snat_translation to preserve_client_ip in application profile + alb_pl['servers']['enabled'] = member.get('admin_state') + alb_pl['servers']['ip']['addr'] = member.get('ip_address') + alb_pl['servers']['ip']['type'] = 'V4' + alb_pl['servers']['port'] = member.get('port') + alb_pl['servers']['ratio'] = member.get('weight') + alb_pl['servers']['description'] = member.get('display_name') + # todo for snat_translation to preserve_client_ip in application profile - - alb_pl['ConnPoolProperties']=dict( - upstream_connpool_server_max_cache=lb_pl['tcp_multiplexing_number'] + alb_pl['conn_pool_properties'] = dict( + upstream_connpool_server_max_cache=lb_pl.get('tcp_multiplexing_number') ) - if(lb_pl.get('member_group')): - alb_pl['nsx_membergroup']=dict( + if lb_pl.get('member_group'): + alb_pl['nsx_membergroup'] = dict( nsx_securitygroup=lb_pl['member_group']['group_path'] ) - if(lb_pl['member_group']['port']): - alb_pl['default_server_port']=lb_pl['member_group']['port'] - alb_pl['url'], alb_pl['uuid'] = conversion_util.get_obj_url_uuid(lb_pl['path'], lb_pl['unique_id']) - tenant = conversion_util.get_tenant_ref(alb_pl['url']) + if lb_pl['member_group']['port']: + alb_pl['default_server_port'] = lb_pl['member_group']['port'] alb_pl['tenant_ref'] = conversion_util.get_object_ref('admin', 'tenant') + if lb_pl.get('active_monitor_paths'): + tenant, name = conversion_util.get_tenant_ref(lb_pl.get('active_monitor_paths')[0]) + alb_pl['health_monitor_ref'] = conversion_util.get_object_ref(name, 'healthmonitor', prefix) -def convert(alb_config, nsx_lb_config,cloud_name): +def convert(alb_config, nsx_lb_config, cloud_name, prefix): alb_config['Pool'] = list() for lb_pl in nsx_lb_config['LbPools']: - alb_pl=dict( - name=lb_pl['display_name'] + if prefix: + name = '%s-%s' % (prefix, lb_pl['display_name']) + else: + name = lb_pl['display_name'] + alb_pl = dict( + name=name ) - update_alb_type(lb_pl, alb_pl) + update_alb_type(lb_pl, alb_pl, prefix) alb_pl['cloud_ref'] = conversion_util.get_object_ref(cloud_name, 'cloud') + alb_config['Pool'].append(alb_pl) diff --git a/python/avi/migrationtools/nsxt_converter/profiles_converter.py b/python/avi/migrationtools/nsxt_converter/profiles_converter.py index 011589b988..fb54ec6837 100644 --- a/python/avi/migrationtools/nsxt_converter/profiles_converter.py +++ b/python/avi/migrationtools/nsxt_converter/profiles_converter.py @@ -2,48 +2,49 @@ def update_alb_type(lb_pr, alb_pr): - alb_pr['url'],alb_pr['uuid']=conversion_util.get_obj_url_uuid(lb_pr['path'],lb_pr['unique_id']) - tenant=conversion_util.get_tenant_ref(alb_pr['url']) - alb_pr['tenant_ref']=conversion_util.get_object_ref('admin','tenant') + alb_pr['tenant_ref'] = conversion_util.get_object_ref('admin', 'tenant') if lb_pr['resource_type'] == 'LBHttpProfile': alb_pr['type'] = 'APPLICATION_PROFILE_TYPE_HTTP' alb_pr['http_profile'] = dict( - xff_enabled=lb_pr.get('xForwardedFor'), - http_to_https=lb_pr.get('httpRedirectToHttps'), + xff_enabled=lb_pr.get('xForwardedFor', False), + http_to_https=lb_pr.get('httpRedirectToHttps', False), keepalive_timeout=lb_pr.get('idle_timeout'), - client_max_header_size=lb_pr['request_header_size'], + client_max_header_size=lb_pr.get('request_header_size'), client_max_body_size=lb_pr.get('requestBodySize') ) elif lb_pr['resource_type'] == 'LBFastTcpProfile': - alb_pr['profile']=dict( - type = 'APPLICATION_PROFILE_TYPE_TCP', + alb_pr['profile'] = dict( + type='APPLICATION_PROFILE_TYPE_TCP', tcp_fast_path_profile=dict( - session_idle_timeout=lb_pr['idle_timeout']) + session_idle_timeout=lb_pr.get('idle_timeout')) ) elif lb_pr['resource_type'] == 'LBFastUdpProfile': alb_pr['profile'] = dict( type='APPLICATION_PROFILE_TYPE_UDP', udp_fast_path_profile=dict( - session_idle_timeout=lb_pr['idle_timeout'] + session_idle_timeout=lb_pr.get('idle_timeout') ) ) -def convert(alb_config, nsx_lb_config,cloud_name): + +def convert(alb_config, nsx_lb_config, cloud_name, prefix): alb_config['ApplicationProfile'] = list() alb_config['NetworkProfile'] = list() for lb_pr in nsx_lb_config['LbAppProfiles']: - alb_pr=dict( - name=lb_pr['display_name'] + if prefix: + name = '%s-%s' % (prefix, lb_pr.get('display_name')) + else: + name = lb_pr.get('display_name') + alb_pr = dict( + name=name ) update_alb_type(lb_pr, alb_pr) if lb_pr['resource_type'] == 'LBHttpProfile': - alb_pr['cloud_ref'] = conversion_util.get_object_ref(cloud_name, 'cloud') alb_config['ApplicationProfile'].append(alb_pr) else: - alb_pr['cloud_ref'] = conversion_util.get_object_ref(cloud_name, 'cloud') alb_config['NetworkProfile'].append(alb_pr) From 5230eedb5f58835c01ad103833968c47168c0169 Mon Sep 17 00:00:00 2001 From: Megha Agarwal Date: Thu, 25 Nov 2021 14:08:33 +0530 Subject: [PATCH 14/14] changes done --- .../nsxt_converter/vs_converter.py | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/python/avi/migrationtools/nsxt_converter/vs_converter.py b/python/avi/migrationtools/nsxt_converter/vs_converter.py index c195ade233..34adafbdfc 100644 --- a/python/avi/migrationtools/nsxt_converter/vs_converter.py +++ b/python/avi/migrationtools/nsxt_converter/vs_converter.py @@ -1,35 +1,37 @@ from avi.migrationtools.nsxt_converter import conversion_util -def update_alb_type(lb_vs, alb_vs): - alb_vs['url'], alb_vs['uuid'] = conversion_util.get_obj_url_uuid(lb_vs['path'], lb_vs['unique_id']) - alb_vs['enabled'] = lb_vs['enabled'] +def update_alb_type(lb_vs, alb_vs, prefix): + alb_vs['enabled'] = lb_vs.get('enabled') - alb_vs['services']=dict( - port=lb_vs['ports'][0] - ) - alb_vs['pool_ref']=lb_vs['pool_path'] - alb_vs['application_profile_ref']=lb_vs['application_profile_path'] - alb_vs['ssl_profile_ref']=lb_vs.get('client_ssl_profile_binding') - tenant = conversion_util.get_tenant_ref(alb_vs['url']) + alb_vs['services'] = dict( + port=lb_vs.get('ports')[0] + ) + + alb_vs['ssl_profile_ref'] = lb_vs.get('client_ssl_profile_binding') alb_vs['tenant_ref'] = conversion_util.get_object_ref('admin', 'tenant') -def convert(alb_config, nsx_lb_config,cloud_name): + +def convert(alb_config, nsx_lb_config, cloud_name, prefix): alb_config['VirtualService'] = list() - alb_config['vsvip']=list() + alb_config['vsvip'] = list() for lb_vs in nsx_lb_config['LBVirtualServers']: - vsvip=dict( + if prefix: + name = '%s-%s' % (prefix, lb_vs['display_name']) + else: + name = lb_vs['display_name'] + vsvip = dict( ip_address=dict( addr=lb_vs['ip_address'], type="V4" - ) + ) ) alb_vs = dict( - name=lb_vs['display_name'], + name=name, ) - update_alb_type(lb_vs, alb_vs) + update_alb_type(lb_vs, alb_vs, prefix) alb_vs['cloud_ref'] = conversion_util.get_object_ref(cloud_name, 'cloud') alb_config['VirtualService'].append(alb_vs) alb_config['vsvip'].append(vsvip)