/*
* Copyright (c) 2012-2015 iWave Software LLC
* All Rights Reserved
*/
package com.emc.sa.service.vmware.block.tasks;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import com.emc.sa.engine.ExecutionTask;
import com.google.common.collect.Sets;
import com.iwave.ext.vmware.HostStorageAPI;
import com.iwave.ext.vmware.VMwareUtils;
import com.vmware.vim25.HostScsiDisk;
import com.vmware.vim25.mo.Datastore;
import com.vmware.vim25.mo.HostSystem;
public class FindLunsBackingDatastore extends ExecutionTask<Set<String>> {
private final HostSystem host;
private final Datastore datastore;
public FindLunsBackingDatastore(HostSystem host, Datastore datastore) {
this.host = host;
this.datastore = datastore;
provideDetailArgs(host.getName(), datastore.getName());
}
@Override
public Set<String> executeTask() throws Exception {
List<HostScsiDisk> disks = new HostStorageAPI(host).listDisks(datastore);
Set<String> luns = Sets.newHashSet();
for (HostScsiDisk disk : disks) {
if (!validateCanonicalPrefix(disk.getCanonicalName())) {
logError("FindLunsBackingDatastore.failure.invalidprefix", disk.getCanonicalName());
}
String volumeWwn = VMwareUtils.getDiskWwn(disk);
if (StringUtils.isNotBlank(volumeWwn)) {
luns.add(volumeWwn);
}
}
return luns;
}
private boolean validateCanonicalPrefix(final String canonicalName) {
if (canonicalName.startsWith(VMwareUtils.CANONICAL_NAME_PREFIX)
|| canonicalName.startsWith(VMwareUtils.ALTERNATE_CANONICAL_NAME_PREFIX)) {
return true;
}
return false;
}
}