def get_free_disk(cls, system_id, except_disks=(), number=1): disks = [] for i in generic_get('drives', array_id=system_id): if re.match('^0*$', i['currentVolumeGroupRef']): if i['id'] not in except_disks: disks.append(str(i['id'].encode('utf-8').decode('ascii', 'ignore'))) if len(disks) == number: break if len(disks) < number: raise RuntimeError('RUNTIME ERROR - THERE ARE NO TWO FREE DISKS ON STORAGE!!!') return disks
def remove_BANANA_objects_by_REST(cls, system_id): try: for volume_copy in generic_get('volume_copies', array_id=system_id): s = (generic_get('volume', array_id=system_id, id=volume_copy['sourceVolume']))['label'] t = (generic_get('volume', array_id=system_id, id=volume_copy['targetVolume']))['label'] if re.search('BANANA_VOLUME', s) and re.search('BANANA_VOLUME', t): cls.log.debug("DELETE VOLUME COPY'{0}' BY REST!".format(volume_copy['id'])) generic_delete('volume_copy', array_id=system_id, id=volume_copy['id']) for snapshot_group in generic_get('snapshot_groups', array_id=system_id): if re.search('BANANA_SNAPSHOT', snapshot_group['label']): cls.log.debug("DELETE SNAPSHOT GROUP '{0}' BY REST!".format(snapshot_group['label'])) generic_delete('snapshot_group', id=snapshot_group['id'], array_id=system_id) for volume in generic_get('volumes', array_id=system_id): if re.search('BANANA_VOLUME', volume['label']): cls.log.debug("DELETE VOLUME '{0}' BY REST!".format(volume['label'])) generic_delete('volume', id=volume['id'], array_id=system_id) for thin_volume in generic_get('thin_volumes', array_id=system_id): if re.search('BANANA_VOLUME', thin_volume['label']): cls.log.debug("DELETE THIN VOLUME '{0}' BY REST!".format(thin_volume['label'])) generic_delete('thin_volume', id=thin_volume['id'], array_id=system_id) for pool in generic_get('pools', array_id=system_id): if re.search('BANANA_POOL', pool['label']): cls.log.debug("DELETE POOL '{0}' BY REST!".format(pool['label'])) generic_delete('pool', id=pool['id'], array_id=system_id) for hostgroup in generic_get('host_groups', array_id=system_id): if re.search('BANANA_HOSTGROUP', hostgroup['label']): cls.log.debug("DELETE HOSTGROUP '{0}' BY REST!".format(hostgroup['label'])) generic_delete('host_group', id=hostgroup['id'], array_id=system_id) for storage_system in cls.get_system_list(): if re.match(r'^BANANA[0-9]?_', storage_system): cls.log.debug("DELETE STORAGE SYSTEM '{system_id}' BY REST!".format(system_id=storage_system)) generic_delete('storage-system', array_id=storage_system) # TODO Delete host except: print sys.exc_info()[0] return
def get_system_state(cls, system_id): snapshot_groups = dict((snapshot_group['id'],snapshot_group['label']) for snapshot_group in generic_get('snapshot_groups', array_id=system_id)) all_volumes = dict((volume['id'],volume['name']) for volume in generic_get('volumes', array_id=system_id)) all_volumes.update(dict((thin_volume['id'], thin_volume['name']) for thin_volume in generic_get('thin_volumes', array_id=system_id))) snapshots_for_print = ['(id: {0}, group: {1}, volume: {2})'.format(x['id'], snapshot_groups[x['pitGroupRef']], all_volumes[x['baseVol']]) for x in generic_get('snapshots', array_id=system_id)] snapshots_for_assertion = dict((x['id'], { 'group': snapshot_groups[x['pitGroupRef']], 'volume': all_volumes[x['baseVol']], }) for x in generic_get('snapshots', array_id=system_id)) return dict(storage_systems=cls.get_system_list(), pools=[j['label'] for j in generic_get('pools', array_id=system_id)], volumes=[j['name'] for j in generic_get('volumes', array_id=system_id)], thin_volumes=[j['name'] for j in generic_get('thin_volumes', array_id=system_id)], volume_copies=[j['id'] for j in generic_get('volume_copies', array_id=system_id)], hostgroups=[j['id'] for j in generic_get('host_groups', array_id=system_id)], hostgroups_for_print=["'{1}'({0})".format(j['id'], j['label']) for j in generic_get('host_groups', array_id=system_id)], hosts_before=[j['label'] for j in generic_get('hosts', array_id=system_id)], hosts_before_for_print=["'{1}'({0})".format(j['id'], j['label']) for j in generic_get('hosts', array_id=system_id)], snapshot_groups=[j['label'] for j in generic_get('snapshot_groups', array_id=system_id)], snapshot_groups_for_print=["'{1}'({0})".format(j['id'], j['label']) for j in generic_get('snapshot_groups', array_id=system_id)], snapshots=[j['id'] for j in generic_get('snapshots', array_id=system_id)], snapshots_for_print=snapshots_for_print, snapshots_for_assertion=snapshots_for_assertion, snapshot_volumes=[j['label'] for j in generic_get('snapshot_views', array_id=system_id)], volume_mappings=[j['lun'] for j in generic_get('volume_mappings', array_id=system_id)], )
def get_ips_by_REST(cls, system_id): raw_ethernet_interfaces_list = generic_get('ethernet-interfaces', array_id=system_id) actual_ips = [i['ipv4Address'] for i in raw_ethernet_interfaces_list if i['linkStatus'].strip() == 'up' and i['ipv4Enabled']] return actual_ips
def get_system_list(cls): objectBundle = generic_get('storage-systems') system_list = [s['id'] for s in objectBundle] return system_list