package jetbrains.buildServer.clouds.vmware.stubs; import com.vmware.vim25.CustomizationSpec; import com.vmware.vim25.OptionValue; import com.vmware.vim25.VirtualMachineCloneSpec; import com.vmware.vim25.VirtualMachineRelocateDiskMoveOptions; import com.vmware.vim25.mo.ResourcePool; import com.vmware.vim25.mo.VirtualMachine; import java.util.Collections; import java.util.HashMap; import java.util.Map; /** * @author Sergey.Pak * Date: 5/16/2014 * Time: 4:36 PM */ public class FakeModel { private static final FakeModel myInstance = new FakeModel(); public static FakeModel instance() {return myInstance;} private final Map<String, FakeFolder> myFolders = new HashMap<String, FakeFolder>(); private final Map<String, ResourcePool> myResourcePools = new HashMap<String, ResourcePool>(); private final Map<String, FakeVirtualMachine> myVms = new HashMap<String, FakeVirtualMachine>(); private final Map<String, FakeDatacenter> myDatacenters = new HashMap<String, FakeDatacenter>(); private final Map<String, CustomizationSpec> myCustomizationSpecs = new HashMap<>(); public Map<String, FakeFolder> getFolders() { return myFolders; } public Map<String, ResourcePool> getResourcePools() { return myResourcePools; } public Map<String, FakeVirtualMachine> getVms() { return Collections.unmodifiableMap(myVms); } public Map<String, FakeDatacenter> getDatacenters() { return myDatacenters; } public Map<String, CustomizationSpec> getCustomizationSpecs() { return myCustomizationSpecs; } public FakeFolder getFolder(String name){ return myFolders.get(name); } public ResourcePool getResourcePool(String name){ return myResourcePools.get(name); } public FakeVirtualMachine getVirtualMachine(String name){ return myVms.get(name); } public FakeDatacenter getDatacenter(String name){ return myDatacenters.get(name); } public CustomizationSpec getCustomizationSpec(String name){ return myCustomizationSpecs.get(name); } public FakeFolder addFolder(String name){ final FakeFolder folder = new FakeFolder(name); myFolders.put(name, folder); return folder; } public void removeFolder(String name){ myFolders.remove(name); } public FakeResourcePool addResourcePool(String name){ final FakeResourcePool pool = new FakeResourcePool(name); myResourcePools.put(name, pool); return pool; } public void removeResourcePool(String name){ myResourcePools.remove(name); } public FakeVirtualMachine addVM(String name){ return addVM(name, false); } public FakeVirtualMachine addVM(String name, boolean isRunning, VirtualMachineCloneSpec spec){ final FakeVirtualMachine vm = new FakeVirtualMachine(name, name.contains("template"), isRunning); putVM(name, vm); if (spec != null && spec.getLocation()!= null && VirtualMachineRelocateDiskMoveOptions.createNewChildDiskBacking.name().equals(spec.getLocation().getDiskMoveType())){ //((FakeVirtualMachine)vm).set } if (spec != null && spec.getConfig() != null) { final OptionValue[] extraConfig = spec.getConfig().getExtraConfig(); if (extraConfig != null) { for (OptionValue optionValue : extraConfig) { vm.addCustomParam(optionValue.getKey(), String.valueOf(optionValue.getValue())); } } } return vm; } public FakeVirtualMachine addVM(String name, boolean isRunning){ return addVM(name, isRunning, null); } public FakeVirtualMachine putVM(String name, FakeVirtualMachine vm){ System.out.println("added VM " + name); myVms.put(name, vm); return vm; } public void removeVM(String name){ System.out.println("Removed VM " + name); myVms.remove(name); } public void addVMSnapshot(String vmName, String snapshotName){ final FakeVirtualMachine vm = myVms.get(vmName); if (vm == null) throw new IllegalArgumentException("Unable to find VM: " + vmName); vm.addSnapshot(snapshotName); } public void removeVmSnaphot(String vmName, String snapshotName){ final FakeVirtualMachine vm = myVms.get(vmName); if (vm == null) throw new IllegalArgumentException("Unable to find VM: " + vmName); vm.removeSnapshot(snapshotName); } public FakeDatacenter addDatacenter(String dcName){ final FakeDatacenter dc = new FakeDatacenter(dcName); myDatacenters.put(dcName, dc); return dc; } public void removeDatacenter(String dcName){ myDatacenters.remove(dcName); } public void clear(){ myFolders.clear(); myVms.clear(); myResourcePools.clear(); } }