/*
* Copyright (c) 2012-2015 iWave Software LLC
* All Rights Reserved
*/
package com.emc.sa.service.vipr.block;
import java.net.URI;
import java.util.List;
import com.emc.sa.engine.bind.Bindable;
import com.emc.sa.engine.bind.BindingUtils;
import com.emc.sa.engine.service.Service;
import com.emc.sa.service.vipr.ViPRService;
import com.emc.sa.service.vipr.block.BlockStorageUtils.HostVolumeParams;
import com.emc.sa.service.vipr.block.BlockStorageUtils.VolumeTable;
import com.google.common.collect.Lists;
@Service("CreateBlockStorageForHost")
public class CreateBlockStorageForHostService extends ViPRService {
@Bindable(itemType = VolumeTable.class)
protected VolumeTable[] volumeTable;
@Bindable
protected HostVolumeParams hostVolumeParams = new HostVolumeParams();
protected List<CreateBlockVolumeForHostHelper> createBlockVolumeHelpers = Lists.newArrayList();
@Override
public void init() throws Exception {
super.init();
// for each pair of volume name and size, create a createBlockVolumeHelper
for (VolumeTable volumes : volumeTable) {
CreateBlockVolumeForHostHelper createBlockVolumeForHostHelper = new CreateBlockVolumeForHostHelper();
BindingUtils.bind(createBlockVolumeForHostHelper, BlockStorageUtils.createParam(volumes, hostVolumeParams));
createBlockVolumeHelpers.add(createBlockVolumeForHostHelper);
}
}
@Override
public void precheck() {
for (CreateBlockVolumeForHostHelper helper : createBlockVolumeHelpers) {
helper.precheck();
}
BlockStorageUtils.checkVolumeLimit(getClient(), hostVolumeParams.project);
}
@Override
public void execute() {
if (!createBlockVolumeHelpers.isEmpty()) {
List<URI> volumeIds = Lists.newArrayList();
volumeIds.addAll(BlockStorageUtils.createMultipleVolumes(createBlockVolumeHelpers));
createBlockVolumeHelpers.get(0).exportVolumes(volumeIds);
}
}
}