/*
* Copyright (c) 2012-2015 iWave Software LLC
* All Rights Reserved
*/
package com.emc.sa.service.vmware.block;
import static com.emc.sa.service.ServiceParams.DATASTORE_NAME;
import static com.emc.sa.service.ServiceParams.MULTIPATH_POLICY;
import static com.emc.sa.service.ServiceParams.STORAGE_IO_CONTROL;
import static com.emc.sa.service.ServiceParams.VOLUMES;
import java.net.URI;
import com.emc.sa.engine.bind.Bindable;
import com.emc.sa.engine.bind.Param;
import com.emc.sa.engine.service.Service;
import com.emc.sa.service.vipr.block.BlockStorageUtils;
import com.emc.sa.service.vipr.block.ExportBlockVolumeHelper;
import com.emc.sa.service.vmware.VMwareHostService;
import com.emc.storageos.model.block.BlockObjectRestRep;
import com.vmware.vim25.mo.Datastore;
@Service("VMware-CreateVmfsDatastore")
public class CreateVmfsDatastoreService extends VMwareHostService {
@Param(VOLUMES)
protected URI volumeId;
@Param(DATASTORE_NAME)
protected String datastoreName;
@Param(value = MULTIPATH_POLICY, required = false)
protected String multipathPolicy;
@Param(value = STORAGE_IO_CONTROL, required = false)
protected Boolean storageIOControl;
@Bindable
protected ExportBlockVolumeHelper exportBlockVolumeHelper = new ExportBlockVolumeHelper();
private BlockObjectRestRep volume;
@Override
public boolean checkClusterConnectivity() {
return false;
}
@Override
public void precheck() throws Exception {
super.precheck();
exportBlockVolumeHelper.precheck();
acquireHostLock();
vmware.verifyDatastoreDoesNotExist(datacenter.getLabel(), datastoreName);
vmware.verifySupportedMultipathPolicy(host, multipathPolicy);
vmware.disconnect();
}
@Override
public void execute() throws Exception {
exportBlockVolumeHelper.exportVolumes();
volume = BlockStorageUtils.getVolume(volumeId);
connectAndInitializeHost();
vmware.refreshStorage(host, cluster);
Datastore datastore = vmware.createVmfsDatastore(host, cluster, hostId, volume, datastoreName);
vmware.setMultipathPolicy(host, cluster, multipathPolicy, volume);
vmware.setStorageIOControl(datastore, storageIOControl, true);
}
}