From 5fcaa5a659ca7d4658e7d9b601f541daf8b0bfe0 Mon Sep 17 00:00:00 2001 From: Edison Su Date: Thu, 19 Jan 2012 15:04:36 -0800 Subject: [PATCH] for windows vm, use localtime --- .../computing/LibvirtComputingResource.java | 18 +++-- .../resource/computing/LibvirtVMDef.java | 66 +++++++++++++++++++ 2 files changed, 77 insertions(+), 7 deletions(-) diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java index 0eb779c62bb..28f27d276db 100755 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java @@ -59,10 +59,7 @@ import org.libvirt.DomainInterfaceStats; import org.libvirt.DomainSnapshot; import org.libvirt.LibvirtException; import org.libvirt.NodeInfo; -import org.libvirt.StoragePool; -import org.libvirt.StoragePoolInfo; -import org.libvirt.StorageVol; -import org.libvirt.StorageVolInfo; + import com.cloud.agent.api.Answer; import com.cloud.agent.api.AttachIsoCommand; @@ -155,7 +152,6 @@ import com.cloud.agent.api.to.StorageFilerTO; import com.cloud.agent.api.to.VirtualMachineTO; import com.cloud.agent.api.to.VolumeTO; import com.cloud.agent.resource.computing.KVMHABase.NfsStoragePool; -import com.cloud.agent.resource.computing.LibvirtStorageVolumeDef.volFormat; import com.cloud.agent.resource.computing.LibvirtVMDef.ConsoleDef; import com.cloud.agent.resource.computing.LibvirtVMDef.DevicesDef; import com.cloud.agent.resource.computing.LibvirtVMDef.DiskDef; @@ -168,12 +164,12 @@ import com.cloud.agent.resource.computing.LibvirtVMDef.InterfaceDef; import com.cloud.agent.resource.computing.LibvirtVMDef.InterfaceDef.hostNicType; import com.cloud.agent.resource.computing.LibvirtVMDef.SerialDef; import com.cloud.agent.resource.computing.LibvirtVMDef.TermPolicy; +import com.cloud.agent.resource.computing.LibvirtVMDef.ClockDef; import com.cloud.agent.resource.virtualnetwork.VirtualRoutingResource; import com.cloud.agent.storage.KVMPhysicalDisk; import com.cloud.agent.storage.KVMPhysicalDisk.PhysicalDiskFormat; import com.cloud.agent.storage.KVMStoragePool; import com.cloud.agent.storage.KVMStoragePoolManager; -import com.cloud.agent.storage.LibvirtStorageAdaptor; import com.cloud.dc.Vlan; import com.cloud.exception.InternalErrorException; import com.cloud.host.Host.Type; @@ -207,7 +203,7 @@ import com.cloud.vm.DiskProfile; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.VirtualMachineName; -import com.xensource.xenapi.Connection; + /** @@ -2272,6 +2268,14 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv term.setPowerOffPolicy("destroy"); term.setRebootPolicy("restart"); vm.addComp(term); + + ClockDef clock = new ClockDef(); + if (vmTO.getOs().startsWith("Windows")) { + clock.setClockOffset(ClockDef.ClockOffset.LOCALTIME); + clock.setTimer("rtc", "catchup", null); + } + + vm.addComp(clock); DevicesDef devices = new DevicesDef(); devices.setEmulatorPath(_hypervisorPath); diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtVMDef.java b/agent/src/com/cloud/agent/resource/computing/LibvirtVMDef.java index 89473a22b0c..b1b41f618b3 100644 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtVMDef.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtVMDef.java @@ -183,6 +183,72 @@ public class LibvirtVMDef { } } + public static class ClockDef { + public enum ClockOffset { + UTC("utc"), + LOCALTIME("localtime"), + TIMEZONE("timezone"), + VARIABLE("variable"); + + private String _offset; + private ClockOffset(String offset) { + _offset = offset; + } + @Override + public String toString() { + return _offset; + } + } + private ClockOffset _offset; + private String _timerName; + private String _tickPolicy; + private String _track; + + public ClockDef() { + _offset = ClockOffset.UTC; + } + + public void setClockOffset(ClockOffset offset) { + _offset = offset; + } + + public void setTimer(String timerName, String tickPolicy, String track) { + _timerName = timerName; + _tickPolicy = tickPolicy; + _track = track; + } + + @Override + public String toString() { + StringBuilder clockBuilder = new StringBuilder(); + clockBuilder.append("\n"); + if (_timerName != null) { + clockBuilder.append("\n"); + clockBuilder.append("\n"); + } + clockBuilder.append("\n"); + return clockBuilder.toString(); + } + } + public static class DevicesDef { private String _emulator; private final Map> devices = new HashMap>();