普通文本  |  71行  |  1.98 KB

#
# 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)