package org.zstack.test;
import org.zstack.core.MessageCommandRecorder;
import org.zstack.header.apimediator.ApiMediatorConstant;
import org.zstack.header.identity.SessionInventory;
import org.zstack.header.vm.*;
import org.zstack.sdk.ApiException;
import org.zstack.sdk.CloneVmInstanceResults;
import org.zstack.sdk.CreateVmInstanceAction;
import org.zstack.utils.Utils;
import org.zstack.utils.gson.JSONObjectUtil;
import org.zstack.utils.logging.CLogger;
import java.util.ArrayList;
import java.util.List;
/**
*/
public class VmCreator {
private static final CLogger logger = Utils.getLogger(VmCreator.class);
List<String> l3NetworkUuids = new ArrayList<>();
public String imageUuid;
public String instanceOfferingUuid;
List<String> diskOfferingUuids = new ArrayList<>();
public String zoneUuid;
public String clusterUUid;
public String hostUuid;
public String primaryStorageUuidForRootVolume;
public String defaultL3NetworkUuid;
public String description;
public String name = "vm";
public List<String> systemTags = new ArrayList<>();
public List<String> userTags;
public String rootDiskOfferingUuid;
public int timeout = 15;
public SessionInventory session;
public VmCreationStrategy strategy;
final Api api;
public VmCreator(Api api) {
this.api = api;
}
public void addL3Network(String uuid) {
l3NetworkUuids.add(uuid);
}
public void addDisk(String uuid) {
diskOfferingUuids.add(uuid);
}
public VmInstanceInventory create() throws ApiSenderException {
MessageCommandRecorder.reset();
MessageCommandRecorder.start(APICreateVmInstanceMsg.class);
CreateVmInstanceAction action = new CreateVmInstanceAction();
action.clusterUuid = clusterUUid;
action.imageUuid = imageUuid;
action.name = name;
action.hostUuid = hostUuid;
action.dataDiskOfferingUuids = diskOfferingUuids;
action.instanceOfferingUuid = instanceOfferingUuid;
action.l3NetworkUuids = l3NetworkUuids;
action.defaultL3NetworkUuid = defaultL3NetworkUuid == null ? l3NetworkUuids.get(0) : defaultL3NetworkUuid;
action.type = VmInstanceConstant.USER_VM_TYPE;
action.zoneUuid = zoneUuid;
action.hostUuid = hostUuid;
action.rootDiskOfferingUuid = rootDiskOfferingUuid;
action.systemTags = systemTags;
action.userTags = userTags;
action.description = description;
action.primaryStorageUuidForRootVolume = primaryStorageUuidForRootVolume;
action.strategy = strategy == null ? null : strategy.toString();
action.sessionId = session == null ? api.getAdminSession().getUuid() : session.getUuid();
CreateVmInstanceAction.Result res = action.call();
api.throwExceptionIfNeed(res.error);
String callingChain = MessageCommandRecorder.endAndToString();
logger.debug(callingChain);
return JSONObjectUtil.rehashObject(res.value.getInventory(), VmInstanceInventory.class);
}
}