Search in sources :

Example 6 with SearchResultResourceRep

use of com.emc.storageos.model.search.SearchResultResourceRep in project coprhd-controller by CoprHD.

the class ExportService method searchInDb.

// Sometimes there are multiple entries for the same initiator
// and so we return a list here
private Boolean searchInDb(String port, List<Initiator> list, String protocol) {
    SearchedResRepList resRepList = new SearchedResRepList(ResourceTypeEnum.INITIATOR);
    Boolean found = false;
    String formattedStr = "";
    if (protocol.equalsIgnoreCase(Protocol.FC.name())) {
        int index = 0;
        while (index < (port.length())) {
            formattedStr += port.substring(index, index + 2).toUpperCase();
            index = index + 2;
            if (index < (port.length())) {
                formattedStr += ":";
            }
        }
    } else if (protocol.equalsIgnoreCase(Protocol.iSCSI.name())) {
        formattedStr = port;
    }
    // Finds the Initiator that includes the initiator port specified, if any.
    _dbClient.queryByConstraint(AlternateIdConstraint.Factory.getInitiatorPortInitiatorConstraint(formattedStr), resRepList);
    if (resRepList.iterator() != null) {
        for (SearchResultResourceRep res : resRepList) {
            Initiator initiator = _dbClient.queryObject(Initiator.class, res.getId());
            if ((initiator != null) && !(initiator.getInactive())) {
                list.add(initiator);
                _log.info("Found initiator in DB for port = {}", port);
                found = true;
            }
        }
    }
    return found;
}
Also used : Initiator(com.emc.storageos.db.client.model.Initiator) SearchResultResourceRep(com.emc.storageos.model.search.SearchResultResourceRep) SearchedResRepList(com.emc.storageos.api.service.impl.response.SearchedResRepList) AlternateIdConstraint(com.emc.storageos.db.client.constraint.AlternateIdConstraint)

Example 7 with SearchResultResourceRep

use of com.emc.storageos.model.search.SearchResultResourceRep in project coprhd-controller by CoprHD.

the class VirtualArrayService method getOtherSearchResults.

/**
 * Finds the virtual arrays for the initiator port with the passed
 * identifier and returns the id, name, and self link for those virtual
 * arrays. This API only supports fiber channel and iSCSI initiator ports,
 * and the passed port identifier must be the WWN or IQN of the port.
 *
 * Note that in order for an initiator to be associated with any virtual,
 * arrays it must be in an active network. The virtual arrays for the passed
 * initiator are those active virtual arrays associated with the storage
 * ports in the initiator's active network. If the initiator is not in a
 * network, an empty list is returned.
 *
 * parameter: 'initiator_port' The identifier of the initiator port.
 *
 * @param parameters The search parameters.
 * @param authorized Whether or not the caller is authorized.
 *
 * @return The search results specifying the virtual arrays for the
 *         initiator identified in the passed search parameters.
 */
@Override
protected SearchResults getOtherSearchResults(Map<String, List<String>> parameters, boolean authorized) {
    SearchResults result = new SearchResults();
    String[] searchCriteria = { SEARCH_INITIATOR_PORT, SEARCH_HOST, SEARCH_CLUSTER };
    validateSearchParameters(parameters, searchCriteria);
    Set<String> varrayIds = new HashSet<String>();
    for (Map.Entry<String, List<String>> entry : parameters.entrySet()) {
        if (entry.getKey().equals(SEARCH_INITIATOR_PORT)) {
            String initiatorId = parameters.get(SEARCH_INITIATOR_PORT).get(0);
            // Validate the user passed a value for the initiator port.
            ArgValidator.checkFieldNotEmpty(initiatorId, SEARCH_INITIATOR_PORT);
            // Validate the format of the passed initiator port.
            if (!EndpointUtility.isValidEndpoint(initiatorId, EndpointType.ANY)) {
                throw APIException.badRequests.initiatorPortNotValid();
            }
            _log.info("Searching for virtual arrays for initiator {}", initiatorId);
            varrayIds.addAll(ConnectivityUtil.getInitiatorVarrays(initiatorId, _dbClient));
            break;
        } else if (entry.getKey().equals(SEARCH_HOST)) {
            // find and validate host
            String hostId = parameters.get(SEARCH_HOST).get(0);
            URI hostUri = URI.create(hostId);
            ArgValidator.checkFieldNotEmpty(hostId, SEARCH_HOST);
            Host host = queryObject(Host.class, hostUri, false);
            verifyAuthorizedInTenantOrg(host.getTenant(), getUserFromContext());
            _log.info("looking for virtual arrays connected to host " + host.getHostName());
            varrayIds.addAll(getVarraysForHost(hostUri));
            break;
        } else if (entry.getKey().equals(SEARCH_CLUSTER)) {
            // find and validate cluster
            String clusterId = parameters.get(SEARCH_CLUSTER).get(0);
            URI clusterUri = URI.create(clusterId);
            ArgValidator.checkFieldNotEmpty(clusterId, SEARCH_CLUSTER);
            Cluster cluster = queryObject(Cluster.class, clusterUri, false);
            verifyAuthorizedInTenantOrg(cluster.getTenant(), getUserFromContext());
            _log.info("looking for virtual arrays connected to cluster " + cluster.getLabel());
            List<Set<String>> hostVarraySets = new ArrayList<Set<String>>();
            List<NamedElementQueryResultList.NamedElement> dataObjects = listChildren(clusterUri, Host.class, "label", "cluster");
            for (NamedElementQueryResultList.NamedElement dataObject : dataObjects) {
                Set<String> hostVarrays = getVarraysForHost(dataObject.getId());
                hostVarraySets.add(hostVarrays);
            }
            boolean first = true;
            for (Set<String> varrays : hostVarraySets) {
                if (first) {
                    varrayIds.addAll(varrays);
                    first = false;
                } else {
                    varrayIds.retainAll(varrays);
                }
            }
            break;
        }
    }
    // For each virtual array in the set create a search result
    // and add it to the search results list.
    List<SearchResultResourceRep> searchResultList = new ArrayList<SearchResultResourceRep>();
    if (!varrayIds.isEmpty()) {
        for (String varrayId : varrayIds) {
            URI varrayURI = URI.create(varrayId);
            VirtualArray varray = _dbClient.queryObject(VirtualArray.class, varrayURI);
            // Filter out those that are inactive or not accessible to the user.
            if (varray == null || varray.getInactive()) {
                _log.info("Could not find virtual array {} in the database, or " + "the virtual array is inactive", varrayURI);
                continue;
            }
            if (!authorized) {
                if (!_permissionsHelper.tenantHasUsageACL(URI.create(getUserFromContext().getTenantId()), varray)) {
                    _log.info("Virtual array {} is not accessible.", varrayURI);
                    continue;
                }
            }
            RestLinkRep selfLink = new RestLinkRep("self", RestLinkFactory.newLink(getResourceType(), varrayURI));
            SearchResultResourceRep searchResult = new SearchResultResourceRep(varrayURI, selfLink, varray.getLabel());
            searchResultList.add(searchResult);
        }
    }
    result.setResource(searchResultList);
    return result;
}
Also used : MapVirtualArray(com.emc.storageos.api.mapper.functions.MapVirtualArray) VirtualArray(com.emc.storageos.db.client.model.VirtualArray) Set(java.util.Set) HashSet(java.util.HashSet) StringSet(com.emc.storageos.db.client.model.StringSet) SearchResultResourceRep(com.emc.storageos.model.search.SearchResultResourceRep) ArrayList(java.util.ArrayList) VirtualArrayList(com.emc.storageos.model.varray.VirtualArrayList) RestLinkRep(com.emc.storageos.model.RestLinkRep) Cluster(com.emc.storageos.db.client.model.Cluster) Host(com.emc.storageos.db.client.model.Host) SearchResults(com.emc.storageos.model.search.SearchResults) URI(java.net.URI) StoragePortGroupRestRepList(com.emc.storageos.model.portgroup.StoragePortGroupRestRepList) VArrayAttributeList(com.emc.storageos.model.varray.VArrayAttributeList) NamedElementQueryResultList(com.emc.storageos.db.client.constraint.NamedElementQueryResultList) StoragePortList(com.emc.storageos.model.ports.StoragePortList) ArrayList(java.util.ArrayList) StoragePoolList(com.emc.storageos.model.pools.StoragePoolList) VirtualArrayConnectivityList(com.emc.storageos.model.varray.VirtualArrayConnectivityList) URIQueryResultList(com.emc.storageos.db.client.constraint.URIQueryResultList) VirtualArrayList(com.emc.storageos.model.varray.VirtualArrayList) AttributeList(com.emc.storageos.model.varray.AttributeList) List(java.util.List) AutoTierPolicyList(com.emc.storageos.model.block.tier.AutoTierPolicyList) BulkList(com.emc.storageos.api.service.impl.response.BulkList) VirtualPoolList(com.emc.storageos.model.vpool.VirtualPoolList) NetworkList(com.emc.storageos.model.varray.NetworkList) Map(java.util.Map) HashMap(java.util.HashMap) NamedElementQueryResultList(com.emc.storageos.db.client.constraint.NamedElementQueryResultList) HashSet(java.util.HashSet)

Example 8 with SearchResultResourceRep

use of com.emc.storageos.model.search.SearchResultResourceRep in project coprhd-controller by CoprHD.

the class VirtualPoolService method filterResultsList.

/**
 * Filters the SearchedResRepList by VirtualPoolType (e.g., block or file)
 *
 * @param user the current user
 * @param list a list of resource matching the search
 * @return a list filtered by virtual pool type
 */
protected SearchedResRepList filterResultsList(StorageOSUser user, SearchedResRepList list) {
    SearchedResRepList filteredResRepList = new SearchedResRepList();
    Iterator<SearchResultResourceRep> _queryResultIterator = list.iterator();
    ResRepFilter<SearchResultResourceRep> resrepFilter = new VirtualPoolTypeFilter<SearchResultResourceRep>(user, _permissionsHelper, this.getVirtualPoolType());
    filteredResRepList.setResult(new FilterIterator<SearchResultResourceRep>(_queryResultIterator, resrepFilter));
    return filteredResRepList;
}
Also used : SearchResultResourceRep(com.emc.storageos.model.search.SearchResultResourceRep) SearchedResRepList(com.emc.storageos.api.service.impl.response.SearchedResRepList)

Example 9 with SearchResultResourceRep

use of com.emc.storageos.model.search.SearchResultResourceRep in project coprhd-controller by CoprHD.

the class BlockProvider method findSnapshotsByProject.

private List<BlockSnapshotRestRep> findSnapshotsByProject(ViPRCoreClient client, URI project) {
    log.info("Finding snapshots by project {}", project);
    List<SearchResultResourceRep> snapshotRefs = client.blockSnapshots().performSearchBy(SearchConstants.PROJECT_PARAM, project);
    List<URI> ids = new ArrayList<>();
    for (SearchResultResourceRep ref : snapshotRefs) {
        ids.add(ref.getId());
    }
    List<BlockSnapshotRestRep> snapshots = client.blockSnapshots().getByIds(ids, null);
    log.info("Got snapshots: [{}]", snapshots.size());
    return snapshots;
}
Also used : BlockSnapshotRestRep(com.emc.storageos.model.block.BlockSnapshotRestRep) SearchResultResourceRep(com.emc.storageos.model.search.SearchResultResourceRep) ArrayList(java.util.ArrayList) URI(java.net.URI)

Example 10 with SearchResultResourceRep

use of com.emc.storageos.model.search.SearchResultResourceRep in project coprhd-controller by CoprHD.

the class BlockProvider method findVolumesByProject.

/**
 * Find all volumes by a project
 * @param client
 * @param project
 * @return  a list of volume REST representations.
 */
private List<VolumeRestRep> findVolumesByProject(ViPRCoreClient client, URI project) {
    log.info("Finding volumes by project {}", project);
    List<SearchResultResourceRep> volRefs = client.blockVolumes().performSearchBy(SearchConstants.PROJECT_PARAM, project);
    List<URI> ids = new ArrayList<>();
    for (SearchResultResourceRep volRef : volRefs) {
        ids.add(volRef.getId());
    }
    List<VolumeRestRep> volumes = client.blockVolumes().getByIds(ids, null);
    log.info("Got volumes: [{}]", volumes.size());
    return volumes;
}
Also used : SearchResultResourceRep(com.emc.storageos.model.search.SearchResultResourceRep) ArrayList(java.util.ArrayList) VolumeRestRep(com.emc.storageos.model.block.VolumeRestRep) URI(java.net.URI)

Aggregations

SearchResultResourceRep (com.emc.storageos.model.search.SearchResultResourceRep)19 SearchResults (com.emc.storageos.model.search.SearchResults)11 SearchedResRepList (com.emc.storageos.api.service.impl.response.SearchedResRepList)10 RestLinkRep (com.emc.storageos.model.RestLinkRep)8 ArrayList (java.util.ArrayList)8 List (java.util.List)8 URI (java.net.URI)7 BulkList (com.emc.storageos.api.service.impl.response.BulkList)6 ResRepFilter (com.emc.storageos.api.service.impl.response.ResRepFilter)5 URIQueryResultList (com.emc.storageos.db.client.constraint.URIQueryResultList)5 Map (java.util.Map)5 StringMap (com.emc.storageos.db.client.model.StringMap)3 ITLRestRepList (com.emc.storageos.model.block.export.ITLRestRepList)3 StorageOSUser (com.emc.storageos.security.authentication.StorageOSUser)3 NamedElementQueryResultList (com.emc.storageos.db.client.constraint.NamedElementQueryResultList)2 ExportGroup (com.emc.storageos.db.client.model.ExportGroup)2 Host (com.emc.storageos.db.client.model.Host)2 HashMap (java.util.HashMap)2 OrderMapper.toExecutionLogList (com.emc.sa.api.mapper.OrderMapper.toExecutionLogList)1 OrderMapper.toOrderLogList (com.emc.sa.api.mapper.OrderMapper.toOrderLogList)1