def patch(self): """ apply patches to the copy of configuration. :return: """ # Creating util object for calling progressbar. mg_util = MigrationUtil() new_cfg = deepcopy(self.avi_cfg) total_size = len(self.patches) progressbar_count = 0 print "Conversion For Patching of objects started..." for obj_type, obj_patches in self.patches.iteritems(): progressbar_count += 1 # for each object that is being patched need to iterate # over all the configuration that matches either reference # or name of object. for patch_data in obj_patches: self.apply_patch(obj_type, patch_data, new_cfg) msg = "Patching conversion started..." mg_util.print_progress_bar(progressbar_count, total_size, msg, prefix='Progress', suffix='') return new_cfg
def apply_obj_patch(self, obj_type, obj, patch_data, avi_cfg): """ :param obj_type: object type eg. VirtualService. :param obj: Patch an object. :param patch_data: Dictionary on a per object type basis. :param avi_cfg: :return: """ old_obj_refs = [] mg_util = MigrationUtil() tenant_ref = obj.get('tenant_ref', '/api/tenant/?name=admin') tenant = self.param_value_in_ref(tenant_ref, 'name') if 'name' in obj: obj_name = obj['name'] old_obj_ref = '%s:%s' % (tenant, obj['name']) old_obj_refs.append(old_obj_ref) old_obj_ref = obj['name'] old_obj_refs.append(old_obj_ref) # old_obj_ref = '/api/%s/?tenant=%s&name=%s' % ( # obj_type.lower(), tenant, obj['name']) cloud = (self.param_value_in_ref(obj.get('cloud_ref'), 'name') if 'cloud_ref' in obj else None) old_obj_ref = mg_util.get_object_ref(obj['name'], obj_type.lower(), tenant, cloud_name=cloud) old_obj_refs.append(old_obj_ref) if patch_data.get('delete_old', False): new_obj_name = patch_data['patch']['name'] avi_cfg[obj_type].remove(obj) log.debug('Deleted old %s named %s replacing references to %s', obj_type, obj.get('name', ''), new_obj_name) if 'tenant_ref' in patch_data['patch']: tenant = mg_util.get_name(patch_data['patch']['tenant_ref']) else: log.debug('patching %s:%s with patch %s', obj_type, obj.get('name', ''), patch_data) self.deep_update(obj, patch_data['patch']) if 'name' in obj: new_obj_name = obj['name'] if (('name' in patch_data['patch']) and old_obj_refs and (obj_name != new_obj_name)): # need to update all the references for this object # new_obj_ref = '/api/%s/?tenant=%s&name=%s' % ( # obj_type.lower(), tenant, obj['name']) cloud = (self.param_value_in_ref(obj.get('cloud_ref'), 'name') if 'cloud_ref' in obj else '') new_obj_ref = mg_util.get_object_ref(new_obj_name, obj_type.lower(), tenant, cloud_name=cloud) # this is to handle old references could be in multiple formats for old_obj_ref in old_obj_refs: self.update_references(obj_type, old_obj_ref, new_obj_ref, avi_cfg)
def test_validation(self): util = MigrationUtil() util.validation(self.new_file) assert len(self.new_file) == len(self.old_file) assert cmp(self.new_file, self.old_file) != 0 assert self.new_file['NetworkProfile'][0]['profile'][ 'tcp_proxy_profile']['max_segment_size'] == 512 obj = [ app_obj for app_obj in self.new_file['ApplicationPersistenceProfile'] if app_obj['name'] == 'Merged-COOKIEINSERT-app_persist_profile-2' ] assert obj[0]['http_cookie_persistence_profile']['timeout'] == 1
def setUp(self): self.common_utils = MigrationUtil() tenant_ref = "/api/tenant/?name=admin" cloud_ref = "/api/cloud/?tenant=admin&name=Default-Cloud" tenant = "admin" vrf_ref = None self.empty_data = [] self.data = { "ApplicationPersistenceProfile": [ { "name": "test_sticky" } ], "HealthMonitor": [ { "name": "test_probe" } ], "SSLProfile": [ ] } self.vrf_ref_data = "/api/vrfcontext/?tenant=admin&name=testvrf1&cloud=Default-Cloud" self.pool_obj_app = PoolConverter( parsed=data, tenant_ref=tenant_ref, common_utils=self.common_utils, cloud_ref=cloud_ref, tenant=tenant, vrf_ref=vrf_ref) self.pool_obj_app_vrf = PoolConverter( parsed=data, tenant_ref=tenant_ref, common_utils=self.common_utils, cloud_ref=cloud_ref, tenant=tenant, vrf_ref=self.vrf_ref_data) self.pool_obj_app_empty = PoolConverter( parsed={}, tenant_ref=tenant_ref, common_utils=self.common_utils, cloud_ref=cloud_ref, tenant=tenant, vrf_ref=vrf_ref) self.MonitorConvertor_obj_app = MonitorConverter( parsed=data, tenant_ref=tenant_ref, common_utils=self.common_utils, tenant=tenant) self.MonitorConvertor_empty = MonitorConverter( parsed={}, tenant_ref=tenant_ref, common_utils=self.common_utils, tenant=tenant) self.PersistanceConvertor_obj_app = PersistanceConverter( parsed=data, tenant_ref=tenant_ref, common_utils=self.common_utils, tenant=tenant) self.PersistanceConvertor_empty = PersistanceConverter( parsed={}, tenant_ref=tenant_ref, common_utils=self.common_utils, tenant=tenant) self.sslConvertor_obj_app = SSLConverter( parsed=data, tenant_ref=tenant_ref, common_utils=self.common_utils, in_path=None, tenant=tenant) self.sslConvertor_empty = SSLConverter( parsed={}, tenant_ref=tenant_ref, common_utils=self.common_utils, in_path=None, tenant=tenant) self.vs = VSConverter(parsed=data, tenant_ref=tenant_ref, common_utils=self.common_utils, enable_vs=True, cloud_ref=cloud_ref, tenant=tenant, vrf_ref=vrf_ref) self.vs_vrf = VSConverter(parsed=data, tenant_ref=tenant_ref, common_utils=self.common_utils, enable_vs=True, cloud_ref=cloud_ref, tenant=tenant, vrf_ref=self.vrf_ref_data) self.vs_empty = VSConverter( parsed={}, tenant_ref=tenant_ref, common_utils=self.common_utils, enable_vs=True, cloud_ref=cloud_ref, tenant=tenant, vrf_ref=vrf_ref)
APPLICATION_PROFILE_REF, ENABLE_F5, DISABLE_F5, ENABLE_AVI, DISABLE_AVI, CREATE_OBJECT, VIRTUALSERVICE, GEN_TRAFFIC, common_task_args, ansible_dict, SKIP_FIELDS, DEFAULT_SKIP_TYPES, HELP_STR, NAME, VIP, SERVICES, CONTROLLER, API_VERSION, POOL_REF, TAGS, AVI_VIRTUALSERVICE, SERVER, VALIDATE_CERT, USER, REQEST_TYPE, IP_ADDRESS, TASKS, CONTROLLER_INPUT, USER_NAME, PASSWORD_NAME, STATE, DISABLE, BIGIP_VS_SERVER, DELEGETE_TO, LOCAL_HOST, ENABLE, F5_SERVER, F5_USERNAME, F5_PASSWORD, AVI_TRAFFIC, PORT, ADDR, VS_NAME, WHEN, RESULT, REGISTER, VALUE, TENANT, ANSIBLE_STR) from avi.migrationtools.avi_migration_utils import MigrationUtil from avi.migrationtools.ansible.ansible_traffic_generation import TrafficGen DEFAULT_SKIP_TYPES = DEFAULT_SKIP_TYPES LOG = logging.getLogger(__name__) # Added util object mg_util = MigrationUtil() class AviAnsibleConverter(object): skip_fields = SKIP_FIELDS skip_types = set(DEFAULT_SKIP_TYPES) REF_MATCH = re.compile('^/api/[\w/.#&-]*#[\s|\w/.&-:]*$') # Modified REGEX REL_REF_MATCH = re.compile( '/api/[A-z]+/\?[A-z_\-]+\=[A-z_\-]+\&[A-z_\-]+\=.*') def __init__(self, avi_cfg, outdir, prefix, not_in_use,
def __init__(self, parsed_output, enable_vs=False, version='17.1.1', input_folder_loc=None, tenant=None, cloud=None, vrf=None, segroup=None): """ Create Some common Objects over here """ self.aviobj = AviConverter() self.parsed = parsed_output self.common_utils = MigrationUtil() self.version = version self.enable_vs = enable_vs self.input_file_loc = input_folder_loc self.tenant = tenant self.cloud = cloud self.vrf = vrf self.vrf_ref = None self.segroup = segroup self.tenant_ref = self.common_utils.get_object_ref( self.tenant, 'tenant') self.cloud_ref = self.common_utils.get_object_ref(self.cloud, 'cloud') if self.vrf: self.vrf_ref = self.common_utils.get_object_ref( object_name=self.vrf, object_type='vrfcontext', tenant=self.tenant, cloud_name=self.cloud, ) # creating objects for converters self.pool = PoolConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, cloud_ref=self.cloud_ref, tenant=self.tenant, vrf_ref=self.vrf_ref) self.monitor = MonitorConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, tenant=self.tenant) self.vs = VSConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, enable_vs=self.enable_vs, cloud_ref=self.cloud_ref, tenant=self.tenant, vrf_ref=self.vrf_ref, segroup=self.segroup, cloud=self.cloud) self.persistance = PersistanceConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, tenant=self.tenant) self.ssl = SSLConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, in_path=self.input_file_loc, tenant=self.tenant)
class ConfigConverter(object): """ Configuration conversion happens here """ def __init__(self, parsed_output, enable_vs=False, version='17.1.1', input_folder_loc=None, tenant=None, cloud=None, vrf=None, segroup=None): """ Create Some common Objects over here """ self.aviobj = AviConverter() self.parsed = parsed_output self.common_utils = MigrationUtil() self.version = version self.enable_vs = enable_vs self.input_file_loc = input_folder_loc self.tenant = tenant self.cloud = cloud self.vrf = vrf self.vrf_ref = None self.segroup = segroup self.tenant_ref = self.common_utils.get_object_ref( self.tenant, 'tenant') self.cloud_ref = self.common_utils.get_object_ref(self.cloud, 'cloud') if self.vrf: self.vrf_ref = self.common_utils.get_object_ref( object_name=self.vrf, object_type='vrfcontext', tenant=self.tenant, cloud_name=self.cloud, ) # creating objects for converters self.pool = PoolConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, cloud_ref=self.cloud_ref, tenant=self.tenant, vrf_ref=self.vrf_ref) self.monitor = MonitorConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, tenant=self.tenant) self.vs = VSConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, enable_vs=self.enable_vs, cloud_ref=self.cloud_ref, tenant=self.tenant, vrf_ref=self.vrf_ref, segroup=self.segroup, cloud=self.cloud) self.persistance = PersistanceConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, tenant=self.tenant) self.ssl = SSLConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, in_path=self.input_file_loc, tenant=self.tenant) def conversion(self): """ All conversion controller over here """ data = dict() data['HealthMonitor'] = self.monitor.healthmonitor_conversion() data[ 'ApplicationPersistenceProfile'] = self.persistance.app_persistance_conversion( ) data['Pool'] = self.pool.pool_conversion(data) data['SSLProfile'] = self.ssl.ssl_profile() data['SSLKeyAndCertificate'] = self.ssl.ssl_key_and_cert() data['VsVip'] = self.vs.vsvip_conversion() vs_list, cloned_pool_list, http_list = self.vs.virtual_service_conversion( data) data['httppolicyset'] = http_list data['VirtualService'] = vs_list data['Pool'].extend(cloned_pool_list) root_inter_certs = self.ssl.crypto_chaingroup() #Checking chaingroup present or not if root_inter_certs: data['SSLKeyAndCertificate'].extend(root_inter_certs) if self.tenant != 'admin': data['Tenant'] = [{ "local": True, "name": self.tenant }, { "local": True, "name": "admin" }] if self.vrf: vrf_context = [ { "name": 'global', "system_default": True, "tenant_ref": self.common_utils.get_object_ref(self.tenant, 'tenant'), "cloud_ref": self.common_utils.get_object_ref(self.cloud, 'cloud'), "static_routes": [] }, { "name": self.vrf, "system_default": True, "tenant_ref": self.common_utils.get_object_ref(self.tenant, 'tenant'), "cloud_ref": self.common_utils.get_object_ref(self.cloud, 'cloud'), "static_routes": [] }, ] data['VrfContext'] = vrf_context return data
ansible_dict, SKIP_FIELDS, DEFAULT_SKIP_TYPES, HELP_STR, NAME, VIP, SERVICES, CONTROLLER, API_VERSION, POOL_REF, TAGS, SERVER, VALIDATE_CERT, USER, REQEST_TYPE, IP_ADDRESS, TASKS, CONTROLLER_INPUT, USER_NAME, PASSWORD_NAME, F5_SERVER, F5_USERNAME, F5_PASSWORD, AVI_TRAFFIC, PORT, ADDR, VS_NAME, REGISTER, VALUE, AVI_CON_TENANT, ANSIBLE_STR, RETRIES, RETRIES_TIME, DELAY_TIME, DELAY, RESULT_STATUS, UNTIL, AVI_VS_IP_ADDRESS, AVI_CON_USERNAME, AVI_CON_PASSWORD) from avi.migrationtools.ansible.ansible_traffic_generation import TrafficGen from avi.migrationtools.avi_migration_utils import MigrationUtil from avi.migrationtools.avi_orphan_object import \ filter_for_vs, get_vs_ref, get_name_and_entity, PATH_KEY_MAP DEFAULT_SKIP_TYPES = DEFAULT_SKIP_TYPES LOG = logging.getLogger(__name__) # Added util object mg_util = MigrationUtil() DEFAULT_SKIP_PARAMS = {'sslprofile': ['dhparam']} def should_use_block(value): for c in u"\u000a\u000d\u001c\u001d\u001e\u0085\u2028\u2029": if c in value: return True return False def my_represent_scalar(self, tag, value, style=None): if style is None: if should_use_block(value): style = '|'
def __init__(self, parsed_output, enable_vs=False, version='17.1.1', input_folder_loc=None, tenant=None, cloud=None, vrf=None, segroup=None): """ Create Some common Objects over here """ self.aviobj = AviConverter() self.parsed = parsed_output self.common_utils = MigrationUtil() self.version = version self.enable_vs = enable_vs self.input_file_loc = input_folder_loc self.tenant = tenant self.cloud = cloud self.vrf = vrf self.vrf_ref = None self.segroup = segroup self.tenant_ref = self.common_utils.get_object_ref( self.tenant, 'tenant') self.cloud_ref = self.common_utils.get_object_ref(self.cloud, 'cloud') if self.vrf: self.vrf_ref = self.common_utils.get_object_ref(object_name=self.vrf, object_type='vrfcontext', tenant=self.tenant, cloud_name=self.cloud, ) # creating objects for converters self.pool = PoolConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, cloud_ref=self.cloud_ref, tenant=self.tenant, vrf_ref=self.vrf_ref ) self.monitor = MonitorConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, tenant=self.tenant ) self.vs = VSConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, enable_vs=self.enable_vs, cloud_ref=self.cloud_ref, tenant=self.tenant, vrf_ref=self.vrf_ref, segroup=self.segroup, cloud=self.cloud ) self.persistance = PersistanceConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, tenant=self.tenant ) self.ssl = SSLConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, in_path=self.input_file_loc, tenant=self.tenant )
class ConfigConverter(object): """ Configuration conversion happens here """ def __init__(self, parsed_output, enable_vs=False, version='17.1.1', input_folder_loc=None, tenant=None, cloud=None, vrf=None, segroup=None): """ Create Some common Objects over here """ self.aviobj = AviConverter() self.parsed = parsed_output self.common_utils = MigrationUtil() self.version = version self.enable_vs = enable_vs self.input_file_loc = input_folder_loc self.tenant = tenant self.cloud = cloud self.vrf = vrf self.vrf_ref = None self.segroup = segroup self.tenant_ref = self.common_utils.get_object_ref( self.tenant, 'tenant') self.cloud_ref = self.common_utils.get_object_ref(self.cloud, 'cloud') if self.vrf: self.vrf_ref = self.common_utils.get_object_ref(object_name=self.vrf, object_type='vrfcontext', tenant=self.tenant, cloud_name=self.cloud, ) # creating objects for converters self.pool = PoolConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, cloud_ref=self.cloud_ref, tenant=self.tenant, vrf_ref=self.vrf_ref ) self.monitor = MonitorConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, tenant=self.tenant ) self.vs = VSConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, enable_vs=self.enable_vs, cloud_ref=self.cloud_ref, tenant=self.tenant, vrf_ref=self.vrf_ref, segroup=self.segroup, cloud=self.cloud ) self.persistance = PersistanceConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, tenant=self.tenant ) self.ssl = SSLConverter(parsed=self.parsed, tenant_ref=self.tenant_ref, common_utils=self.common_utils, in_path=self.input_file_loc, tenant=self.tenant ) def conversion(self): """ All conversion controller over here """ data = dict() data['META'] = self.aviobj.meta( tenant=self.tenant, controller_version=self.version) data['HealthMonitor'] = self.monitor.healthmonitor_conversion() data['ApplicationPersistenceProfile'] = self.persistance.app_persistance_conversion() data['Pool'] = self.pool.pool_conversion(data) data['SSLProfile'] = self.ssl.ssl_profile() data['SSLKeyAndCertificate'] = self.ssl.ssl_key_and_cert() data['VsVip'] = self.vs.vsvip_conversion() vs_list, cloned_pool_list, http_list = self.vs.virtual_service_conversion( data) data['httppolicyset'] = http_list data['VirtualService'] = vs_list data['Pool'].extend(cloned_pool_list) root_inter_certs = self.ssl.crypto_chaingroup() #Checking chaingroup present or not if root_inter_certs: data['SSLKeyAndCertificate'].extend(root_inter_certs) if self.tenant != 'admin': data['Tenant'] = [ { "local": True, "name": self.tenant }, { "local": True, "name": "admin" } ] if self.vrf: vrf_context = [ { "name": 'global', "system_default": True, "tenant_ref": self.common_utils.get_object_ref(self.tenant, 'tenant'), "cloud_ref": self.common_utils.get_object_ref(self.cloud, 'cloud'), "static_routes": [] }, { "name": self.vrf, "system_default": True, "tenant_ref": self.common_utils.get_object_ref(self.tenant, 'tenant'), "cloud_ref": self.common_utils.get_object_ref(self.cloud, 'cloud'), "static_routes": [] }, ] data['VrfContext'] = vrf_context return data
#!/usr/bin/env python import argparse import json import os import urlparse import yaml from avi.migrationtools.avi_migration_utils import MigrationUtil # Read avi object to API path map from yaml file. mg_util = MigrationUtil() path_key_map = mg_util.get_path_key_map() warning_list = [] def filter_for_vs(avi_config, vs_names): """ Filters vs and its references from full configuration :param avi_config: full configuration :param vs_names: comma separated vs names to filter :return: Filtered config dict """ new_config = dict() new_config['VirtualService'] = [] virtual_services = vs_names.split(',') for vs_name in virtual_services: vs = [vs for vs in avi_config['VirtualService'] if vs['name'] == vs_name] if not vs: