package io.cattle.platform.iaas.api.volume; import io.cattle.platform.api.action.ActionHandler; import io.cattle.platform.core.constants.SnapshotConstants; import io.cattle.platform.core.constants.VolumeConstants; import io.cattle.platform.core.model.Snapshot; import io.cattle.platform.core.model.Volume; import io.cattle.platform.object.ObjectManager; import io.cattle.platform.object.process.ObjectProcessManager; import io.cattle.platform.object.process.StandardProcess; import io.cattle.platform.object.util.DataAccessor; import io.github.ibuildthecloud.gdapi.request.ApiRequest; import javax.inject.Inject; import org.apache.commons.lang3.StringUtils; public class VolumeSnapshotActionHandler implements ActionHandler { @Inject ObjectManager objectManager; @Inject ObjectProcessManager processManager; @Override public String getName() { return VolumeConstants.PROCESS_SNAPSHOT; } @Override public Object perform(String name, Object obj, ApiRequest request) { if (!(obj instanceof Volume)) { return null; } Volume volume = (Volume)obj; Snapshot snapshot = objectManager.newRecord(Snapshot.class); snapshot.setKind(SnapshotConstants.TYPE); snapshot.setAccountId(volume.getAccountId()); snapshot.setVolumeId(volume.getId()); String snapshotName = DataAccessor.fromMap(request.getRequestObject()).withKey("name").as(String.class); if (StringUtils.isNotBlank(snapshotName)) { snapshot.setName(snapshotName); } snapshot = objectManager.create(snapshot); processManager.scheduleStandardProcess(StandardProcess.CREATE, snapshot, null); return objectManager.reload(snapshot); } }