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.backup.BackupStorageInventory;
import org.zstack.sdk.AddCephBackupStorageAction;
import org.zstack.storage.ceph.backup.CephBackupStorageSimulatorConfig;
import org.zstack.test.Api;
import org.zstack.test.ApiSenderException;
import org.zstack.test.deployer.schema.CephBackupStorageConfig;
import org.zstack.test.deployer.schema.DeployerConfig;
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 CephBackupStorageDeployer implements BackupStorageDeployer<CephBackupStorageConfig> {
@Autowired
private CephBackupStorageSimulatorConfig sconfig;
@Override
public void deploy(List<CephBackupStorageConfig> backupStorages, DeployerConfig config, Deployer deployer) throws ApiSenderException {
Api api = deployer.getApi();
for (CephBackupStorageConfig c : backupStorages) {
CephBackupStorageSimulatorConfig.CephBackupStorageConfig sc = new CephBackupStorageSimulatorConfig.CephBackupStorageConfig();
sc.fsid = c.getFsid();
sc.availCapacity = SizeUtils.sizeStringToBytes(c.getAvailableCapacity());
sc.totalCapacity = SizeUtils.sizeStringToBytes(c.getTotalCapacity());
sconfig.config.put(c.getName(), sc);
AddCephBackupStorageAction action = new AddCephBackupStorageAction();
action.monUrls = asList(c.getMonUrl().split(","));
action.sessionId = api.getAdminSession().getUuid();
action.name = c.getName();
AddCephBackupStorageAction.Result res = action.call().throwExceptionIfError();
deployer.backupStorages.put(action.name, JSONObjectUtil.rehashObject(res.value.getInventory(), BackupStorageInventory.class));
}
}
@Override
public Class<CephBackupStorageConfig> getSupportedDeployerClassType() {
return CephBackupStorageConfig.class;
}
}