def _init_features(self): """Sets up and initializes E-Series feature support map.""" self.features = na_utils.Features() self.api_operating_mode, self.api_version = self.get_eseries_api_info( verify=False) api_version_tuple = tuple(int(version) for version in self.api_version.split('.')) asup_api_valid_version = self._validate_version( self.ASUP_VALID_VERSION, api_version_tuple) ssc_api_valid_version = any(self._validate_version(valid_version, api_version_tuple) for valid_version in self.SSC_VALID_VERSIONS) self.features.add_feature('AUTOSUPPORT', supported=asup_api_valid_version, min_version=self._version_tuple_to_str( self.ASUP_VALID_VERSION)) self.features.add_feature('SSC_API_V2', supported=ssc_api_valid_version, min_version=self._version_tuple_to_str( self.SSC_VALID_VERSIONS[0]))
def _init_features(self): """Set up the repository of available Data ONTAP features.""" self.features = na_utils.Features()
class FakeEseriesClient(object): features = na_utils.Features() def __init__(self, *args, **kwargs): self.features.add_feature('AUTOSUPPORT') self.features.add_feature('SSC_API_V2') self.features.add_feature('REST_1_3_RELEASE') self.features.add_feature('REST_1_4_RELEASE') def list_storage_pools(self): return STORAGE_POOLS def register_storage_system(self, *args, **kwargs): return { 'freePoolSpace': '17055871480319', 'driveCount': 24, 'wwn': '60080E500023C73400000000515AF323', 'id': '1', 'hotSpareSizeAsString': '0', 'hostSparesUsed': 0, 'types': '', 'hostSpareCountInStandby': 0, 'status': 'optimal', 'trayCount': 1, 'usedPoolSpaceAsString': '37452115456', 'ip2': '10.63.165.216', 'ip1': '10.63.165.215', 'freePoolSpaceAsString': '17055871480319', 'hotSpareCount': 0, 'hotSpareSize': '0', 'name': 'stle2600-7_8', 'usedPoolSpace': '37452115456', 'driveTypes': ['sas'], 'unconfiguredSpaceByDriveType': {}, 'unconfiguredSpaceAsStrings': '0', 'model': '2650', 'unconfiguredSpace': '0' } def list_volume(self, volume_id): return VOLUME def list_volumes(self): return [VOLUME] def delete_volume(self, vol): pass def create_host_group(self, name): return MULTIATTACH_HOST_GROUP def get_host_group(self, ref): return MULTIATTACH_HOST_GROUP def list_host_groups(self): return [MULTIATTACH_HOST_GROUP, FOREIGN_HOST_GROUP] def get_host_group_by_name(self, name, *args, **kwargs): host_groups = self.list_host_groups() return [host_group for host_group in host_groups if host_group['label'] == name][0] def set_host_group_for_host(self, *args, **kwargs): pass def create_host_with_ports(self, *args, **kwargs): return HOST def list_hosts(self): return [HOST, HOST_2] def get_host(self, *args, **kwargs): return HOST def create_volume(self, *args, **kwargs): return VOLUME def create_volume_mapping(self, *args, **kwargs): return VOLUME_MAPPING def get_volume_mappings(self): return [VOLUME_MAPPING] def get_volume_mappings_for_volume(self, volume): return [VOLUME_MAPPING] def get_volume_mappings_for_host(self, host_ref): return [VOLUME_MAPPING] def get_volume_mappings_for_host_group(self, hg_ref): return [VOLUME_MAPPING] def delete_volume_mapping(self): return def move_volume_mapping_via_symbol(self, map_ref, to_ref, lun_id): return {'lun': lun_id} def list_storage_system(self): return STORAGE_SYSTEM def list_storage_systems(self): return [STORAGE_SYSTEM] def list_snapshot_groups(self): return [SNAPSHOT_GROUP] def list_snapshot_images(self): return [SNAPSHOT_IMAGE] def list_snapshot_image(self, *args, **kwargs): return SNAPSHOT_IMAGE def create_cg_snapshot_view(self, *args, **kwargs): return SNAPSHOT_VOLUME def list_host_types(self): return [ { 'id': '4', 'code': 'AIX', 'name': 'AIX', 'index': 4 }, { 'id': '5', 'code': 'IRX', 'name': 'IRX', 'index': 5 }, { 'id': '6', 'code': 'LnxALUA', 'name': 'LnxALUA', 'index': 6 } ] def list_hardware_inventory(self): return HARDWARE_INVENTORY def get_eseries_api_info(self, verify=False): return 'Proxy', '1.53.9010.0005' def set_counter(self, key, value): pass def add_autosupport_data(self, *args): pass def get_serial_numbers(self): return FAKE_ASUP_DATA.get('controller1-serial'), FAKE_ASUP_DATA.get( 'controller2-serial') def get_model_name(self): pass def api_operating_mode(self): pass def get_firmware_version(self): return FAKE_ASUP_DATA['system-version'] def create_volume_copy_job(self, *args, **kwargs): return VOLUME_COPY_JOB def list_vol_copy_job(self, *args, **kwargs): return VOLUME_COPY_JOB def delete_vol_copy_job(self, *args, **kwargs): pass def create_snapshot_image(self, *args, **kwargs): return SNAPSHOT_IMAGE def create_snapshot_volume(self, *args, **kwargs): return SNAPSHOT_VOLUME def list_snapshot_volumes(self, *args, **kwargs): return [SNAPSHOT_VOLUME] def list_snapshot_volume(self, *args, **kwargs): return SNAPSHOT_IMAGE def create_snapshot_group(self, *args, **kwargs): return SNAPSHOT_GROUP def list_snapshot_group(self, *args, **kwargs): return SNAPSHOT_GROUP def delete_snapshot_volume(self, *args, **kwargs): pass def list_target_wwpns(self, *args, **kwargs): return [WWPN_2] def update_stored_system_password(self, *args, **kwargs): pass def update_snapshot_volume(self, *args, **kwargs): return SNAPSHOT_VOLUME def delete_snapshot_image(self, *args, **kwargs): pass def delete_snapshot_group(self, *args, **kwargs): pass def restart_snapshot_volume(self, *args, **kwargs): pass def create_consistency_group(self, *args, **kwargs): return FAKE_CONSISTENCY_GROUP def delete_consistency_group(self, *args, **kwargs): pass def list_consistency_groups(self, *args, **kwargs): return [FAKE_CONSISTENCY_GROUP] def remove_consistency_group_member(self, *args, **kwargs): pass def add_consistency_group_member(self, *args, **kwargs): pass def list_backend_store(self, key): return {} def save_backend_store(self, key, val): pass def create_consistency_group_snapshot(self, *args, **kwargs): return [SNAPSHOT_IMAGE] def get_consistency_group_snapshots(self, *args, **kwargs): return [SNAPSHOT_IMAGE] def delete_consistency_group_snapshot(self, *args, **kwargs): pass
def setUp(self): super(FeaturesTestCase, self).setUp() self.features = na_utils.Features()