/*
* Copyright (c) 2012-2015 iWave Software LLC
* All Rights Reserved
*/
package com.emc.sa.service.linux;
import java.util.List;
import com.emc.sa.engine.ExecutionUtils;
import com.emc.sa.engine.bind.Bindable;
import com.emc.sa.engine.service.Service;
import com.emc.sa.service.ArtificialFailures;
import com.emc.sa.service.vipr.block.CreateBlockVolumeForHostHelper;
import com.emc.storageos.model.block.BlockObjectRestRep;
import com.google.common.collect.Lists;
@Service("Linux-CreateAndMountBlockVolume")
public class CreateAndMountVolumeService extends LinuxService {
@Bindable
private CreateBlockVolumeForHostHelper createVolumeHelper = new CreateBlockVolumeForHostHelper();
protected MountBlockVolumeHelper mountBlockVolumeHelper;
@Override
public void init() throws Exception {
super.init();
mountBlockVolumeHelper = MountBlockVolumeHelper.createHelper(linuxSystem, hostPorts);
}
@Override
public void precheck() throws Exception {
super.precheck();
createVolumeHelper.precheck();
mountBlockVolumeHelper.precheck();
}
@Override
public void execute() throws Exception {
BlockObjectRestRep volume = createVolume();
acquireHostsLock();
refreshStorage(volume);
artificialFailure(ArtificialFailures.ARTIFICIAL_FAILURE_LINUX_MOUNT_VOLUME);
mountVolume(volume);
}
private BlockObjectRestRep createVolume() {
List<BlockObjectRestRep> volumes = createVolumeHelper.createAndExportVolumes();
if (volumes.size() != 1) {
ExecutionUtils.fail("failTask.linux.createAndMount", args(volumes.size()));
}
return volumes.get(0);
}
private void refreshStorage(BlockObjectRestRep volume) {
mountBlockVolumeHelper.refreshStorage(Lists.newArrayList(volume));
}
private void mountVolume(BlockObjectRestRep volume) {
mountBlockVolumeHelper.mountVolume(volume);
}
}