package org.zstack.test.deployer;
import org.springframework.beans.factory.annotation.Autowire;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.zstack.header.storage.primary.PrimaryStorageInventory;
import org.zstack.header.zone.ZoneInventory;
import org.zstack.sdk.AddCephPrimaryStorageAction;
import org.zstack.storage.ceph.primary.CephPrimaryStorageSimulatorConfig;
import org.zstack.test.Api;
import org.zstack.test.ApiSenderException;
import org.zstack.test.deployer.schema.CephPrimaryStorageConfig;
import org.zstack.test.deployer.schema.DeployerConfig;
import org.zstack.utils.DebugUtils;
import org.zstack.utils.SizeUtils;
import org.zstack.utils.gson.JSONObjectUtil;
import java.util.List;
import static java.util.Arrays.asList;
@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE)
public class CephPrimaryStorageDeployer implements PrimaryStorageDeployer<CephPrimaryStorageConfig> {
@Autowired
private CephPrimaryStorageSimulatorConfig sconfig;
public void deploy(List<CephPrimaryStorageConfig> primaryStorages, ZoneInventory zone, DeployerConfig config, Deployer deployer) throws ApiSenderException {
Api api = deployer.getApi();
for (CephPrimaryStorageConfig c : primaryStorages) {
CephPrimaryStorageSimulatorConfig.CephPrimaryStorageConfig sc = new CephPrimaryStorageSimulatorConfig.CephPrimaryStorageConfig();
sc.fsid = c.getFsid();
DebugUtils.Assert(sc.fsid != null, "fsid cannot be null");
sc.totalCapacity = SizeUtils.sizeStringToBytes(c.getTotalCapacity());
sc.availCapacity = SizeUtils.sizeStringToBytes(c.getAvailableCapacity());
sconfig.config.put(c.getName(), sc);
AddCephPrimaryStorageAction action = new AddCephPrimaryStorageAction();
action.name = c.getName();
action.description = c.getDescription();
action.sessionId = api.getAdminSession().getUuid();
action.zoneUuid = zone.getUuid();
action.monUrls = asList(c.getMonUrl().split(","));
AddCephPrimaryStorageAction.Result res = action.call().throwExceptionIfError();
deployer.primaryStorages.put(action.name, JSONObjectUtil.rehashObject(res.value.getInventory(), PrimaryStorageInventory.class));
}
}
@Override
public Class<CephPrimaryStorageConfig> getSupportedDeployerClassType() {
return CephPrimaryStorageConfig.class;
}
}