Beispiel #1
0
 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
Beispiel #2
0
    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)
Beispiel #3
0
 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
Beispiel #4
0
    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)
Beispiel #5
0
     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,
Beispiel #6
0
    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)
Beispiel #7
0
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
                                )
Beispiel #10
0
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
Beispiel #11
0
#!/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: