'Method to query the array for SLO and Workloads.
Takes the arrayinfolist object and generates a set which has
all available SLO & Workload combinations
:param array_info: the array information
:returns: finalarrayinfolist
:raises: VolumeBackendAPIException:'

def _get_slo_workload_combinations(self, array_info):

    try:
        array = array_info['SerialNumber']
        if self.failover:
            array = self.active_backend_id
        slo_settings = self.rest.get_slo_list(array)
        slo_settings = [x for x in slo_settings if (x.lower() not in ['none'])]
        workload_settings = self.rest.get_workload_settings(array)
        workload_settings.append('None')
        slo_workload_set = set([('%(slo)s:%(workload)s' % {'slo': slo, 'workload': workload}) for slo in slo_settings for workload in workload_settings])
        slo_workload_set.add('None:None')
        finalarrayinfolist = []
        for sloWorkload in slo_workload_set:
            temparray_info = array_info.copy()
            (slo, workload) = sloWorkload.split(':')
            temparray_info['SLO'] = slo
            temparray_info['Workload'] = workload
            finalarrayinfolist.append(temparray_info)
    except Exception as e:
        exception_message = (_('Unable    to    get    the    SLO/Workload    combinations    from    the    array.    Exception    received    was    %(e)s') % {'e': six.text_type(e)})
        LOG.error(exception_message)
        raise exception.VolumeBackendAPIException(data=exception_message)
    return finalarrayinfolist
