package io.cattle.platform.process.storagepool;
import io.cattle.platform.core.constants.StoragePoolConstants;
import io.cattle.platform.core.dao.VolumeDao;
import io.cattle.platform.core.model.Credential;
import io.cattle.platform.core.model.StoragePool;
import io.cattle.platform.core.model.StoragePoolHostMap;
import io.cattle.platform.core.model.Volume;
import io.cattle.platform.core.model.tables.CredentialTable;
import io.cattle.platform.engine.handler.HandlerResult;
import io.cattle.platform.engine.process.ProcessInstance;
import io.cattle.platform.engine.process.ProcessState;
import io.cattle.platform.engine.process.impl.ProcessCancelException;
import io.cattle.platform.process.base.AbstractDefaultProcessHandler;
import javax.inject.Inject;
import javax.inject.Named;
@Named
public class StoragePoolPurge extends AbstractDefaultProcessHandler {
@Inject
VolumeDao volumeDao;
@Override
public HandlerResult handle(ProcessState state, ProcessInstance process) {
StoragePool registry = (StoragePool) state.getResource();
if (registry.getKind().equalsIgnoreCase(StoragePoolConstants.KIND_REGISTRY)){
for (Credential cred : getObjectManager().find(Credential.class, CredentialTable.CREDENTIAL.REGISTRY_ID,
registry.getId(), CredentialTable.CREDENTIAL.REMOVED, null)) {
try {
deactivateThenScheduleRemove(cred, state.getData());
} catch (ProcessCancelException e) {
//Ignore
}
}
return null;
}
for (Volume v : volumeDao.findNonRemovedVolumesOnPool(registry.getId())) {
deactivateThenRemove(v, null);
}
for (StoragePoolHostMap map : objectManager.children(registry, StoragePoolHostMap.class)) {
deactivateThenRemove(map, null);
}
return null;
}
}