package io.cattle.platform.iaas.api.manager;
import io.cattle.platform.api.resource.jooq.AbstractJooqResourceManager;
import io.cattle.platform.core.constants.VolumeConstants;
import io.cattle.platform.core.dao.StoragePoolDao;
import io.cattle.platform.core.model.StoragePool;
import io.cattle.platform.core.model.Volume;
import io.cattle.platform.core.model.VolumeStoragePoolMap;
import io.cattle.platform.eventing.EventService;
import io.cattle.platform.object.meta.ObjectMetaDataManager;
import io.cattle.platform.object.util.ObjectUtils;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import org.apache.commons.lang.StringUtils;
public class VolumeManager extends AbstractJooqResourceManager {
@Inject
StoragePoolDao storagePoolDao;
@Inject
EventService eventService;
@Override
public String[] getTypes() {
return new String[] { "volume" };
}
@Override
public Class<?>[] getTypeClasses() {
return new Class<?>[] { Volume.class };
}
@Override
protected <T> T createAndScheduleObject(Class<T> clz, Map<String, Object> properties) {
String driver = (String)properties.get(VolumeConstants.FIELD_VOLUME_DRIVER);
String name = (String)properties.get(ObjectMetaDataManager.NAME_FIELD);
if (StringUtils.isNotEmpty(driver) && StringUtils.isNotEmpty(name)) {
String uri = String.format("%s:///%s", driver, name);
properties.put(VolumeConstants.FIELD_URI, uri);
properties.put(VolumeConstants.FIELD_DEVICE_NUM, -1);
}
T v = super.createAndScheduleObject(clz, properties);
if (!VolumeConstants.LOCAL_DRIVER.equals(driver)) {
Object aId = ObjectUtils.getAccountId(v);
if (aId != null) {
List<? extends StoragePool> pools = storagePoolDao.findStoragePoolByDriverName((Long)aId, driver);
if (pools.size() > 0) {
StoragePool sp = pools.get(0);
VolumeStoragePoolMap vspm = getObjectManager().newRecord(VolumeStoragePoolMap.class);
vspm.setStoragePoolId(sp.getId());
Long volumeId = (Long)ObjectUtils.getId(v);
vspm.setVolumeId(volumeId);
getObjectManager().create(vspm);
ObjectUtils.publishChanged(eventService, getObjectManager(), sp);
}
}
}
return v;
}
}