/*
* Copyright (c) 2012-2015 iWave Software LLC
* All Rights Reserved
*/
package com.emc.sa.service.vmware.block;
import static com.emc.sa.service.ServiceParams.DELETION_TYPE;
import static com.emc.sa.service.ServiceParams.HOST;
import static com.emc.sa.service.ServiceParams.VOLUMES;
import java.net.URI;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import com.emc.sa.engine.ExecutionUtils;
import com.emc.sa.engine.bind.Param;
import com.emc.sa.engine.service.Service;
import com.emc.sa.machinetags.KnownMachineTags;
import com.emc.sa.service.vipr.block.BlockStorageUtils;
import com.emc.sa.service.vmware.VMwareHostService;
import com.emc.storageos.model.block.BlockObjectRestRep;
import com.emc.storageos.model.block.VolumeDeleteTypeEnum;
import com.vmware.vim25.mo.Datastore;
@Service("VMware-RemoveBlockVolume")
public class RemoveBlockVolumeService extends VMwareHostService {
@Param(HOST)
protected URI hostId;
@Param(VOLUMES)
protected List<String> volumeIds;
@Param(DELETION_TYPE)
protected VolumeDeleteTypeEnum deletionType;
protected List<BlockObjectRestRep> volumes;
@Override
public void precheck() throws Exception {
super.precheck();
volumes = BlockStorageUtils.getBlockResources(uris(volumeIds));
}
@Override
public void execute() {
for (BlockObjectRestRep volume : volumes) {
String datastoreName = KnownMachineTags.getBlockVolumeVMFSDatastore(hostId, volume);
if (!StringUtils.isEmpty(datastoreName)) {
Datastore datastore = vmware.getDatastore(datacenter.getLabel(), datastoreName);
if (datastore != null) {
vmware.unmountVmfsDatastore(host, cluster, datastore);
}
}
}
for (BlockObjectRestRep volume : volumes) {
vmware.detachLuns(host, cluster, volume);
}
vmware.disconnect();
BlockStorageUtils.removeBlockResources(uris(volumeIds), deletionType);
connectAndInitializeHost();
vmware.refreshStorage(host, cluster);
// form is always passing hostId, never clusterId - need to figure out which it is.
String hostOrClusterId = BlockStorageUtils.getHostOrClusterId(hostId);
if (hostOrClusterId != null) {
ExecutionUtils.addAffectedResource(hostOrClusterId.toString());
}
}
}