diff mbox

KVM test: Unattended install - Give Linux VMs time to shutdown cleanly

Message ID 1302647295-24257-1-git-send-email-lmr@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Lucas Meneghel Rodrigues April 12, 2011, 10:28 p.m. UTC
During unattended install, right after we receive the ACK from the guest
the test is deemed to be finished, and as shutdown_vm = yes, it'll try
to end the vm issuing a shutdown command to it. However, on virtually
all Linux guests an SSH server is not available at the end of install,
so KVM autotest will end the VM forcefully, which is not really safe,
although it has served us well so far.

We did not fix this 'problem' so far because on RHEL3, a supported
guest, the anaconda syntax does not support the 'poweroff' directive,
only 'reboot', so if we don't finish the VM right after the ACK from
guest we really can't prevent it from starting the install again,
getting an infinite loop.

Well then, let's restrict this behavior only to RHEL 3, and fix this
properly for all other systems, by introducing a 'shutdown_cleanly'
param and setting it to 'yes' to everybody but RHEL 3. Windows doesn't
need this at all, as when the ACK is received the system is fully booted
up and functional, so the postprocessing will take care of shutting down
the VM cleanly.

I've fixed all Fedora, RHEL, OpenSUSE, and SLES unattended files as
part of this change. With this change, we can get rid of another
parameter, post_install_delay, that was created with the only purpose of
handling the fact that on autoyast install, when the ACK is sent to
host, the system is not fully done with install. So we end up fixing yet
another problem :)

I've fixed the autoyast files exactly as the documentation [1] says, but
couldn't test OpenSUSE 11.2 because no matter how much I tried OpenSUSE
kernel panics under both F15 qemu-kvm and upstream qemu-kvm, and I don't
have access to SLES. IBM guys, please help! :)

[1] http://www.suse.de/~ug/autoyast_doc/configuration.html

Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
---
 client/tests/kvm/tests/unattended_install.py |   10 ++++++----
 client/tests/kvm/tests_base.cfg.sample       |    8 ++++++--
 client/tests/kvm/unattended/Fedora-10.ks     |    1 +
 client/tests/kvm/unattended/Fedora-11.ks     |    1 +
 client/tests/kvm/unattended/Fedora-12.ks     |    1 +
 client/tests/kvm/unattended/Fedora-13.ks     |    1 +
 client/tests/kvm/unattended/Fedora-14.ks     |    1 +
 client/tests/kvm/unattended/Fedora-9.ks      |    1 +
 client/tests/kvm/unattended/OpenSUSE-11.xml  |    1 +
 client/tests/kvm/unattended/RHEL-4-series.ks |    2 +-
 client/tests/kvm/unattended/RHEL-5-series.ks |    2 +-
 client/tests/kvm/unattended/RHEL-6-series.ks |    2 +-
 client/tests/kvm/unattended/SLES-11.xml      |    1 +
 13 files changed, 23 insertions(+), 9 deletions(-)

Comments

Eduardo Habkost April 13, 2011, 4:16 p.m. UTC | #1
On Tue, Apr 12, 2011 at 07:28:15PM -0300, Lucas Meneghel Rodrigues wrote:
> During unattended install, right after we receive the ACK from the guest
> the test is deemed to be finished, and as shutdown_vm = yes, it'll try
> to end the vm issuing a shutdown command to it. However, on virtually
> all Linux guests an SSH server is not available at the end of install,
> so KVM autotest will end the VM forcefully, which is not really safe,
> although it has served us well so far.
> 
> We did not fix this 'problem' so far because on RHEL3, a supported
> guest, the anaconda syntax does not support the 'poweroff' directive,
> only 'reboot', so if we don't finish the VM right after the ACK from
> guest we really can't prevent it from starting the install again,
> getting an infinite loop.

On the other hand, RHEL 3 supports 'reboot'[1], so we could simply run
the install-finished notification on first boot (it's the method we use
for Windows guests, right?), and simply shut down the machine cleanly
using ssh or the virtual power button.

[1] http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/3/html/System_Administration_Guide/s1-kickstart2-options.html
Lucas Meneghel Rodrigues April 13, 2011, 4:35 p.m. UTC | #2
On Wed, 2011-04-13 at 13:16 -0300, Eduardo Habkost wrote:
> On Tue, Apr 12, 2011 at 07:28:15PM -0300, Lucas Meneghel Rodrigues wrote:
> > During unattended install, right after we receive the ACK from the guest
> > the test is deemed to be finished, and as shutdown_vm = yes, it'll try
> > to end the vm issuing a shutdown command to it. However, on virtually
> > all Linux guests an SSH server is not available at the end of install,
> > so KVM autotest will end the VM forcefully, which is not really safe,
> > although it has served us well so far.
> > 
> > We did not fix this 'problem' so far because on RHEL3, a supported
> > guest, the anaconda syntax does not support the 'poweroff' directive,
> > only 'reboot', so if we don't finish the VM right after the ACK from
> > guest we really can't prevent it from starting the install again,
> > getting an infinite loop.
> 
> On the other hand, RHEL 3 supports 'reboot'[1], so we could simply run
> the install-finished notification on first boot (it's the method we use
> for Windows guests, right?), and simply shut down the machine cleanly
> using ssh or the virtual power button.

Nope, as the VM is started with -kernel and -initrd options, the machine
will start anaconda and therefore, install again. I wish we could do it
as you described, really.

Windows is a different beast, we don't start it with -kernel and -initrd
options, just regular boot from the CD + the unattended floppy, so the
VM can first boot nice and fine, and then we execute the finish.exe
program, telling autotest the install is done.

> 
> [1] http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/3/html/System_Administration_Guide/s1-kickstart2-options.html
> 


--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/client/tests/kvm/tests/unattended_install.py b/client/tests/kvm/tests/unattended_install.py
index 40adfb9..41faeb5 100644
--- a/client/tests/kvm/tests/unattended_install.py
+++ b/client/tests/kvm/tests/unattended_install.py
@@ -553,7 +553,9 @@  def run_unattended_install(test, params, env):
     logging.info("Guest reported successful installation after %d s (%d min)",
                  time_elapsed, time_elapsed/60)
 
-    if post_install_delay:
-        logging.debug("Post install delay specified, waiting %s s...",
-                      post_install_delay)
-        time.sleep(post_install_delay)
+    if params.get("shutdown_cleanly", "yes") == "yes":
+        shutdown_cleanly_timeout = params.get("shutdown_cleanly_timeout", 120)
+        logging.info("Wait for guest to shudown cleanly...")
+        if kvm_utils.wait_for(vm.is_dead, shutdown_cleanly_timeout, 1, 1):
+            logging.info("Guest managed to shutdown cleanly")
+
diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample
index 9d05364..64f6a7e 100644
--- a/client/tests/kvm/tests_base.cfg.sample
+++ b/client/tests/kvm/tests_base.cfg.sample
@@ -125,6 +125,8 @@  variants:
         kill_vm = yes
         kill_vm_gracefully = yes
         kill_vm_on_error = yes
+        shutdown_cleanly = yes
+        shutdown_cleanly_timeout = 120
         force_create_image = yes
         extra_params += " -boot d"
         guest_port_unattended_install = 12323
@@ -1321,7 +1323,6 @@  variants:
                     # hold your autoyast file
                     extra_params += " --append 'autoyast=floppy console=ttyS0,115200 console=tty0'"
                     #extra_params += " --append 'autoyast=cdrom console=ttyS0,115200 console=tty0'"
-                    post_install_delay = 10
 
                 variants:
                     - 11.0.32:
@@ -1461,7 +1462,6 @@  variants:
                     # hold your autoyast file
                     extra_params += " --append 'autoyast=floppy console=ttyS0,115200 console=tty0'"
                     #extra_params += " --append 'autoyast=cdrom console=ttyS0,115200 console=tty0'"
-                    post_install_delay = 10
                     kernel = linux
                     initrd = initrd
 
@@ -1590,6 +1590,8 @@  variants:
                             cdrom_unattended = images/rhel39-32/ks.iso
                             kernel = images/rhel39-32/vmlinuz
                             initrd = images/rhel39-32/initrd.img
+                            # 3.X anaconda does not support 'poweroff' on ks
+                            shutdown_cleanly = no
                         unattended_install.cdrom:
                             cdrom_cd1 = isos/linux/RHEL-3.9-i386-DVD.iso
                             md5sum_cd1 = ddd11a1cb104119039b0fa05df6d52b8
@@ -1610,6 +1612,8 @@  variants:
                             cdrom_unattended = images/rhel39-64/ks.iso
                             kernel = images/rhel39-64/vmlinuz
                             initrd = images/rhel39-64/initrd.img
+                            # 3.X anaconda does not support 'poweroff' on ks
+                            shutdown_cleanly = no
                         unattended_install.cdrom:
                             cdrom_cd1 = isos/linux/RHEL-3.9-x86_64-DVD.iso
                             md5sum_cd1 = bf4635e4a4bd3b43838e72bc8c329d55
diff --git a/client/tests/kvm/unattended/Fedora-10.ks b/client/tests/kvm/unattended/Fedora-10.ks
index 5dffccd..081d41a 100644
--- a/client/tests/kvm/unattended/Fedora-10.ks
+++ b/client/tests/kvm/unattended/Fedora-10.ks
@@ -16,6 +16,7 @@  zerombr
 clearpart --all --initlabel
 autopart
 reboot
+poweroff
 
 %packages
 @base
diff --git a/client/tests/kvm/unattended/Fedora-11.ks b/client/tests/kvm/unattended/Fedora-11.ks
index c7d43b3..c339220 100644
--- a/client/tests/kvm/unattended/Fedora-11.ks
+++ b/client/tests/kvm/unattended/Fedora-11.ks
@@ -12,6 +12,7 @@  timezone --utc America/New_York
 firstboot --disable
 bootloader --location=mbr --append="console=tty0 console=ttyS0,115200"
 zerombr
+poweroff
 
 clearpart --all --initlabel
 autopart
diff --git a/client/tests/kvm/unattended/Fedora-12.ks b/client/tests/kvm/unattended/Fedora-12.ks
index c7d43b3..c339220 100644
--- a/client/tests/kvm/unattended/Fedora-12.ks
+++ b/client/tests/kvm/unattended/Fedora-12.ks
@@ -12,6 +12,7 @@  timezone --utc America/New_York
 firstboot --disable
 bootloader --location=mbr --append="console=tty0 console=ttyS0,115200"
 zerombr
+poweroff
 
 clearpart --all --initlabel
 autopart
diff --git a/client/tests/kvm/unattended/Fedora-13.ks b/client/tests/kvm/unattended/Fedora-13.ks
index c7d43b3..c339220 100644
--- a/client/tests/kvm/unattended/Fedora-13.ks
+++ b/client/tests/kvm/unattended/Fedora-13.ks
@@ -12,6 +12,7 @@  timezone --utc America/New_York
 firstboot --disable
 bootloader --location=mbr --append="console=tty0 console=ttyS0,115200"
 zerombr
+poweroff
 
 clearpart --all --initlabel
 autopart
diff --git a/client/tests/kvm/unattended/Fedora-14.ks b/client/tests/kvm/unattended/Fedora-14.ks
index db4298b..816428e 100644
--- a/client/tests/kvm/unattended/Fedora-14.ks
+++ b/client/tests/kvm/unattended/Fedora-14.ks
@@ -12,6 +12,7 @@  timezone --utc America/New_York
 firstboot --disable
 bootloader --location=mbr --append="rd_NO_PLYMOUTH console=tty0 console=ttyS0,115200"
 zerombr
+poweroff
 
 clearpart --all --initlabel
 autopart
diff --git a/client/tests/kvm/unattended/Fedora-9.ks b/client/tests/kvm/unattended/Fedora-9.ks
index 9403191..a7d5399 100644
--- a/client/tests/kvm/unattended/Fedora-9.ks
+++ b/client/tests/kvm/unattended/Fedora-9.ks
@@ -16,6 +16,7 @@  zerombr
 clearpart --all --initlabel
 autopart
 reboot
+poweroff
 
 %packages
 @base
diff --git a/client/tests/kvm/unattended/OpenSUSE-11.xml b/client/tests/kvm/unattended/OpenSUSE-11.xml
index 0ade836..95823cb 100644
--- a/client/tests/kvm/unattended/OpenSUSE-11.xml
+++ b/client/tests/kvm/unattended/OpenSUSE-11.xml
@@ -65,6 +65,7 @@ 
     <ask-list config:type="list"/>
     <mode>
       <confirm config:type="boolean">false</confirm>
+      <final_halt config:type="boolean">true</final_halt>
     </mode>
     <mouse>
       <id>none</id>
diff --git a/client/tests/kvm/unattended/RHEL-4-series.ks b/client/tests/kvm/unattended/RHEL-4-series.ks
index 4583c76..2f7853e 100644
--- a/client/tests/kvm/unattended/RHEL-4-series.ks
+++ b/client/tests/kvm/unattended/RHEL-4-series.ks
@@ -15,7 +15,7 @@  bootloader --location=mbr --append="console=tty0 console=ttyS0,115200"
 zerombr
 clearpart --all --initlabel
 autopart
-reboot
+poweroff
 
 %packages
 @ base
diff --git a/client/tests/kvm/unattended/RHEL-5-series.ks b/client/tests/kvm/unattended/RHEL-5-series.ks
index c528d8a..a7be569 100644
--- a/client/tests/kvm/unattended/RHEL-5-series.ks
+++ b/client/tests/kvm/unattended/RHEL-5-series.ks
@@ -15,7 +15,7 @@  bootloader --location=mbr --append="console=tty0 console=ttyS0,115200"
 zerombr
 clearpart --all --initlabel
 autopart
-reboot
+poweroff
 
 %packages
 @base
diff --git a/client/tests/kvm/unattended/RHEL-6-series.ks b/client/tests/kvm/unattended/RHEL-6-series.ks
index 04f0672..fc41057 100644
--- a/client/tests/kvm/unattended/RHEL-6-series.ks
+++ b/client/tests/kvm/unattended/RHEL-6-series.ks
@@ -15,7 +15,7 @@  bootloader --location=mbr --append="console=tty0 console=ttyS0,115200"
 zerombr
 clearpart --all --initlabel
 autopart
-reboot
+poweroff
 
 %packages
 @base
diff --git a/client/tests/kvm/unattended/SLES-11.xml b/client/tests/kvm/unattended/SLES-11.xml
index c694a31..deba4f6 100644
--- a/client/tests/kvm/unattended/SLES-11.xml
+++ b/client/tests/kvm/unattended/SLES-11.xml
@@ -92,6 +92,7 @@ 
     <ask-list config:type="list"/>
     <mode>
       <confirm config:type="boolean">false</confirm>
+      <final_halt config:type="boolean">true</final_halt>
     </mode>
     <mouse>
       <id>none</id>