diff --git a/nova/tests/virt/libvirt/test_libvirt.py b/nova/tests/virt/libvirt/test_libvirt.py index bd1d0f90f3a..06016db84b1 100644 --- a/nova/tests/virt/libvirt/test_libvirt.py +++ b/nova/tests/virt/libvirt/test_libvirt.py @@ -722,6 +722,21 @@ def test_get_guest_config(self): self.assertEquals(cfg.clock.timers[1].tickpolicy, "catchup") + def test_get_guest_config_windows(self): + conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True) + instance_ref = db.instance_create(self.context, self.test_instance) + instance_ref['os_type'] = 'windows' + + disk_info = blockinfo.get_disk_info(CONF.libvirt_type, + instance_ref) + cfg = conn.get_guest_config(instance_ref, + _fake_network_info(self.stubs, 1), + None, disk_info) + + self.assertEquals(type(cfg.clock), + vconfig.LibvirtConfigGuestClock) + self.assertEquals(cfg.clock.offset, "localtime") + def test_get_guest_config_with_two_nics(self): conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True) instance_ref = db.instance_create(self.context, self.test_instance) diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 1f96e066d96..65704bbc3de 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -2886,8 +2886,17 @@ def get_guest_config(self, instance, network_info, image_meta, guest.acpi = True guest.apic = True + # NOTE(mikal): Microsoft Windows expects the clock to be in + # "localtime". If the clock is set to UTC, then you can use a + # registry key to let windows know, but Microsoft says this is + # buggy in http://support.microsoft.com/kb/2687252 clk = vconfig.LibvirtConfigGuestClock() - clk.offset = "utc" + if instance['os_type'] == 'windows': + LOG.info(_('Configuring timezone for windows instance to ' + 'localtime'), instance=instance) + clk.offset = 'localtime' + else: + clk.offset = 'utc' guest.set_clock(clk) if CONF.libvirt_type == "kvm":