class FunctionalTest(unittest.TestCase): def __init__(self, *args, **kwargs): super(FunctionalTest, self).__init__(*args, **kwargs) suppress_dependency_logging() self.src_cloud = Prerequisites(cloud_prefix='SRC', config=config) self.dst_cloud = Prerequisites(cloud_prefix='DST', config=config) self.filtering_utils = FilteringUtils() def filter_networks(self): networks = [i['name'] for i in config.networks] for i in config.tenants: if 'networks' in i: for j in i['networks']: networks.append(j['name']) return self._get_neutron_resources('networks', networks) def filter_subnets(self): subnets = [] admin_tenant_id = self.src_cloud.get_tenant_id(self.src_cloud.tenant) for net in config.networks: if not net.get('subnets'): continue for subnet in net['subnets']: subnet['tenant_id'] = admin_tenant_id subnets.append(subnet) subnets = [i for net in config.networks if net.get('subnets') for i in net['subnets']] for tenant in config.tenants: if 'networks' not in tenant: continue for network in tenant['networks']: if 'subnets' not in network: continue for subnet in network['subnets']: subnet['tenant_id'] = self.src_cloud.get_tenant_id( tenant['name']) subnets.append(subnet) env_subnets = self.src_cloud.neutronclient.list_subnets()['subnets'] filtered_subnets = {'subnets': []} for env_subnet in env_subnets: for subnet in subnets: same_cidr = env_subnet['cidr'] == subnet['cidr'] same_tenant = env_subnet['tenant_id'] == subnet['tenant_id'] if same_cidr and same_tenant: filtered_subnets['subnets'].append(env_subnet) return filtered_subnets def filter_routers(self): routers = [i['router']['name'] for i in config.routers] return self._get_neutron_resources('routers', routers) def filter_floatingips(self): # Now we create floating ip, after tenant networks created. # Will be fixed with tests for floating ip associating def get_fips(_user): self.src_cloud.switch_user(user=_user['name'], tenant=_user['tenant'], password=_user['password']) _client = self.src_cloud.neutronclient return [_fip['floating_ip_address'] for _fip in _client.list_floatingips()['floatingips']] for tenant in config.tenants: fips = [fip for user in config.users if tenant['name'] == user.get('tenant') and user['enabled'] and not user.get('deleted') for fip in get_fips(user)] return set(fips) def filter_users(self): users = [] for user in config.users: if user.get('deleted'): continue if self.src_cloud.tenant_exists(user.get('tenant')) or\ self.src_cloud.user_has_not_primary_tenants(user['name']): users.append(user['name']) return self._get_keystone_resources('users', users) def filter_tenants(self): tenants = [i['name'] for i in config.tenants] return self._get_keystone_resources('tenants', tenants) def filter_roles(self): roles = [i['name'] for i in config.roles] return self._get_keystone_resources('roles', roles) def filter_vms(self): vms = config.vms [vms.extend(i['vms']) for i in config.tenants if 'vms' in i] vms.extend(config.vms_from_volumes) vms_names = [vm['name'] for vm in vms] opts = {'search_opts': {'all_tenants': 1}} return [i for i in self.src_cloud.novaclient.servers.list(**opts) if i.name in vms_names] def filter_flavors(self): flavors = [i['name'] for i in config.flavors] return self._get_nova_resources('flavors', flavors) def filter_keypairs(self): return self.src_cloud.get_users_keypairs() def filter_security_groups(self): sgs = [sg['name'] for i in config.tenants if 'security_groups' in i for sg in i['security_groups']] return self._get_neutron_resources('security_groups', sgs) def filter_images(self): images = [i['name'] for i in config.images] for tenant in config.tenants: if not tenant.get('images'): continue [images.append(i['name']) for i in tenant['images']] return [i for i in self.src_cloud.glanceclient.images.list() if i.name in images] def filter_volumes(self): volumes = config.cinder_volumes [volumes.extend(i['cinder_volumes']) for i in config.tenants if 'cinder_volumes' in i] volumes.extend(config.cinder_volumes_from_images) volumes_names = [volume['display_name'] for volume in volumes] opts = {'search_opts': {'all_tenants': 1}} return [i for i in self.src_cloud.cinderclient.volumes.list(**opts) if i.display_name in volumes_names] def _get_neutron_resources(self, res, names): _list = getattr(self.src_cloud.neutronclient, 'list_' + res)() return {res: [i for i in _list[res] if i['name'] in names]} def _get_nova_resources(self, res, names): client = getattr(self.src_cloud.novaclient, res) return [i for i in client.list() if i.name in names] def _get_keystone_resources(self, res, names): client = getattr(self.src_cloud.keystoneclient, res) return [i for i in client.list() if i.name in names] def get_vms_with_fip_associated(self): vms = config.vms [vms.extend(i['vms']) for i in config.tenants if 'vms' in i] return [vm['name'] for vm in vms if vm.get('fip')]
class FunctionalTest(unittest.TestCase): def __init__(self, *args, **kwargs): super(FunctionalTest, self).__init__(*args, **kwargs) suppress_dependency_logging() if not config_ini: raise ConfFileError('Configuration file parameter' ' --tc-file is missing or ' 'the file has wrong format') self.src_cloud = Prerequisites(cloud_prefix='SRC', configuration_ini=config_ini, config=config) self.dst_cloud = Prerequisites(cloud_prefix='DST', configuration_ini=config_ini, config=config) self.filtering_utils = utils.FilteringUtils() self.migration_utils = utils.MigrationUtils(config) def filter_networks(self): networks = [i['name'] for i in config.networks] for i in config.tenants: if 'networks' in i and not i.get('deleted'): for j in i['networks']: networks.append(j['name']) return self._get_neutron_resources('networks', networks) def filter_subnets(self): subnets = [] admin_tenant_id = self.src_cloud.get_tenant_id(self.src_cloud.tenant) for net in config.networks: if not net.get('subnets'): continue for subnet in net['subnets']: subnet['tenant_id'] = admin_tenant_id subnets.append(subnet) subnets = [i for net in config.networks if net.get('subnets') for i in net['subnets']] for tenant in config.tenants: if 'networks' not in tenant or tenant.get('deleted'): continue for network in tenant['networks']: if 'subnets' not in network: continue for subnet in network['subnets']: subnet['tenant_id'] = self.src_cloud.get_tenant_id( tenant['name']) subnets.append(subnet) env_subnets = self.src_cloud.neutronclient.list_subnets()['subnets'] filtered_subnets = {'subnets': []} for env_subnet in env_subnets: for subnet in subnets: same_cidr = env_subnet['cidr'] == subnet['cidr'] same_tenant = env_subnet['tenant_id'] == subnet['tenant_id'] if same_cidr and same_tenant: filtered_subnets['subnets'].append(env_subnet) return filtered_subnets def filter_routers(self): routers = [i['router']['name'] for i in config.routers] return self._get_neutron_resources('routers', routers) def filter_floatingips(self): # Now we create floating ip, after tenant networks created. # Will be fixed with tests for floating ip associating def get_fips(_user): self.src_cloud.switch_user(user=_user['name'], tenant=_user['tenant'], password=_user['password']) _client = self.src_cloud.neutronclient return [_fip['floating_ip_address'] for _fip in _client.list_floatingips()['floatingips']] for tenant in config.tenants: fips = [fip for user in config.users if tenant['name'] == user.get('tenant') and user['enabled'] and not user.get('deleted') for fip in get_fips(user)] return set(fips) def filter_users(self): users = [] for user in config.users: if user.get('deleted'): continue if self.src_cloud.tenant_exists(user.get('tenant')) or\ self.src_cloud.user_has_not_primary_tenants(user['name']): users.append(user['name']) return self._get_keystone_resources('users', users) def filter_tenants(self): tenants = [i['name'] for i in config.tenants] return self._get_keystone_resources('tenants', tenants) def filter_roles(self): roles = [i['name'] for i in config.roles] return self._get_keystone_resources('roles', roles) def filter_vms(self): vms = self.migration_utils.get_all_vms_from_config() vms_names = [vm['name'] for vm in vms if not vm.get('broken')] opts = {'search_opts': {'all_tenants': 1}} return [i for i in self.src_cloud.novaclient.servers.list(**opts) if i.name in vms_names] def filter_flavors(self, filter_only_private=False): flavors = [] if filter_only_private: nova_args = {'is_public': None} else: nova_args = None all_flavors = config.flavors for tenant in config.tenants: if tenant.get('flavors'): all_flavors += [flavor for flavor in tenant['flavors']] for flavor in all_flavors: if filter_only_private: if flavor.get('is_public') == False: flavors.append(flavor['name']) elif 'is_public' not in flavor or flavor.get('is_public'): flavors.append(flavor['name']) return self._get_nova_resources('flavors', flavors, nova_args) def filter_keypairs(self): return self.src_cloud.get_users_keypairs() def filter_security_groups(self): sgs = [sg['name'] for i in config.tenants if 'security_groups' in i for sg in i['security_groups']] return self._get_neutron_resources('security_groups', sgs) def filter_images(self): all_images = self.migration_utils.get_all_images_from_config() images = [i['name'] for i in all_images if not i.get('broken')] return [i for i in self.src_cloud.glanceclient.images.list() if i.name in images] def filter_volumes(self): volumes = config.cinder_volumes [volumes.extend(i['cinder_volumes']) for i in config.tenants if 'cinder_volumes' in i and not i.get('deleted')] volumes.extend(config.cinder_volumes_from_images) volumes_names = [volume['display_name'] for volume in volumes] opts = {'search_opts': {'all_tenants': 1}} return [i for i in self.src_cloud.cinderclient.volumes.list(**opts) if i.display_name in volumes_names] def _get_neutron_resources(self, res, names): _list = getattr(self.src_cloud.neutronclient, 'list_' + res)() return {res: [i for i in _list[res] if i['name'] in names]} def _get_nova_resources(self, res, names, args=None): client = getattr(self.src_cloud.novaclient, res) if args: return [i for i in client.list(**args) if i.name in names] else: return [i for i in client.list() if i.name in names] def _get_keystone_resources(self, res, names): client = getattr(self.src_cloud.keystoneclient, res) return [i for i in client.list() if i.name in names] def get_vms_with_fip_associated(self): vms = config.vms [vms.extend(i['vms']) for i in config.tenants if 'vms' in i] return [vm['name'] for vm in vms if vm.get('fip')] def tenant_exists(self, keystone_client, tenant_id): try: keystone_client.get(tenant_id) except ks_exceptions.NotFound: return False return True