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;
}
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;
}
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;
}
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;
}
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;
}
Aggregations