#
# Copyright 2007 Google Inc. Released under the GPL v2
"""
This module defines the Guest class in the Host hierarchy.
Implementation details:
You should import the "hosts" package instead of importing each type of host.
Guest: a virtual machine on which you can run programs
"""
__author__ = """
mbligh@google.com (Martin J. Bligh),
poirier@google.com (Benjamin Poirier),
stutsman@google.com (Ryan Stutsman)
"""
from autotest_lib.server.hosts import ssh_host
class Guest(ssh_host.SSHHost):
"""
This class represents a virtual machine on which you can run
programs.
It is not the machine autoserv is running on.
Implementation details:
This is an abstract class, leaf subclasses must implement the methods
listed here and in parent classes which have no implementation. They
may reimplement methods which already have an implementation. You
must not instantiate this class but should instantiate one of those
leaf subclasses.
"""
controlling_hypervisor = None
def _initialize(self, controlling_hypervisor, *args, **dargs):
"""
Construct a Guest object
Args:
controlling_hypervisor: Hypervisor object that is
responsible for the creation and management of
this guest
"""
hostname = controlling_hypervisor.new_guest()
super(Guest, self)._initialize(hostname, *args, **dargs)
self.controlling_hypervisor = controlling_hypervisor
def __del__(self):
"""
Destroy a Guest object
"""
super(Guest, self).__del__()
self.controlling_hypervisor.delete_guest(self.hostname)
def hardreset(self, timeout=600, wait=True):
"""
Perform a "hardreset" of the guest.
It is restarted through the hypervisor. That will restart it
even if the guest otherwise innaccessible through ssh.
"""
return self.controlling_hypervisor.reset_guest(self.hostname)