[virt-tools-list] [PATCH 05/11] Created the Hypervisor base class.

Darryl L. Pierce dpierce at redhat.com
Thu Apr 14 18:06:04 UTC 2011


This class will be extended by all other hypervisor types and defines
common functionality and APIs for them.
---
 src/virtlib/hypervisors/__init__.py |    1 +
 src/virtlib/hypervisors/base.py     |  292 +++++++++++++++++++++++++++++++++++
 2 files changed, 293 insertions(+), 0 deletions(-)
 create mode 100644 src/virtlib/hypervisors/base.py

diff --git a/src/virtlib/hypervisors/__init__.py b/src/virtlib/hypervisors/__init__.py
index 470db00..4487baa 100644
--- a/src/virtlib/hypervisors/__init__.py
+++ b/src/virtlib/hypervisors/__init__.py
@@ -16,3 +16,4 @@
 # MA  02110-1301, USA.  A copy of the GNU General Public License is
 # also available at http://www.gnu.org/copyleft/gpl.html.
 
+__all__ = ['base']
diff --git a/src/virtlib/hypervisors/base.py b/src/virtlib/hypervisors/base.py
new file mode 100644
index 0000000..6d53c7f
--- /dev/null
+++ b/src/virtlib/hypervisors/base.py
@@ -0,0 +1,292 @@
+# base.py - Copyright (C) 2011 Red Hat, Inc.
+# Written by Darryl L. Pierce <dpierce at redhat.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301, USA.  A copy of the GNU General Public License is
+# also available at http://www.gnu.org/copyleft/gpl.html.
+
+from abc import ABCMeta, abstractmethod
+
+class Hypervisor:
+    '''
+    Defines the abstract base class for all hypervisors.
+    '''
+
+    __metaclass__ = ABCMeta
+
+    def connect(self):
+        '''
+        Connects to the underlying virtualization layer.
+        '''
+        self.do_connect()
+
+    def disconnect(self):
+        '''
+        Disconnects from the underlying virtualization layer.
+        '''
+        self.do_disconnect()
+
+    @abstractmethod
+    def do_connect(self): pass
+
+    @abstractmethod
+    def do_disconnect(self): pass
+
+    def get_domains(self, defined = True, created = True):
+        '''
+        Returns the list of all domains.
+
+        Keyword arguments:
+        defined -- If True, returns domains that are defined but not created.
+        created -- If True, returns domains that are created.
+        '''
+
+        return self.do_get_domains(defined, created)
+
+    @abstractmethod
+    def do_get_domains(self, defined, created): pass
+
+    def get_domain(self, name):
+        '''
+        Returns the domain with the specified name.
+
+        name -- The domain name.
+        '''
+
+        return self.do_get_domain(name)
+
+    @abstractmethod
+    def do_get_domain(self, name): pass
+
+    def domain_exists(self, domain):
+        '''
+        Returns True if the named domain exists.
+
+        domain -- The domain name.
+        '''
+
+        domains = self.get_domains(defined = True, created = True)
+        return domain in domains
+
+    def define_domain(self, config):
+        '''
+        Defines the domain specified by the provided configuration.
+        The domain configuration is platform-specific.
+
+        config -- The domain's configuration details.
+        '''
+
+        self.do_define_domain(config)
+
+    @abstractmethod
+    def do_define_domain(self, config): pass
+
+    def undefine_domain(self, domain):
+        '''
+        Undefines the specified domain.
+
+        domain -- The domain name.
+        '''
+
+        self.do_undefine_domain(domain)
+
+    @abstractmethod
+    def do_undefine_domain(self, domain): pass
+
+    def create_domain(self, domain):
+        '''
+        Starts the specified domain if it's not already created.
+
+        domain -- The domain name.
+        '''
+
+        self.do_create_domain(domain)
+
+    @abstractmethod
+    def do_create_domain(self, domain): pass
+
+    def destroy_domain(self, domain):
+        '''
+        Shuts down the specified domain.
+
+        domain -- The domain name.
+        '''
+
+        self.do_destroy_domain(domain)
+
+    @abstractmethod
+    def do_destroy_domain(self, domain): pass
+
+    def get_networks(self, defined = True, created = True):
+        '''
+        Returns the list of all networks.
+
+        defined -- If True, includes uncreated but defined networks.
+        created -- If True, includes created networks.
+        '''
+
+        return self.do_get_networks(defined, created)
+
+    @abstractmethod
+    def do_get_networks(self, defined, created): pass
+
+    def get_network(self, name):
+        '''
+        Returns the network with the specified name.
+        '''
+
+        return self.do_get_network(name)
+
+    @abstractmethod
+    def do_get_network(self, name): pass
+
+    def network_exists(self, network):
+        '''
+        Returns True if the specified network exists.
+
+        network -- The network name.
+        '''
+
+        networks = self.get_networks(defined = True, created = True)
+        return network in networks
+
+    def define_network(self, config):
+        '''
+        Defines the network specified by the configuration.
+        '''
+
+        self.do_define_network(config)
+
+    @abstractmethod
+    def do_define_network(self, config): pass
+
+    def undefine_network(self, network):
+        '''
+        Undefines the specified network.
+
+        network -- The network name.
+        '''
+
+        self.do_undefine_network(network)
+
+    @abstractmethod
+    def do_undefine_network(self, network): pass
+
+    def create_network(self, network):
+        '''
+        Starts the network with the specified name.
+
+        network -- The network name.
+        '''
+
+        self.do_create_network(network)
+
+    @abstractmethod
+    def do_create_network(self, network): pass
+
+    def destroy_network(self, network):
+        '''
+        Shuts down the specified network
+
+        network -- The network name.
+        '''
+
+        self.do_destroy_network(network)
+
+    @abstractmethod
+    def do_destroy_network(self, network): pass
+
+    def get_storage_pools(self, defined = True, created = True):
+        '''
+        Returns the list of all storage pools.
+
+        defined -- If True, includes storage pools that are defined but not started.
+        started -- If True, includes storage pools that are started.
+        '''
+
+        return self.do_get_storage_pools(defined, started)
+
+    @abstractmethod
+    def do_get_storage_pools(defined, started): pass
+
+    def storage_pool_exists(self, pool):
+        '''
+        Returns True if the specified storage pool exists.
+
+        pool -- The storage pool name.
+        '''
+
+        pools = self.get_storage_pools(defined = True, created = True)
+        return pool in pools
+
+    def get_storage_pool(self, pool):
+        '''
+        Returns the specified storage pool.
+
+        pool -- The storage pool name.
+        '''
+
+        return self.do_get_storage_pool(pool)
+
+    @abstractmethod
+    def do_get_storage_pool(self, pool): pass
+
+    def define_storage_pool(self, name, config):
+        '''
+        Defines the storage pool defined by the configuration.
+
+        name -- The storage pool name.
+        config -- The storage pool configuration.
+        '''
+
+        self.do_define_storage_pool(name, config)
+
+    @abstractmethod
+    def do_define_storage_pool(self, name, config): pass
+
+    def undefine_storage_pool(self, pool):
+        '''
+        Undefines the specified storage pool.
+
+        pool -- The storage pool name.
+        '''
+
+        self.do_undefine_storage_pool(pool)
+
+    @abstractmethod
+    def do_undefine_storage_pool(self, pool): pass
+
+    def create_storage_pool(self, pool):
+        '''
+        Starts the specified storage pool
+
+        pool -- The storage pool name.
+        '''
+
+        self.do_create_storage_pool(pool)
+
+    def do_create_storage_pool(self, pool): pass
+
+    def destroy_storage_pool(self, pool):
+        '''
+        Destroys the specified storage pool.
+
+        pool -- The storage pool name.
+        '''
+
+        self.do_destroy_storage_pool(pool)
+
+    @abstractmethod
+    def do_destroy_storage_pool(self, pool): pass
+
-- 
1.7.4.2




More information about the virt-tools-list mailing list