package org.ovirt.engine.api.restapi.resource; import static org.ovirt.engine.api.restapi.resource.BackendVmsResource.SUB_COLLECTIONS; import javax.ws.rs.core.Response; import org.ovirt.engine.api.model.Action; import org.ovirt.engine.api.model.GlusterVolume; import org.ovirt.engine.api.model.GlusterVolumes; import org.ovirt.engine.api.model.VM; import org.ovirt.engine.api.resource.GlusterVolumeBricksResource; import org.ovirt.engine.api.resource.GlusterVolumeResource; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.glusteractions.GlusterVolumeParameters; import org.ovirt.engine.core.compat.Guid; public class BackendGlusterVolumeResource extends AbstractBackendActionableResource<VM, org.ovirt.engine.core.common.businessentities.VM> implements GlusterVolumeResource { private final BackendGlusterVolumesResource parent; private final String clusterId; public BackendGlusterVolumeResource(String clusterId, String id, BackendGlusterVolumesResource parent) { super(id, VM.class, org.ovirt.engine.core.common.businessentities.VM.class, SUB_COLLECTIONS); this.parent = parent; this.clusterId = clusterId; } @Override public GlusterVolume get() { // return performGet(VdcQueryType.GetVmByVmId, new GetVmByVmIdParameters(guid)); // FIXME: Hack to get given volume without writing VDSM code. Ideal way is to // invoke a separate VDSM command to fetch details of a single volume GlusterVolumes volumes = parent.list(); for(GlusterVolume volume : volumes.getGlusterVolumes()) { if(volume.getId().equals(id)) { return volume; } } return null; } @Override public Response start(Action action) { String volumeName = get().getVolumeName(); try { return performAction(VdcActionType.StartGlusterVolume, new GlusterVolumeParameters(Guid.createGuidFromString(getClusterId()), volumeName)); } catch (Exception e) { return handleError(e, false); } } @Override public Response stop(Action action) { String volumeName = get().getVolumeName(); try { return performAction(VdcActionType.StopGlusterVolume, new GlusterVolumeParameters(Guid.createGuidFromString(getClusterId()), volumeName)); } catch (Exception e) { return handleError(e, false); } } @Override public Response rebalanceStart(Action action) { String volumeName = get().getVolumeName(); try { return performAction(VdcActionType.RebalanceGlusterVolumeStart, new GlusterVolumeParameters(Guid.createGuidFromString(getClusterId()), volumeName)); } catch (Exception e) { return handleError(e, false); } } @Override public Response rebalanceStop(Action action) { String volumeName = get().getVolumeName(); try { return performAction(VdcActionType.RebalanceGlusterVolumeStop, new GlusterVolumeParameters(Guid.createGuidFromString(getClusterId()), volumeName)); } catch (Exception e) { return handleError(e, false); } } @Override public GlusterVolumeBricksResource getBricksResource() { return inject(new BackendGlusterBricksResource(getClusterId(), this)); } public String getClusterId() { return clusterId; } }