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 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 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
    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