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>();