package org.zstack.test.deployer;
import org.zstack.header.configuration.InstanceOfferingInventory;
import org.zstack.header.exception.CloudRuntimeException;
import org.zstack.header.identity.SessionInventory;
import org.zstack.header.image.ImageInventory;
import org.zstack.header.network.l3.L3NetworkInventory;
import org.zstack.header.zone.ZoneInventory;
import org.zstack.network.service.virtualrouter.VirtualRouterConstant;
import org.zstack.sdk.CreateVirtualRouterOfferingAction;
import org.zstack.test.ApiSenderException;
import org.zstack.test.deployer.schema.DeployerConfig;
import org.zstack.test.deployer.schema.VirtualRouterOfferingConfig;
import org.zstack.utils.gson.JSONObjectUtil;
import java.util.List;
public class VirtualRouterOfferingDeployer implements InstanceOfferingDeployer<VirtualRouterOfferingConfig> {
@Override
public Class<VirtualRouterOfferingConfig> getSupportedDeployerClassType() {
return VirtualRouterOfferingConfig.class;
}
@Override
public void deploy(List<VirtualRouterOfferingConfig> offerings, DeployerConfig config, Deployer deployer) throws ApiSenderException {
for (VirtualRouterOfferingConfig ic : offerings) {
CreateVirtualRouterOfferingAction action = new CreateVirtualRouterOfferingAction();
L3NetworkInventory mgmtNw = deployer.l3Networks.get(ic.getManagementL3NetworkRef());
if (mgmtNw == null) {
throw new CloudRuntimeException(String.format("unable to find l3network[%s]", ic.getManagementL3NetworkRef()));
}
L3NetworkInventory publicNw = null;
if (ic.getPublicL3NetworkRef() != null) {
publicNw = deployer.l3Networks.get(ic.getPublicL3NetworkRef());
if (publicNw == null) {
throw new CloudRuntimeException(String.format("unable to find l3network[%s]", ic.getManagementL3NetworkRef()));
}
}
ImageInventory image = deployer.images.get(ic.getImageRef());
if (image == null) {
throw new CloudRuntimeException(String.format("unable to find image[%s]", ic.getImageRef()));
}
ZoneInventory zone = deployer.zones.get(ic.getZoneRef());
if (zone == null) {
throw new CloudRuntimeException(String.format("unable to find zone[%s]", ic.getZoneRef()));
}
SessionInventory session = ic.getAccountRef() == null ? deployer.getApi().getAdminSession() : deployer.loginByAccountRef(ic.getAccountRef(), config);
action.sessionId = session.getUuid();
action.allocatorStrategy = ic.getAllocatorStrategy();
action.cpuNum = (int) ic.getCpuNum();
action.description = ic.getDescription();
action.memorySize = deployer.parseSizeCapacity(ic.getMemoryCapacity());
action.name = ic.getName();
action.managementNetworkUuid = mgmtNw.getUuid();
action.type = VirtualRouterConstant.VIRTUAL_ROUTER_OFFERING_TYPE;
if (publicNw != null) {
action.publicNetworkUuid = publicNw.getUuid();
}
action.zoneUuid = zone.getUuid();
action.imageUuid = image.getUuid();
if (ic.getAccountRef() == null) {
action.isDefault = ic.isIsDefault();
}
CreateVirtualRouterOfferingAction.Result res = action.call().throwExceptionIfError();
InstanceOfferingInventory iinv = JSONObjectUtil.rehashObject(res.value.getInventory(), InstanceOfferingInventory.class);
deployer.instanceOfferings.put(iinv.getName(), iinv);
}
}
}