[Ovirt-devel] [PATCH node] Renamed files and menu items for node administration:

Joey Boggs jboggs at redhat.com
Tue Oct 27 14:20:49 UTC 2009


Darryl L. Pierce wrote:
> define domain   -> add virtual machine (addvm)
> undefine domain -> remove virtual machine (rmvm)
> create domain   -> start virtual machine (startvm)
> destroy domain  -> stop virtual machine (stopvm)
> list domains    -> list virtual machiens (listvms)
>
> Signed-off-by: Darryl L. Pierce <dpierce at redhat.com>
> ---
>  Makefile.am                 |    8 +-
>  nodeadmin/adddomain.py      |  470 +++++++++++++++++++++++++++++++++++++++++++
>  nodeadmin/createdomain.py   |   65 ------
>  nodeadmin/definedomain.py   |  470 -------------------------------------------
>  nodeadmin/destroydomain.py  |   66 ------
>  nodeadmin/listdomains.py    |    4 +-
>  nodeadmin/nodemenu.py       |   42 ++--
>  nodeadmin/removedomain.py   |   83 ++++++++
>  nodeadmin/setup.py.in       |   10 +-
>  nodeadmin/startdomain.py    |   65 ++++++
>  nodeadmin/stopdomain.py     |   66 ++++++
>  nodeadmin/undefinedomain.py |   83 --------
>  ovirt-node.spec.in          |   18 +-
>  13 files changed, 725 insertions(+), 725 deletions(-)
>  create mode 100755 nodeadmin/adddomain.py
>  delete mode 100755 nodeadmin/createdomain.py
>  delete mode 100755 nodeadmin/definedomain.py
>  delete mode 100755 nodeadmin/destroydomain.py
>  create mode 100755 nodeadmin/removedomain.py
>  create mode 100755 nodeadmin/startdomain.py
>  create mode 100755 nodeadmin/stopdomain.py
>  delete mode 100755 nodeadmin/undefinedomain.py
>
> diff --git a/Makefile.am b/Makefile.am
> index abb7c33..3ce24c1 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -27,10 +27,10 @@ EXTRA_DIST =			\
>    images/grub-splash.xpm.gz	\
>    images/syslinux-vesa-splash.jpg	\
>    nodeadmin/__init__.py         \
> +  nodeadmin/adddomain.py        \
>    nodeadmin/configscreen.py     \
>    nodeadmin/createnetwork.py    \
>    nodeadmin/createuser.py       \
> -  nodeadmin/destroydomain.py    \
>    nodeadmin/destroynetwork.py   \
>    nodeadmin/halworker.py        \
>    nodeadmin/libvirtworker.py    \
> @@ -39,10 +39,10 @@ EXTRA_DIST =			\
>    nodeadmin/menuscreen.py       \
>    nodeadmin/netmenu.py          \
>    nodeadmin/nodemenu.py         \
> -  nodeadmin/undefinedomain.py   \
> +  nodeadmin/removedomain.py     \
>    nodeadmin/undefinenetwork.py  \
> -  nodeadmin/createdomain.py     \
> -  nodeadmin/definedomain.py     \
> +  nodeadmin/startdomain.py      \
> +  nodeadmin/stopdomain.py       \
>    nodeadmin/definenet.py        \
>    nodeadmin/domainconfig.py     \
>    nodeadmin/networkconfig.py    \
> diff --git a/nodeadmin/adddomain.py b/nodeadmin/adddomain.py
> new file mode 100755
> index 0000000..70a2011
> --- /dev/null
> +++ b/nodeadmin/adddomain.py
> @@ -0,0 +1,470 @@
> +#!/usr/bin/env python
> +#
> +# adddomain.py - Copyright (C) 2009 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 snack import *
> +import os
> +from domainconfig import DomainConfig
> +from configscreen import ConfigScreen
> +import urlgrabber.progress as progress
> +import utils
> +import logging
> +
> +from virtinst import *
> +
> +VM_DETAILS_PAGE      = 1
> +LOCAL_INSTALL_PAGE   = 2
> +SELECT_CDROM_PAGE    = 3
> +SELECT_ISO_PAGE      = 4
> +NETWORK_INSTALL_PAGE = 10
> +OS_TYPE_PAGE         = 11
> +OS_VARIANT_PAGE      = 12
> +RAM_CPU_PAGE         = 13
> +ENABLE_STORAGE_PAGE  = 14
> +LOCAL_STORAGE_PAGE   = 15
> +MANAGED_STORAGE_PAGE = 16
> +BRIDGE_PAGE          = 17
> +VIRT_DETAILS_PAGE    = 18
> +CONFIRM_PAGE         = 19
> +
> +LOCATION="location"
> +KICKSTART="kickstart"
> +KERNELOPTS="kernel.options"
> +OS_TYPE="os.type"
> +OS_VARIANT="os.variant"
> +MEMORY="memory"
> +CPUS="cpus"
> +
> +class DummyMeter(progress.BaseMeter):
> +    def _do_start(self, now = None):
> +        logging.info("Starting...")
> +
> +    def _do_end(self, amount_read, now = None):
> +        logging.info("Ending: read=%d" % amount_read)
> +
> +    def _do_update(self, amount_read, now = None):
> +        logging.info("Update: read=%d" % amount_read)
> +
> +class DomainConfigScreen(ConfigScreen):
> +    def __init__(self):
> +        ConfigScreen.__init__(self, "Create A New Virtual Machine")
> +        self.__config = DomainConfig()
> +        self.__config.set_architecture(self.get_libvirt().get_default_architecture())
> +        self.__config.set_virt_type(self.get_libvirt().get_default_virt_type())
> +
> +    def get_elements_for_page(self, screen, page):
> +        if page == VM_DETAILS_PAGE:        return self.get_vm_details_page(screen)
> +        elif page == LOCAL_INSTALL_PAGE:   return self.get_local_install_page(screen)
> +        elif page == SELECT_CDROM_PAGE:    return self.get_select_cdrom_page(screen)
> +        elif page == SELECT_ISO_PAGE:      return self.get_select_iso_page(screen)
> +        elif page == NETWORK_INSTALL_PAGE: return self.get_network_install_page(screen)
> +        elif page == OS_TYPE_PAGE:         return self.get_os_type_page(screen)
> +        elif page == OS_VARIANT_PAGE:      return self.get_os_variant_page(screen)
> +        elif page == RAM_CPU_PAGE:         return self.get_ram_and_cpu_page(screen)
> +        elif page == ENABLE_STORAGE_PAGE:  return self.get_enable_storage_page(screen)
> +        elif page == LOCAL_STORAGE_PAGE:   return self.get_local_storage_page(screen)
> +        elif page == MANAGED_STORAGE_PAGE: return self.get_managed_storage_page(screen)
> +        elif page == BRIDGE_PAGE:          return self.get_bridge_page(screen)
> +        elif page == VIRT_DETAILS_PAGE:    return self.get_virt_details_page(screen)
> +        elif page == CONFIRM_PAGE:         return self.get_confirm_page(screen)
> +        return []
> +
> +    def validate_input(self, page, errors):
> +        if page == VM_DETAILS_PAGE:
> +            if len(self.__guest_name.value()) > 0:
> +                if self.get_libvirt().domain_exists(self.__guest_name.value()):
> +                    errors.append("Guest name '%s' is already in use." % self.__guest_name.value())
> +                else:
> +                    return True
> +            else:
> +                errors.append("Guest name must be a string between 0 and 50 characters.")
> +        elif page == LOCAL_INSTALL_PAGE:
> +            if self.__install_source.getSelection() == DomainConfig.INSTALL_SOURCE_CDROM:
> +                return True
> +            elif self.__install_source.getSelection() == DomainConfig.INSTALL_SOURCE_ISO:
> +                return True
> +        elif page == SELECT_CDROM_PAGE:
> +            if self.__install_media.getSelection() != None:
> +                if len(self.get_hal().list_installable_volumes()) == 0:
> +                    errors.append("No installable media is available.")
> +                else:
> +                    return True
> +            else:
> +                errors.append("You must select an install media.")
> +        elif page == SELECT_ISO_PAGE:
> +            if len(self.__iso_path.value()) > 0:
> +                if os.path.exists(self.__iso_path.value()):
> +                    if os.path.isfile(self.__iso_path.value()):
> +                        return True
> +                    else:
> +                        errors.append("%s is not a file." % self.__iso_path.value())
> +                else:
> +                    errors.append("No such install media exists:")
> +                    errors.append(self.__iso_path.value())
> +            else:
> +                errors.append("An install media selection is required.")
> +        elif page == NETWORK_INSTALL_PAGE:
> +            if len(self.__install_url.value()) > 0:
> +                return True
> +            else:
> +                errors.append("An install tree is required.")
> +        elif page == OS_TYPE_PAGE: return True
> +        elif page == OS_VARIANT_PAGE: return True
> +        elif page == RAM_CPU_PAGE:
> +            if (len(self.__memory.value()) > 0 and len(self.__cpus.value()) > 0) \
> +                    and  (int(self.__memory.value()) > 0 and int(self.__cpus.value()) > 0):
> +                return True
> +            else:
> +                if len(self.__memory.value()) == 0:
> +                    errors.append("A value must be entered for memory.")
> +                elif int(self.__memory.value()) <= 0:
> +                    errors.append("A positive integer value must be entered for memory.")
> +                if len(self.__cpus.value()) == 0:
> +                    errors.append("A value must be entered for CPUs.")
> +                elif int(self.__cpus.value()) <= 0:
> +                    errors.append("A positive integer value must be entered for memory.")
> +        elif page == ENABLE_STORAGE_PAGE: return True
> +        elif page == LOCAL_STORAGE_PAGE:
> +            if len(self.__storage_size.value()) > 0:
> +                if float(self.__storage_size.value()) > 0:
> +                    return True
> +                else:
> +                    errors.append("A positive value must be entered for the storage size.")
> +            else:
> +                errors.append("A value must be entered for the storage size.")
> +        elif page == MANAGED_STORAGE_PAGE:
> +            if self.__existing_storage.getSelection() is not None:
> +                return True
> +            else:
> +                errors.append("Please select a storage volume.")
> +        elif page == BRIDGE_PAGE:
> +            if self.__network_bridges.getSelection() != None:
> +                if len(self.__mac_address.value()) > 0:
> +                    # TODO: regex check the format
> +                    return True
> +                else:
> +                    errors.append("MAC address must be supplied.")
> +            else:
> +                errors.append("A network bridge must be selected.")
> +        elif page == VIRT_DETAILS_PAGE:
> +            if self.__virt_types.getSelection() != None and self.__architectures.getSelection() != None:
> +                return True
> +            if self.__virt_types.getSelection() is None:
> +                errors.append("Please select a virtualization type.")
> +            if self.__architectures.getSelection() is None:
> +                errors.append("Please selection an architecture.")
> +        elif page == CONFIRM_PAGE: return True
> +        return False
> +
> +    def process_input(self, page):
> +        if page == VM_DETAILS_PAGE:
> +            self.__config.set_guest_name(self.__guest_name.value())
> +            self.__config.set_install_type(self.__install_type.getSelection())
> +        elif page == LOCAL_INSTALL_PAGE:
> +            self.__config.set_use_cdrom_source(self.__install_source.getSelection() == DomainConfig.INSTALL_SOURCE_CDROM)
> +        elif page == SELECT_CDROM_PAGE:
> +            self.__config.set_install_media(self.__install_media.getSelection())
> +        elif page == SELECT_ISO_PAGE:
> +            self.__config.set_iso_path(self.__iso_path.value())
> +        elif page == NETWORK_INSTALL_PAGE:
> +            self.__config.set_install_url(self.__install_url.value())
> +            self.__config.set_kickstart_url(self.__kickstart_url.value())
> +            self.__config.set_kernel_options(self.__kernel_options.value())
> +        elif page == OS_TYPE_PAGE:
> +            self.__config.set_os_type(self.__os_types.getSelection())
> +        elif page == OS_VARIANT_PAGE:
> +            self.__config.set_os_variant(self.__os_variants.getSelection())
> +        elif page == RAM_CPU_PAGE:
> +            self.__config.set_memory(int(self.__memory.value()))
> +            self.__config.set_cpus(int(self.__cpus.value()))
> +        elif page == ENABLE_STORAGE_PAGE:
> +            self.__config.set_enable_storage(self.__enable_storage.value())
> +            if self.__storage_type.getSelection() == DomainConfig.NEW_STORAGE:
> +                self.__config.set_use_local_storage(True)
> +            elif self.__storage_type.getSelection() == DomainConfig.EXISTING_STORAGE:
> +                self.__config.set_use_local_storage(False)
> +        elif page == LOCAL_STORAGE_PAGE:
> +            self.__config.set_storage_size(float(self.__storage_size.value()))
> +            self.__config.set_allocate_storage(self.__allocate_storage.value())
> +        elif page == MANAGED_STORAGE_PAGE:
> +            self.__config.set_use_local_storage(False)
> +            self.__config.set_existing_storage(self.__existing_storage.getSelection())
> +            self.__config.set_storage_size(self.get_libvirt().get_storage_size(self.__existing_storage.getSelection()))
> +        elif page == BRIDGE_PAGE:
> +            self.__config.set_network_bridge(self.__network_bridges.getSelection())
> +        elif page == VIRT_DETAILS_PAGE:
> +            self.__config.set_virt_type(self.__virt_types.getSelection())
> +            self.__config.set_architecture(self.__architectures.getSelection())
> +        elif page == CONFIRM_PAGE:
> +            self.get_libvirt().define_domain(self.__config, DummyMeter())
> +            self.set_finished()
> +
> +    def get_back_page(self, page):
> +        result = page
> +        if page == OS_TYPE_PAGE:
> +            install_type = self.__config.get_install_type()
> +            if install_type == DomainConfig.LOCAL_INSTALL:
> +                if self.__config.get_use_cdrom_source():
> +                    result = SELECT_CDROM_PAGE
> +                else:
> +                    result = SELECT_ISO_PAGE
> +            elif install_type == DomainConfig.NETWORK_INSTALL:
> +                result = NETWORK_INSTALL_PAGE
> +            elif install_type == DomainConfig.PXE_INSTALL:
> +                result = VM_DETAILS_PAGE
> +        elif page == LOCAL_STORAGE_PAGE or page ==  MANAGED_STORAGE_PAGE:
> +            result = ENABLE_STORAGE_PAGE
> +        elif page == NETWORK_INSTALL_PAGE:
> +            result = VM_DETAILS_PAGE
> +        elif page == SELECT_CDROM_PAGE or page == SELECT_ISO_PAGE:
> +            result = LOCAL_INSTALL_PAGE
> +        elif page == BRIDGE_PAGE:
> +            if self.__config.get_use_local_storage():
> +                result = LOCAL_STORAGE_PAGE
> +            else:
> +                result = MANAGED_STORAGE_PAGE
> +        else:
> +            if page > 1: result = page - 1
> +        return result
> +
> +    def get_next_page(self, page):
> +        result = page
> +        if page == VM_DETAILS_PAGE:
> +            install_type = self.__config.get_install_type()
> +            if install_type == DomainConfig.LOCAL_INSTALL:
> +                result = LOCAL_INSTALL_PAGE
> +            elif install_type == DomainConfig.NETWORK_INSTALL:
> +                result = NETWORK_INSTALL_PAGE
> +            elif install_type == DomainConfig.PXE_INSTALL:
> +                result = OS_TYPE_PAGE
> +        elif page == LOCAL_INSTALL_PAGE:
> +            if self.__config.get_use_cdrom_source():
> +                result = SELECT_CDROM_PAGE
> +            else:
> +                result = SELECT_ISO_PAGE
> +        elif page == SELECT_CDROM_PAGE or page == SELECT_ISO_PAGE:
> +            result = OS_TYPE_PAGE
> +        elif page == NETWORK_INSTALL_PAGE:
> +            result = OS_TYPE_PAGE
> +        elif page == ENABLE_STORAGE_PAGE:
> +            result = BRIDGE_PAGE
> +            if self.__config.get_enable_storage():
> +                if self.__config.get_use_local_storage():
> +                    result = LOCAL_STORAGE_PAGE
> +                else:
> +                    result = MANAGED_STORAGE_PAGE
> +        elif page == LOCAL_STORAGE_PAGE or page == MANAGED_STORAGE_PAGE:
> +            result = BRIDGE_PAGE
> +        else:
> +            result = page + 1
> +        return result
> +
> +    def page_has_finish(self, page):
> +        if page == CONFIRM_PAGE: return True
> +        return False
> +
> +    def page_has_next(self, page):
> +        if page < CONFIRM_PAGE:
> +            return True
> +
> +    def get_vm_details_page(self, screen):
> +        self.__guest_name = Entry(50, self.__config.get_guest_name())
> +        self.__install_type = RadioBar(screen, (("Local install media (ISO image or CDROM)",
> +                                                 DomainConfig.LOCAL_INSTALL,
> +                                                 self.__config.is_install_type(DomainConfig.LOCAL_INSTALL)),
> +                                                ("Network Install (HTTP, FTP, or NFS)",
> +                                                 DomainConfig.NETWORK_INSTALL,
> +                                                 self.__config.is_install_type(DomainConfig.NETWORK_INSTALL)),
> +                                                ("Network Boot (PXE)",
> +                                                 DomainConfig.PXE_INSTALL,
> +                                                 self.__config.is_install_type(DomainConfig.PXE_INSTALL))))
> +        grid = Grid(2,3)
> +        grid.setField(Label("Name:"), 0, 0, anchorRight = 1)
> +        grid.setField(self.__guest_name, 1, 0, anchorLeft = 1)
> +        grid.setField(Label("Choose how you would like to install the operating system"), 1, 1,
> +                      anchorLeft = 1, anchorTop = 1)
> +        grid.setField(self.__install_type, 1, 2, anchorLeft = 1)
> +        return [Label("Enter your machine details"),
> +                grid]
> +
> +    def get_local_install_page(self, screen):
> +        self.__install_source = RadioBar(screen, (("Use CDROM or DVD",
> +                                                   DomainConfig.INSTALL_SOURCE_CDROM,
> +                                                   self.__config.get_use_cdrom_source()),
> +                                                  ("Use ISO image",
> +                                                   DomainConfig.INSTALL_SOURCE_ISO,
> +                                                   self.__config.get_use_cdrom_source() is False)))
> +        grid = Grid(1,1)
> +        grid.setField(self.__install_source, 0, 0, anchorLeft = 1)
> +        return [Label("Locate your install media"),
> +                grid]
> +
> +    def get_select_cdrom_page(self, screen):
> +        drives = []
> +        media = self.get_hal().list_installable_volumes()
> +        for drive in media.keys():
> +            drives.append([media[drive], drive, self.__config.is_install_media(drive)])
> +        self.__install_media = RadioBar(screen, (drives))
> +        grid = Grid(1, 1)
> +        grid.setField(self.__install_media, 0, 0)
> +        return [Label("Select the install media"),
> +                grid]
> +
> +    def get_select_iso_page(self, screen):
> +        self.__iso_path = Entry(50, self.__config.get_iso_path())
> +        grid = Grid(1, 2)
> +        grid.setField(Label("Enter ISO path:"), 0, 0, anchorLeft = 1)
> +        grid.setField(self.__iso_path, 0, 1, anchorLeft = 1)
> +        return [Label("Enter the full path to an install ISO"),
> +                grid]
> +
> +    def get_network_install_page(self, screen):
> +        self.__install_url    = Entry(50, self.__config.get_install_url())
> +        self.__kickstart_url  = Entry(50, self.__config.get_kickstart_url())
> +        self.__kernel_options = Entry(50, self.__config.get_kernel_options())
> +        grid = Grid(2,3)
> +        grid.setField(Label("URL:"), 0, 0, anchorRight = 1)
> +        grid.setField(self.__install_url, 1, 0, anchorLeft = 1)
> +        grid.setField(Label("Kickstart URL:"), 0, 1, anchorRight = 1)
> +        grid.setField(self.__kickstart_url, 1, 1, anchorLeft = 1)
> +        grid.setField(Label("Kernel Options:"), 0, 2, anchorRight = 1)
> +        grid.setField(self.__kernel_options, 1, 2, anchorLeft = 1)
> +        return [Label("Provide the operating system URL"),
> +                grid]
> +
> +    def get_os_type_page(self, screen):
> +        types = []
> +        for type in Guest.list_os_types():
> +            types.append([Guest.get_os_type_label(type), type, self.__config.is_os_type(type)])
> +        self.__os_types = RadioBar(screen, types)
> +        grid = Grid(1, 1)
> +        grid.setField(self.__os_types, 0, 0, anchorLeft = 1)
> +        return [Label("Choose the operating system type"),
> +                grid]
> +
> +    def get_os_variant_page(self, screen):
> +        variants = []
> +        type = self.__config.get_os_type()
> +        for variant in Guest.list_os_variants(type):
> +            variants.append([Guest.get_os_variant_label(type, variant), variant, self.__config.is_os_variant(variant)])
> +        self.__os_variants = RadioBar(screen, variants)
> +        grid = Grid(1, 1)
> +        grid.setField(self.__os_variants, 0, 0, anchorLeft = 1)
> +        return [Label("Choose the operating system version"),
> +                grid]
> +
> +    def get_ram_and_cpu_page(self, screen):
> +        self.__memory = Entry(10, str(self.__config.get_memory()))
> +        self.__cpus   = Entry(10, str(self.__config.get_cpus()))
> +        grid = Grid(2,2)
> +        grid.setField(Label("Memory (RAM):"), 0, 0, anchorRight = 1)
> +        grid.setField(self.__memory, 1, 0, anchorLeft = 1)
> +        grid.setField(Label("CPUs:"), 0, 1, anchorRight = 1)
> +        grid.setField(self.__cpus, 1, 1, anchorLeft = 1)
> +        return [Label("Choose memory and CPU settings"),
> +                grid]
> +
> +    def get_enable_storage_page(self, screen):
> +        self.__enable_storage = Checkbox("Enable storage for this virtual machine", self.__config.get_enable_storage())
> +        self.__storage_type     = RadioBar(screen,((["Create a disk image on the computer's hard disk",
> +                                                     DomainConfig.NEW_STORAGE,
> +                                                     self.__config.get_use_local_storage()]),
> +                                                   (["Select managed or other existing storage",
> +                                                     DomainConfig.EXISTING_STORAGE,
> +                                                     self.__config.get_use_local_storage() is False])))
> +        grid = Grid(1,2)
> +        grid.setField(self.__enable_storage, 0, 0, anchorLeft = 1)
> +        grid.setField(self.__storage_type, 0, 1, anchorLeft = 1)
> +        return [Label("Configure storage"),
> +                grid]
> +
> +    def get_local_storage_page(self, screen):
> +        self.__storage_size     = Entry(6, str(self.__config.get_storage_size()))
> +        self.__allocate_storage = Checkbox("Allocate entire disk now", self.__config.get_allocate_storage())
> +        grid = Grid(2, 2)
> +        grid.setField(self.__allocate_storage, 0, 0, growx = 1, anchorLeft = 1)
> +        grid.setField(Label("Storage size (GB):"), 0, 1, anchorLeft = 1)
> +        grid.setField(self.__storage_size, 1, 1)
> +        return [Label("Configure local storage"),
> +                grid]
> +
> +    def get_managed_storage_page(self, screen):
> +        volumes = []
> +        for volume in self.get_libvirt().list_storage_volumes():
> +            volumes.append(["%s (%d GB)" % (volume.name(), volume.info()[1] / (1024 ** 3)),
> +                            volume.name(),
> +                            self.__config.is_existing_storage(volume.name())])
> +        self.__existing_storage = RadioBar(screen, (volumes))
> +        grid = Grid(2, 1)
> +        grid.setField(Label("Existing storage:"), 0, 0)
> +        grid.setField(self.__existing_storage, 1, 0)
> +        return [Label("Configure managed storage"),
> +                grid]
> +
> +    def get_bridge_page(self, screen):
> +        bridges = []
> +        for bridge in self.get_libvirt().list_bridges():
> +            bridges.append(["Virtual network '%s'" % bridge.name(), bridge.name(), self.__config.get_network_bridge() == bridge.name()])
> +        self.__network_bridges = RadioBar(screen, (bridges))
> +        if self.__config.get_mac_address() == None:
> +            self.__config.set_mac_address(self.get_libvirt().generate_mac_address())
> +        self.__mac_address = Entry(20, self.__config.get_mac_address())
> +        grid = Grid(1, 1)
> +        grid.setField(self.__network_bridges, 0, 0)
> +        return [Label("Select an existing bridge"),
> +                grid]
> +
> +    def get_virt_details_page(self, screen):
> +        virt_types = []
> +        for type in self.get_libvirt().list_virt_types():
> +            virt_types.append([type, type, self.__config.is_virt_type(type)])
> +        self.__virt_types = RadioBar(screen, (virt_types))
> +        archs = []
> +        for arch in self.get_libvirt().list_architectures():
> +            archs.append([arch, arch, self.__config.is_architecture(arch)])
> +        self.__architectures = RadioBar(screen, (archs))
> +        grid = Grid(2, 2)
> +        grid.setField(Label("Virt Type:"), 0, 0, anchorRight = 1, anchorTop = 1)
> +        grid.setField(self.__virt_types, 1, 0, anchorLeft = 1)
> +        grid.setField(Label("Architecture:"), 0, 1, anchorRight = 1, anchorTop = 1)
> +        grid.setField(self.__architectures, 1, 1, anchorLeft = 1)
> +        return [Label("Configure virtualization details"),
> +                grid]
> +
> +    def get_confirm_page(self, screen):
> +        grid = Grid(2, 6)
> +        grid.setField(Label("OS:"), 0, 0, anchorRight = 1)
> +        grid.setField(Label(Guest.get_os_variant_label(self.__config.get_os_type(),
> +                                                       self.__config.get_os_variant())), 1, 0, anchorLeft = 1)
> +        grid.setField(Label("Install:"), 0, 1, anchorRight = 1)
> +        grid.setField(Label(self.__config.get_install_type_text()), 1, 1, anchorLeft = 1)
> +        grid.setField(Label("Memory:"), 0, 2, anchorRight = 1)
> +        grid.setField(Label("%s MB" % self.__config.get_memory()), 1, 2, anchorLeft = 1)
> +        grid.setField(Label("CPUs:"), 0, 3, anchorRight = 1)
> +        grid.setField(Label("%d" % self.__config.get_cpus()), 1, 3, anchorLeft = 1)
> +        grid.setField(Label("Storage:"), 0, 4, anchorRight = 1)
> +        grid.setField(Label(self.__config.get_existing_storage()), 1, 4, anchorLeft = 1)
> +        grid.setField(Label("Network:"), 0, 5, anchorRight = 1)
> +        grid.setField(Label(self.__config.get_network_bridge()), 1, 5, anchorLeft = 1)
> +        return [Label("Ready to begin installation of %s" % self.__config.get_guest_name()),
> +                grid]
> +
> +def AddDomain():
> +    screen = DomainConfigScreen()
> +    screen.start()
> diff --git a/nodeadmin/createdomain.py b/nodeadmin/createdomain.py
> deleted file mode 100755
> index 6f10b44..0000000
> --- a/nodeadmin/createdomain.py
> +++ /dev/null
> @@ -1,65 +0,0 @@
> -#!/usr/bin/env python
> -#
> -# createdomain.py - Copyright (C) 2009 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 snack import *
> -from configscreen import *
> -
> -class CreateDomainConfigScreen(DomainListConfigScreen):
> -    LIST_PAGE  = 1
> -    CREATE_PAGE = 2
> -
> -    def __init__(self):
> -        DomainListConfigScreen.__init__(self, "Create A Domain")
> -
> -    def get_elements_for_page(self, screen, page):
> -        if page is self.LIST_PAGE:
> -            return self.get_domain_list_page(screen, created = False)
> -        elif page is self.CREATE_PAGE:
> -            return self.get_create_domain_page(screen)
> -
> -    def page_has_next(self, page):
> -        if page is self.LIST_PAGE: return self.has_selectable_domains()
> -        return False
> -
> -    def page_has_back(self, page):
> -        if page is self.CREATE_PAGE: return True
> -        return False
> -
> -    def validate_input(self, page, errors):
> -        if page is self.LIST_PAGE:
> -            if self.get_selected_domain() is not None:
> -                domain = self.get_selected_domain()
> -                try:
> -                    self.get_libvirt().create_domain(domain)
> -                    return True
> -                except Exception, error:
> -                    errors.append("There was an error creating the domain: %s" % domain)
> -                    errors.append(str(error))
> -            else:
> -                errors.append("You must first select a domain to create.")
> -
> -    def get_create_domain_page(self, screen):
> -        grid = Grid(1, 1)
> -        grid.setField(Label("%s was successfully created." % self.get_selected_domain()), 0, 0)
> -        return [grid]
> -
> -def CreateDomain():
> -    screen = CreateDomainConfigScreen()
> -    screen.start()
> diff --git a/nodeadmin/definedomain.py b/nodeadmin/definedomain.py
> deleted file mode 100755
> index 3fffca2..0000000
> --- a/nodeadmin/definedomain.py
> +++ /dev/null
> @@ -1,470 +0,0 @@
> -#!/usr/bin/env python
> -#
> -# definedomain.py - Copyright (C) 2009 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 snack import *
> -import os
> -from domainconfig import DomainConfig
> -from configscreen import ConfigScreen
> -import urlgrabber.progress as progress
> -import utils
> -import logging
> -
> -from virtinst import *
> -
> -VM_DETAILS_PAGE      = 1
> -LOCAL_INSTALL_PAGE   = 2
> -SELECT_CDROM_PAGE    = 3
> -SELECT_ISO_PAGE      = 4
> -NETWORK_INSTALL_PAGE = 10
> -OS_TYPE_PAGE         = 11
> -OS_VARIANT_PAGE      = 12
> -RAM_CPU_PAGE         = 13
> -ENABLE_STORAGE_PAGE  = 14
> -LOCAL_STORAGE_PAGE   = 15
> -MANAGED_STORAGE_PAGE = 16
> -BRIDGE_PAGE          = 17
> -VIRT_DETAILS_PAGE    = 18
> -CONFIRM_PAGE         = 19
> -
> -LOCATION="location"
> -KICKSTART="kickstart"
> -KERNELOPTS="kernel.options"
> -OS_TYPE="os.type"
> -OS_VARIANT="os.variant"
> -MEMORY="memory"
> -CPUS="cpus"
> -
> -class DummyMeter(progress.BaseMeter):
> -    def _do_start(self, now = None):
> -        logging.info("Starting...")
> -
> -    def _do_end(self, amount_read, now = None):
> -        logging.info("Ending: read=%d" % amount_read)
> -
> -    def _do_update(self, amount_read, now = None):
> -        logging.info("Update: read=%d" % amount_read)
> -
> -class DomainConfigScreen(ConfigScreen):
> -    def __init__(self):
> -        ConfigScreen.__init__(self, "Create A New Virtual Machine")
> -        self.__config = DomainConfig()
> -        self.__config.set_architecture(self.get_libvirt().get_default_architecture())
> -        self.__config.set_virt_type(self.get_libvirt().get_default_virt_type())
> -
> -    def get_elements_for_page(self, screen, page):
> -        if page == VM_DETAILS_PAGE:        return self.get_vm_details_page(screen)
> -        elif page == LOCAL_INSTALL_PAGE:   return self.get_local_install_page(screen)
> -        elif page == SELECT_CDROM_PAGE:    return self.get_select_cdrom_page(screen)
> -        elif page == SELECT_ISO_PAGE:      return self.get_select_iso_page(screen)
> -        elif page == NETWORK_INSTALL_PAGE: return self.get_network_install_page(screen)
> -        elif page == OS_TYPE_PAGE:         return self.get_os_type_page(screen)
> -        elif page == OS_VARIANT_PAGE:      return self.get_os_variant_page(screen)
> -        elif page == RAM_CPU_PAGE:         return self.get_ram_and_cpu_page(screen)
> -        elif page == ENABLE_STORAGE_PAGE:  return self.get_enable_storage_page(screen)
> -        elif page == LOCAL_STORAGE_PAGE:   return self.get_local_storage_page(screen)
> -        elif page == MANAGED_STORAGE_PAGE: return self.get_managed_storage_page(screen)
> -        elif page == BRIDGE_PAGE:          return self.get_bridge_page(screen)
> -        elif page == VIRT_DETAILS_PAGE:    return self.get_virt_details_page(screen)
> -        elif page == CONFIRM_PAGE:         return self.get_confirm_page(screen)
> -        return []
> -
> -    def validate_input(self, page, errors):
> -        if page == VM_DETAILS_PAGE:
> -            if len(self.__guest_name.value()) > 0:
> -                if self.get_libvirt().domain_exists(self.__guest_name.value()):
> -                    errors.append("Guest name '%s' is already in use." % self.__guest_name.value())
> -                else:
> -                    return True
> -            else:
> -                errors.append("Guest name must be a string between 0 and 50 characters.")
> -        elif page == LOCAL_INSTALL_PAGE:
> -            if self.__install_source.getSelection() == DomainConfig.INSTALL_SOURCE_CDROM:
> -                return True
> -            elif self.__install_source.getSelection() == DomainConfig.INSTALL_SOURCE_ISO:
> -                return True
> -        elif page == SELECT_CDROM_PAGE:
> -            if self.__install_media.getSelection() != None:
> -                if len(self.get_hal().list_installable_volumes()) == 0:
> -                    errors.append("No installable media is available.")
> -                else:
> -                    return True
> -            else:
> -                errors.append("You must select an install media.")
> -        elif page == SELECT_ISO_PAGE:
> -            if len(self.__iso_path.value()) > 0:
> -                if os.path.exists(self.__iso_path.value()):
> -                    if os.path.isfile(self.__iso_path.value()):
> -                        return True
> -                    else:
> -                        errors.append("%s is not a file." % self.__iso_path.value())
> -                else:
> -                    errors.append("No such install media exists:")
> -                    errors.append(self.__iso_path.value())
> -            else:
> -                errors.append("An install media selection is required.")
> -        elif page == NETWORK_INSTALL_PAGE:
> -            if len(self.__install_url.value()) > 0:
> -                return True
> -            else:
> -                errors.append("An install tree is required.")
> -        elif page == OS_TYPE_PAGE: return True
> -        elif page == OS_VARIANT_PAGE: return True
> -        elif page == RAM_CPU_PAGE:
> -            if (len(self.__memory.value()) > 0 and len(self.__cpus.value()) > 0) \
> -                    and  (int(self.__memory.value()) > 0 and int(self.__cpus.value()) > 0):
> -                return True
> -            else:
> -                if len(self.__memory.value()) == 0:
> -                    errors.append("A value must be entered for memory.")
> -                elif int(self.__memory.value()) <= 0:
> -                    errors.append("A positive integer value must be entered for memory.")
> -                if len(self.__cpus.value()) == 0:
> -                    errors.append("A value must be entered for CPUs.")
> -                elif int(self.__cpus.value()) <= 0:
> -                    errors.append("A positive integer value must be entered for memory.")
> -        elif page == ENABLE_STORAGE_PAGE: return True
> -        elif page == LOCAL_STORAGE_PAGE:
> -            if len(self.__storage_size.value()) > 0:
> -                if float(self.__storage_size.value()) > 0:
> -                    return True
> -                else:
> -                    errors.append("A positive value must be entered for the storage size.")
> -            else:
> -                errors.append("A value must be entered for the storage size.")
> -        elif page == MANAGED_STORAGE_PAGE:
> -            if self.__existing_storage.getSelection() is not None:
> -                return True
> -            else:
> -                errors.append("Please select a storage volume.")
> -        elif page == BRIDGE_PAGE:
> -            if self.__network_bridges.getSelection() != None:
> -                if len(self.__mac_address.value()) > 0:
> -                    # TODO: regex check the format
> -                    return True
> -                else:
> -                    errors.append("MAC address must be supplied.")
> -            else:
> -                errors.append("A network bridge must be selected.")
> -        elif page == VIRT_DETAILS_PAGE:
> -            if self.__virt_types.getSelection() != None and self.__architectures.getSelection() != None:
> -                return True
> -            if self.__virt_types.getSelection() is None:
> -                errors.append("Please select a virtualization type.")
> -            if self.__architectures.getSelection() is None:
> -                errors.append("Please selection an architecture.")
> -        elif page == CONFIRM_PAGE: return True
> -        return False
> -
> -    def process_input(self, page):
> -        if page == VM_DETAILS_PAGE:
> -            self.__config.set_guest_name(self.__guest_name.value())
> -            self.__config.set_install_type(self.__install_type.getSelection())
> -        elif page == LOCAL_INSTALL_PAGE:
> -            self.__config.set_use_cdrom_source(self.__install_source.getSelection() == DomainConfig.INSTALL_SOURCE_CDROM)
> -        elif page == SELECT_CDROM_PAGE:
> -            self.__config.set_install_media(self.__install_media.getSelection())
> -        elif page == SELECT_ISO_PAGE:
> -            self.__config.set_iso_path(self.__iso_path.value())
> -        elif page == NETWORK_INSTALL_PAGE:
> -            self.__config.set_install_url(self.__install_url.value())
> -            self.__config.set_kickstart_url(self.__kickstart_url.value())
> -            self.__config.set_kernel_options(self.__kernel_options.value())
> -        elif page == OS_TYPE_PAGE:
> -            self.__config.set_os_type(self.__os_types.getSelection())
> -        elif page == OS_VARIANT_PAGE:
> -            self.__config.set_os_variant(self.__os_variants.getSelection())
> -        elif page == RAM_CPU_PAGE:
> -            self.__config.set_memory(int(self.__memory.value()))
> -            self.__config.set_cpus(int(self.__cpus.value()))
> -        elif page == ENABLE_STORAGE_PAGE:
> -            self.__config.set_enable_storage(self.__enable_storage.value())
> -            if self.__storage_type.getSelection() == DomainConfig.NEW_STORAGE:
> -                self.__config.set_use_local_storage(True)
> -            elif self.__storage_type.getSelection() == DomainConfig.EXISTING_STORAGE:
> -                self.__config.set_use_local_storage(False)
> -        elif page == LOCAL_STORAGE_PAGE:
> -            self.__config.set_storage_size(float(self.__storage_size.value()))
> -            self.__config.set_allocate_storage(self.__allocate_storage.value())
> -        elif page == MANAGED_STORAGE_PAGE:
> -            self.__config.set_use_local_storage(False)
> -            self.__config.set_existing_storage(self.__existing_storage.getSelection())
> -            self.__config.set_storage_size(self.get_libvirt().get_storage_size(self.__existing_storage.getSelection()))
> -        elif page == BRIDGE_PAGE:
> -            self.__config.set_network_bridge(self.__network_bridges.getSelection())
> -        elif page == VIRT_DETAILS_PAGE:
> -            self.__config.set_virt_type(self.__virt_types.getSelection())
> -            self.__config.set_architecture(self.__architectures.getSelection())
> -        elif page == CONFIRM_PAGE:
> -            self.get_libvirt().define_domain(self.__config, DummyMeter())
> -            self.set_finished()
> -
> -    def get_back_page(self, page):
> -        result = page
> -        if page == OS_TYPE_PAGE:
> -            install_type = self.__config.get_install_type()
> -            if install_type == DomainConfig.LOCAL_INSTALL:
> -                if self.__config.get_use_cdrom_source():
> -                    result = SELECT_CDROM_PAGE
> -                else:
> -                    result = SELECT_ISO_PAGE
> -            elif install_type == DomainConfig.NETWORK_INSTALL:
> -                result = NETWORK_INSTALL_PAGE
> -            elif install_type == DomainConfig.PXE_INSTALL:
> -                result = VM_DETAILS_PAGE
> -        elif page == LOCAL_STORAGE_PAGE or page ==  MANAGED_STORAGE_PAGE:
> -            result = ENABLE_STORAGE_PAGE
> -        elif page == NETWORK_INSTALL_PAGE:
> -            result = VM_DETAILS_PAGE
> -        elif page == SELECT_CDROM_PAGE or page == SELECT_ISO_PAGE:
> -            result = LOCAL_INSTALL_PAGE
> -        elif page == BRIDGE_PAGE:
> -            if self.__config.get_use_local_storage():
> -                result = LOCAL_STORAGE_PAGE
> -            else:
> -                result = MANAGED_STORAGE_PAGE
> -        else:
> -            if page > 1: result = page - 1
> -        return result
> -
> -    def get_next_page(self, page):
> -        result = page
> -        if page == VM_DETAILS_PAGE:
> -            install_type = self.__config.get_install_type()
> -            if install_type == DomainConfig.LOCAL_INSTALL:
> -                result = LOCAL_INSTALL_PAGE
> -            elif install_type == DomainConfig.NETWORK_INSTALL:
> -                result = NETWORK_INSTALL_PAGE
> -            elif install_type == DomainConfig.PXE_INSTALL:
> -                result = OS_TYPE_PAGE
> -        elif page == LOCAL_INSTALL_PAGE:
> -            if self.__config.get_use_cdrom_source():
> -                result = SELECT_CDROM_PAGE
> -            else:
> -                result = SELECT_ISO_PAGE
> -        elif page == SELECT_CDROM_PAGE or page == SELECT_ISO_PAGE:
> -            result = OS_TYPE_PAGE
> -        elif page == NETWORK_INSTALL_PAGE:
> -            result = OS_TYPE_PAGE
> -        elif page == ENABLE_STORAGE_PAGE:
> -            result = BRIDGE_PAGE
> -            if self.__config.get_enable_storage():
> -                if self.__config.get_use_local_storage():
> -                    result = LOCAL_STORAGE_PAGE
> -                else:
> -                    result = MANAGED_STORAGE_PAGE
> -        elif page == LOCAL_STORAGE_PAGE or page == MANAGED_STORAGE_PAGE:
> -            result = BRIDGE_PAGE
> -        else:
> -            result = page + 1
> -        return result
> -
> -    def page_has_finish(self, page):
> -        if page == CONFIRM_PAGE: return True
> -        return False
> -
> -    def page_has_next(self, page):
> -        if page < CONFIRM_PAGE:
> -            return True
> -
> -    def get_vm_details_page(self, screen):
> -        self.__guest_name = Entry(50, self.__config.get_guest_name())
> -        self.__install_type = RadioBar(screen, (("Local install media (ISO image or CDROM)",
> -                                                 DomainConfig.LOCAL_INSTALL,
> -                                                 self.__config.is_install_type(DomainConfig.LOCAL_INSTALL)),
> -                                                ("Network Install (HTTP, FTP, or NFS)",
> -                                                 DomainConfig.NETWORK_INSTALL,
> -                                                 self.__config.is_install_type(DomainConfig.NETWORK_INSTALL)),
> -                                                ("Network Boot (PXE)",
> -                                                 DomainConfig.PXE_INSTALL,
> -                                                 self.__config.is_install_type(DomainConfig.PXE_INSTALL))))
> -        grid = Grid(2,3)
> -        grid.setField(Label("Name:"), 0, 0, anchorRight = 1)
> -        grid.setField(self.__guest_name, 1, 0, anchorLeft = 1)
> -        grid.setField(Label("Choose how you would like to install the operating system"), 1, 1,
> -                      anchorLeft = 1, anchorTop = 1)
> -        grid.setField(self.__install_type, 1, 2, anchorLeft = 1)
> -        return [Label("Enter your machine details"),
> -                grid]
> -
> -    def get_local_install_page(self, screen):
> -        self.__install_source = RadioBar(screen, (("Use CDROM or DVD",
> -                                                   DomainConfig.INSTALL_SOURCE_CDROM,
> -                                                   self.__config.get_use_cdrom_source()),
> -                                                  ("Use ISO image",
> -                                                   DomainConfig.INSTALL_SOURCE_ISO,
> -                                                   self.__config.get_use_cdrom_source() is False)))
> -        grid = Grid(1,1)
> -        grid.setField(self.__install_source, 0, 0, anchorLeft = 1)
> -        return [Label("Locate your install media"),
> -                grid]
> -
> -    def get_select_cdrom_page(self, screen):
> -        drives = []
> -        media = self.get_hal().list_installable_volumes()
> -        for drive in media.keys():
> -            drives.append([media[drive], drive, self.__config.is_install_media(drive)])
> -        self.__install_media = RadioBar(screen, (drives))
> -        grid = Grid(1, 1)
> -        grid.setField(self.__install_media, 0, 0)
> -        return [Label("Select the install media"),
> -                grid]
> -
> -    def get_select_iso_page(self, screen):
> -        self.__iso_path = Entry(50, self.__config.get_iso_path())
> -        grid = Grid(1, 2)
> -        grid.setField(Label("Enter ISO path:"), 0, 0, anchorLeft = 1)
> -        grid.setField(self.__iso_path, 0, 1, anchorLeft = 1)
> -        return [Label("Enter the full path to an install ISO"),
> -                grid]
> -
> -    def get_network_install_page(self, screen):
> -        self.__install_url    = Entry(50, self.__config.get_install_url())
> -        self.__kickstart_url  = Entry(50, self.__config.get_kickstart_url())
> -        self.__kernel_options = Entry(50, self.__config.get_kernel_options())
> -        grid = Grid(2,3)
> -        grid.setField(Label("URL:"), 0, 0, anchorRight = 1)
> -        grid.setField(self.__install_url, 1, 0, anchorLeft = 1)
> -        grid.setField(Label("Kickstart URL:"), 0, 1, anchorRight = 1)
> -        grid.setField(self.__kickstart_url, 1, 1, anchorLeft = 1)
> -        grid.setField(Label("Kernel Options:"), 0, 2, anchorRight = 1)
> -        grid.setField(self.__kernel_options, 1, 2, anchorLeft = 1)
> -        return [Label("Provide the operating system URL"),
> -                grid]
> -
> -    def get_os_type_page(self, screen):
> -        types = []
> -        for type in Guest.list_os_types():
> -            types.append([Guest.get_os_type_label(type), type, self.__config.is_os_type(type)])
> -        self.__os_types = RadioBar(screen, types)
> -        grid = Grid(1, 1)
> -        grid.setField(self.__os_types, 0, 0, anchorLeft = 1)
> -        return [Label("Choose the operating system type"),
> -                grid]
> -
> -    def get_os_variant_page(self, screen):
> -        variants = []
> -        type = self.__config.get_os_type()
> -        for variant in Guest.list_os_variants(type):
> -            variants.append([Guest.get_os_variant_label(type, variant), variant, self.__config.is_os_variant(variant)])
> -        self.__os_variants = RadioBar(screen, variants)
> -        grid = Grid(1, 1)
> -        grid.setField(self.__os_variants, 0, 0, anchorLeft = 1)
> -        return [Label("Choose the operating system version"),
> -                grid]
> -
> -    def get_ram_and_cpu_page(self, screen):
> -        self.__memory = Entry(10, str(self.__config.get_memory()))
> -        self.__cpus   = Entry(10, str(self.__config.get_cpus()))
> -        grid = Grid(2,2)
> -        grid.setField(Label("Memory (RAM):"), 0, 0, anchorRight = 1)
> -        grid.setField(self.__memory, 1, 0, anchorLeft = 1)
> -        grid.setField(Label("CPUs:"), 0, 1, anchorRight = 1)
> -        grid.setField(self.__cpus, 1, 1, anchorLeft = 1)
> -        return [Label("Choose memory and CPU settings"),
> -                grid]
> -
> -    def get_enable_storage_page(self, screen):
> -        self.__enable_storage = Checkbox("Enable storage for this virtual machine", self.__config.get_enable_storage())
> -        self.__storage_type     = RadioBar(screen,((["Create a disk image on the computer's hard disk",
> -                                                     DomainConfig.NEW_STORAGE,
> -                                                     self.__config.get_use_local_storage()]),
> -                                                   (["Select managed or other existing storage",
> -                                                     DomainConfig.EXISTING_STORAGE,
> -                                                     self.__config.get_use_local_storage() is False])))
> -        grid = Grid(1,2)
> -        grid.setField(self.__enable_storage, 0, 0, anchorLeft = 1)
> -        grid.setField(self.__storage_type, 0, 1, anchorLeft = 1)
> -        return [Label("Configure storage"),
> -                grid]
> -
> -    def get_local_storage_page(self, screen):
> -        self.__storage_size     = Entry(6, str(self.__config.get_storage_size()))
> -        self.__allocate_storage = Checkbox("Allocate entire disk now", self.__config.get_allocate_storage())
> -        grid = Grid(2, 2)
> -        grid.setField(self.__allocate_storage, 0, 0, growx = 1, anchorLeft = 1)
> -        grid.setField(Label("Storage size (GB):"), 0, 1, anchorLeft = 1)
> -        grid.setField(self.__storage_size, 1, 1)
> -        return [Label("Configure local storage"),
> -                grid]
> -
> -    def get_managed_storage_page(self, screen):
> -        volumes = []
> -        for volume in self.get_libvirt().list_storage_volumes():
> -            volumes.append(["%s (%d GB)" % (volume.name(), volume.info()[1] / (1024 ** 3)),
> -                            volume.name(),
> -                            self.__config.is_existing_storage(volume.name())])
> -        self.__existing_storage = RadioBar(screen, (volumes))
> -        grid = Grid(2, 1)
> -        grid.setField(Label("Existing storage:"), 0, 0)
> -        grid.setField(self.__existing_storage, 1, 0)
> -        return [Label("Configure managed storage"),
> -                grid]
> -
> -    def get_bridge_page(self, screen):
> -        bridges = []
> -        for bridge in self.get_libvirt().list_bridges():
> -            bridges.append(["Virtual network '%s'" % bridge.name(), bridge.name(), self.__config.get_network_bridge() == bridge.name()])
> -        self.__network_bridges = RadioBar(screen, (bridges))
> -        if self.__config.get_mac_address() == None:
> -            self.__config.set_mac_address(self.get_libvirt().generate_mac_address())
> -        self.__mac_address = Entry(20, self.__config.get_mac_address())
> -        grid = Grid(1, 1)
> -        grid.setField(self.__network_bridges, 0, 0)
> -        return [Label("Select an existing bridge"),
> -                grid]
> -
> -    def get_virt_details_page(self, screen):
> -        virt_types = []
> -        for type in self.get_libvirt().list_virt_types():
> -            virt_types.append([type, type, self.__config.is_virt_type(type)])
> -        self.__virt_types = RadioBar(screen, (virt_types))
> -        archs = []
> -        for arch in self.get_libvirt().list_architectures():
> -            archs.append([arch, arch, self.__config.is_architecture(arch)])
> -        self.__architectures = RadioBar(screen, (archs))
> -        grid = Grid(2, 2)
> -        grid.setField(Label("Virt Type:"), 0, 0, anchorRight = 1, anchorTop = 1)
> -        grid.setField(self.__virt_types, 1, 0, anchorLeft = 1)
> -        grid.setField(Label("Architecture:"), 0, 1, anchorRight = 1, anchorTop = 1)
> -        grid.setField(self.__architectures, 1, 1, anchorLeft = 1)
> -        return [Label("Configure virtualization details"),
> -                grid]
> -
> -    def get_confirm_page(self, screen):
> -        grid = Grid(2, 6)
> -        grid.setField(Label("OS:"), 0, 0, anchorRight = 1)
> -        grid.setField(Label(Guest.get_os_variant_label(self.__config.get_os_type(),
> -                                                       self.__config.get_os_variant())), 1, 0, anchorLeft = 1)
> -        grid.setField(Label("Install:"), 0, 1, anchorRight = 1)
> -        grid.setField(Label(self.__config.get_install_type_text()), 1, 1, anchorLeft = 1)
> -        grid.setField(Label("Memory:"), 0, 2, anchorRight = 1)
> -        grid.setField(Label("%s MB" % self.__config.get_memory()), 1, 2, anchorLeft = 1)
> -        grid.setField(Label("CPUs:"), 0, 3, anchorRight = 1)
> -        grid.setField(Label("%d" % self.__config.get_cpus()), 1, 3, anchorLeft = 1)
> -        grid.setField(Label("Storage:"), 0, 4, anchorRight = 1)
> -        grid.setField(Label(self.__config.get_existing_storage()), 1, 4, anchorLeft = 1)
> -        grid.setField(Label("Network:"), 0, 5, anchorRight = 1)
> -        grid.setField(Label(self.__config.get_network_bridge()), 1, 5, anchorLeft = 1)
> -        return [Label("Ready to begin installation of %s" % self.__config.get_guest_name()),
> -                grid]
> -
> -def DefineDomain():
> -    screen = DomainConfigScreen()
> -    screen.start()
> diff --git a/nodeadmin/destroydomain.py b/nodeadmin/destroydomain.py
> deleted file mode 100755
> index 350c32e..0000000
> --- a/nodeadmin/destroydomain.py
> +++ /dev/null
> @@ -1,66 +0,0 @@
> -#!/usr/bin/env python
> -#
> -# destroydomain.py - Copyright (C) 2009 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 snack import *
> -from configscreen import *
> -
> -class DestroyDomainConfigScreen(DomainListConfigScreen):
> -    LIST_PAGE    = 1
> -    DESTROY_PAGE = 2
> -
> -    def __init__(self):
> -        DomainListConfigScreen.__init__(self, "Destroy A Domain")
> -
> -    def get_elements_for_page(self, screen, page):
> -        if page is self.LIST_PAGE:
> -            return self.get_domain_list_page(screen, defined = False)
> -        elif page is self.DESTROY_PAGE:
> -            return self.get_destroy_page(screen)
> -
> -    def page_has_next(self, page):
> -        if page is self.LIST_PAGE: return self.has_selectable_domains()
> -        return False
> -
> -    def page_has_back(self, page):
> -        if page is self.DESTROY_PAGE: return True
> -        return False
> -
> -    def validate_input(self, page, errors):
> -        if page is self.LIST_PAGE:
> -            if self.get_selected_domain() is not None:
> -                domain = self.get_selected_domain()
> -                try:
> -                    self.get_libvirt().destroy_domain(domain)
> -                    return True
> -                except Exception, error:
> -                    errors.append("There was an error destroy the domain: %s" % domain)
> -                    errors.append(str(error))
> -            else:
> -                errors.append("You must first select a domain to destroy.")
> -        return False
> -
> -    def get_destroy_page(self, screen):
> -        grid = Grid(1, 1)
> -        grid.setField(Label("%s was successfully destroyed." % self.get_selected_domain()), 0, 0)
> -        return [grid]
> -
> -def DestroyDomain():
> -    screen = DestroyDomainConfigScreen()
> -    screen.start()
> diff --git a/nodeadmin/listdomains.py b/nodeadmin/listdomains.py
> index 1b51ee2..7468bcf 100755
> --- a/nodeadmin/listdomains.py
> +++ b/nodeadmin/listdomains.py
> @@ -27,7 +27,7 @@ class ListDomainsConfigScreen(DomainListConfigScreen):
>      DETAIL_PAGE = 2
>  
>      def __init__(self):
> -        DomainListConfigScreen.__init__(self, 'List Domains')
> +        DomainListConfigScreen.__init__(self, 'List Virtual Machines')
>  
>      def page_has_next(self, page):
>          return (page == self.LIST_PAGE)
> @@ -38,7 +38,7 @@ class ListDomainsConfigScreen(DomainListConfigScreen):
>      def validate_input(self, page, errors):
>          if page == self.LIST_PAGE:
>              if self.get_selected_domain() is None:
> -                errors.append("Please select a domain to view.")
> +                errors.append("Please select a virtual machine to view.")
>              else:
>                  return True
>  
> diff --git a/nodeadmin/nodemenu.py b/nodeadmin/nodemenu.py
> index 9e339ff..0503b2e 100755
> --- a/nodeadmin/nodemenu.py
> +++ b/nodeadmin/nodemenu.py
> @@ -21,42 +21,42 @@ import traceback
>  
>  from menuscreen     import MenuScreen
>  from configscreen   import ConfigScreen
> -from definedomain   import DefineDomain
> +from adddomain      import AddDomain
>  from createdomain   import CreateDomain
> -from destroydomain  import DestroyDomain
> -from undefinedomain import UndefineDomain
> +from stopdomain     import StopDomain
> +from removedomain   import RemoveDomain
>  from listdomains    import ListDomains
>  from createuser     import CreateUser
>  
>  import utils
>  import logging
>  
> -DEFINE_DOMAIN    = 1
> -CREATE_DOMAIN    = 2
> -DESTROY_DOMAIN   = 3
> -UNDEFINE_DOMAIN  = 4
> -LIST_DOMAINS     = 5
> -CREATE_USER      = 6
> +ADD_DOMAIN    = 1
> +CREATE_DOMAIN = 2
> +STOP_DOMAIN   = 3
> +REMOVE_DOMAIN = 4
> +LIST_DOMAINS  = 5
> +CREATE_USER   = 6
>  
>  class NodeMenuScreen(MenuScreen):
>      def __init__(self):
>          MenuScreen.__init__(self, "Node Administration")
>  
>      def get_menu_items(self):
> -        return (("Define A Domain",        DEFINE_DOMAIN),
> -                ("Create A Domain",        CREATE_DOMAIN),
> -                ("Destroy A Domain",       DESTROY_DOMAIN),
> -                ("Undefine A Domain",      UNDEFINE_DOMAIN),
> -                ("List All Domains",       LIST_DOMAINS),
> -                ("Create A User",          CREATE_USER))
> +        return (("Add A Virtual Machine",     ADD_DOMAIN),
> +                ("Create A Virtual Machine",  CREATE_DOMAIN),
> +                ("Stop A Virtual Machine",    STOP_DOMAIN),
> +                ("Remove A Virtual Machine",  REMOVE_DOMAIN),
> +                ("List All Virtual Machines", LIST_DOMAINS),
> +                ("Create A User",             CREATE_USER))
>  
>      def handle_selection(self, item):
> -            if   item is DEFINE_DOMAIN:   DefineDomain()
> -            elif item is CREATE_DOMAIN:   CreateDomain()
> -            elif item is DESTROY_DOMAIN:  DestroyDomain()
> -            elif item is UNDEFINE_DOMAIN: UndefineDomain()
> -            elif item is LIST_DOMAINS:    ListDomains()
> -            elif item is CREATE_USER:     CreateUser()
> +            if   item is ADD_DOMAIN:     AddDomain()
> +            elif item is CREATE_DOMAIN:  CreateDomain()
> +            elif item is STOP_DOMAIN:    StopDomain()
> +            elif item is REMOVE_DOMAIN:  RemoveDomain()
> +            elif item is LIST_DOMAINS:   ListDomains()
> +            elif item is CREATE_USER:    CreateUser()
>  
>  def NodeMenu():
>      screen = NodeMenuScreen()
> diff --git a/nodeadmin/removedomain.py b/nodeadmin/removedomain.py
> new file mode 100755
> index 0000000..4e31428
> --- /dev/null
> +++ b/nodeadmin/removedomain.py
> @@ -0,0 +1,83 @@
> +#!/usr/bin/env python
> +#
> +# removedomain.py - Copyright (C) 2009 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 snack import *
> +from configscreen import *
> +
> +class RemoveDomainConfigScreen(DomainListConfigScreen):
> +    LIST_PAGE     = 1
> +    CONFIRM_PAGE  = 2
> +    REMOVE_PAGE = 3
> +
> +    def __init__(self):
> +        DomainListConfigScreen.__init__(self, "Remove A Domain")
> +
> +    def get_elements_for_page(self, screen, page):
> +        if   page is self.LIST_PAGE:     return self.get_domain_list_page(screen)
> +        elif page is self.CONFIRM_PAGE:  return self.get_confirm_page(screen)
> +        elif page is self.REMOVE_PAGE: return self.get_remove_page(screen)
> +
> +    def page_has_next(self, page):
> +        if   page is self.LIST_PAGE:     return self.has_selectable_domains()
> +        elif page is self.CONFIRM_PAGE:  return True
> +        return False
> +
> +    def page_has_back(self, page):
> +        if   page is self.CONFIRM_PAGE:  return True
> +        elif page is self.REMOVE_PAGE: return True
> +        return False
> +
> +    def get_back_page(self, page):
> +        if   page is self.CONFIRM_PAGE:  return self.LIST_PAGE
> +        elif page is self.REMOVE_PAGE: return self.LIST_PAGE
> +
> +    def validate_input(self, page, errors):
> +        if page is self.LIST_PAGE:
> +            if self.get_selected_domain() is not None:
> +                return True
> +            else:
> +                errors.append("You must first select a domain.")
> +        elif page is self.CONFIRM_PAGE:
> +            if self.__confirm_remove.value():
> +                domain = self.get_selected_domain()
> +                try:
> +                    self.get_libvirt().remove_domain(domain)
> +                    return True
> +                except Exception, error:
> +                    errors.append("Failed to remove %s." % domain)
> +                    errors.append(str(error))
> +            else:
> +                errors.append("You must confirm undefining the domain to proceed.")
> +        return False
> +
> +    def get_confirm_page(self, screen):
> +        self.__confirm_remove = Checkbox("Check here to confirm undefining %s." % self.get_selected_domain(), 0)
> +        grid = Grid(1, 1)
> +        grid.setField(self.__confirm_remove, 0, 0)
> +        return [grid]
> +
> +    def get_remove_page(self, screen):
> +        grid = Grid(1, 1)
> +        grid.setField(Label("%s has been removed." % self.get_selected_domain()), 0, 0)
> +        return [grid]
> +
> +def RemoveDomain():
> +    screen = RemoveDomainConfigScreen()
> +    screen.start()
> diff --git a/nodeadmin/setup.py.in b/nodeadmin/setup.py.in
> index 3635810..1e6e028 100644
> --- a/nodeadmin/setup.py.in
> +++ b/nodeadmin/setup.py.in
> @@ -25,12 +25,12 @@ setup(name = "nodeadmin",
>        entry_points = {
>          'console_scripts': [
>              'nodeadmin   = nodeadmin.nodeadmin:NodeAdmin',
> -            'definedom   = nodeadmin.definedomain:DefineDomain',
> -            'createdom   = nodeadmin.createdomain:CreateDomain',
> -            'destroydom  = nodeadmin.destroydomain:DestroyDomain',
> -            'undefinedom = nodeadmin.undefinedomain:UndefineDomain',
> +            'addvm       = nodeadmin.adddomain:AddDomain',
> +            'startvm     = nodeadmin.startdomain:StartDomain',
> +            'stopvm      = nodeadmin.stopdomain:StopDomain',
> +            'rmvm        = nodeadmin.removedomain:RemoveDomain',
>              'createuser  = nodeadmin.createuser:CreateUser',
> -            'listdoms    = nodeadmin.listdomains:ListDomains',
> +            'listvms     = nodeadmin.listdomains:ListDomains',
>              'definenet   = nodeadmin.definenet:DefineNetwork',
>              'createnet   = nodeadmin.createnetwork:CreateNetwork',
>              'destroynet  = nodeadmin.destroynetwork:DestroyNetwork',
> diff --git a/nodeadmin/startdomain.py b/nodeadmin/startdomain.py
> new file mode 100755
> index 0000000..082ac0d
> --- /dev/null
> +++ b/nodeadmin/startdomain.py
> @@ -0,0 +1,65 @@
> +#!/usr/bin/env python
> +#
> +# startdomain.py - Copyright (C) 2009 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 snack import *
> +from configscreen import *
> +
> +class StartDomainConfigScreen(DomainListConfigScreen):
> +    LIST_PAGE  = 1
> +    START_PAGE = 2
> +
> +    def __init__(self):
> +        DomainListConfigScreen.__init__(self, "Start A Domain")
> +
> +    def get_elements_for_page(self, screen, page):
> +        if page is self.LIST_PAGE:
> +            return self.get_domain_list_page(screen, started = False)
> +        elif page is self.START_PAGE:
> +            return self.get_start_domain_page(screen)
> +
> +    def page_has_next(self, page):
> +        if page is self.LIST_PAGE: return self.has_selectable_domains()
> +        return False
> +
> +    def page_has_back(self, page):
> +        if page is self.START_PAGE: return True
> +        return False
> +
> +    def validate_input(self, page, errors):
> +        if page is self.LIST_PAGE:
> +            if self.get_selected_domain() is not None:
> +                domain = self.get_selected_domain()
> +                try:
> +                    self.get_libvirt().start_domain(domain)
> +                    return True
> +                except Exception, error:
> +                    errors.append("There was an error creating the domain: %s" % domain)
> +                    errors.append(str(error))
> +            else:
> +                errors.append("You must first select a domain to start.")
> +
> +    def get_start_domain_page(self, screen):
> +        grid = Grid(1, 1)
> +        grid.setField(Label("%s was successfully started." % self.get_selected_domain()), 0, 0)
> +        return [grid]
> +
> +def StartDomain():
> +    screen = StartDomainConfigScreen()
> +    screen.start()
> diff --git a/nodeadmin/stopdomain.py b/nodeadmin/stopdomain.py
> new file mode 100755
> index 0000000..3ddd681
> --- /dev/null
> +++ b/nodeadmin/stopdomain.py
> @@ -0,0 +1,66 @@
> +#!/usr/bin/env python
> +#
> +# stopdomain.py - Copyright (C) 2009 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 snack import *
> +from configscreen import *
> +
> +class StopDomainConfigScreen(DomainListConfigScreen):
> +    LIST_PAGE    = 1
> +    STOP_PAGE = 2
> +
> +    def __init__(self):
> +        DomainListConfigScreen.__init__(self, "Stop A Domain")
> +
> +    def get_elements_for_page(self, screen, page):
> +        if page is self.LIST_PAGE:
> +            return self.get_domain_list_page(screen, defined = False)
> +        elif page is self.STOP_PAGE:
> +            return self.get_stop_page(screen)
> +
> +    def page_has_next(self, page):
> +        if page is self.LIST_PAGE: return self.has_selectable_domains()
> +        return False
> +
> +    def page_has_back(self, page):
> +        if page is self.STOP_PAGE: return True
> +        return False
> +
> +    def validate_input(self, page, errors):
> +        if page is self.LIST_PAGE:
> +            if self.get_selected_domain() is not None:
> +                domain = self.get_selected_domain()
> +                try:
> +                    self.get_libvirt().stop_domain(domain)
> +                    return True
> +                except Exception, error:
> +                    errors.append("There was an error stop the domain: %s" % domain)
> +                    errors.append(str(error))
> +            else:
> +                errors.append("You must first select a domain to stop.")
> +        return False
> +
> +    def get_stop_page(self, screen):
> +        grid = Grid(1, 1)
> +        grid.setField(Label("%s was successfully stoped." % self.get_selected_domain()), 0, 0)
> +        return [grid]
> +
> +def StopDomain():
> +    screen = StopDomainConfigScreen()
> +    screen.start()
> diff --git a/nodeadmin/undefinedomain.py b/nodeadmin/undefinedomain.py
> deleted file mode 100755
> index 2620540..0000000
> --- a/nodeadmin/undefinedomain.py
> +++ /dev/null
> @@ -1,83 +0,0 @@
> -#!/usr/bin/env python
> -#
> -# undefinedomain.py - Copyright (C) 2009 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 snack import *
> -from configscreen import *
> -
> -class UndefineDomainConfigScreen(DomainListConfigScreen):
> -    LIST_PAGE     = 1
> -    CONFIRM_PAGE  = 2
> -    UNDEFINE_PAGE = 3
> -
> -    def __init__(self):
> -        DomainListConfigScreen.__init__(self, "Undefine A Domain")
> -
> -    def get_elements_for_page(self, screen, page):
> -        if   page is self.LIST_PAGE:     return self.get_domain_list_page(screen)
> -        elif page is self.CONFIRM_PAGE:  return self.get_confirm_page(screen)
> -        elif page is self.UNDEFINE_PAGE: return self.get_undefine_page(screen)
> -
> -    def page_has_next(self, page):
> -        if   page is self.LIST_PAGE:     return self.has_selectable_domains()
> -        elif page is self.CONFIRM_PAGE:  return True
> -        return False
> -
> -    def page_has_back(self, page):
> -        if   page is self.CONFIRM_PAGE:  return True
> -        elif page is self.UNDEFINE_PAGE: return True
> -        return False
> -
> -    def get_back_page(self, page):
> -        if   page is self.CONFIRM_PAGE:  return self.LIST_PAGE
> -        elif page is self.UNDEFINE_PAGE: return self.LIST_PAGE
> -
> -    def validate_input(self, page, errors):
> -        if page is self.LIST_PAGE:
> -            if self.get_selected_domain() is not None:
> -                return True
> -            else:
> -                errors.append("You must first select a domain.")
> -        elif page is self.CONFIRM_PAGE:
> -            if self.__confirm_undefine.value():
> -                domain = self.get_selected_domain()
> -                try:
> -                    self.get_libvirt().undefine_domain(domain)
> -                    return True
> -                except Exception, error:
> -                    errors.append("Failed to undefine %s." % domain)
> -                    errors.append(str(error))
> -            else:
> -                errors.append("You must confirm undefining the domain to proceed.")
> -        return False
> -
> -    def get_confirm_page(self, screen):
> -        self.__confirm_undefine = Checkbox("Check here to confirm undefining %s." % self.get_selected_domain(), 0)
> -        grid = Grid(1, 1)
> -        grid.setField(self.__confirm_undefine, 0, 0)
> -        return [grid]
> -
> -    def get_undefine_page(self, screen):
> -        grid = Grid(1, 1)
> -        grid.setField(Label("%s has been undefined." % self.get_selected_domain()), 0, 0)
> -        return [grid]
> -
> -def UndefineDomain():
> -    screen = UndefineDomainConfigScreen()
> -    screen.start()
> diff --git a/ovirt-node.spec.in b/ovirt-node.spec.in
> index 2a6b7b6..49f41cb 100644
> --- a/ovirt-node.spec.in
> +++ b/ovirt-node.spec.in
> @@ -183,10 +183,10 @@ cd -
>  %{__install} -p -m0644 nodeadmin/mainmenu.py %{buildroot}%{python_sitelib}/nodeadmin
>  
>  %{__install} -p -m0644 nodeadmin/nodemenu.py %{buildroot}%{python_sitelib}/nodeadmin
> -%{__install} -p -m0755 nodeadmin/definedomain.py %{buildroot}%{python_sitelib}/nodeadmin
> -%{__install} -p -m0755 nodeadmin/createdomain.py %{buildroot}%{python_sitelib}/nodeadmin
> -%{__install} -p -m0755 nodeadmin/destroydomain.py %{buildroot}%{python_sitelib}/nodeadmin
> -%{__install} -p -m0755 nodeadmin/undefinedomain.py %{buildroot}%{python_sitelib}/nodeadmin
> +%{__install} -p -m0755 nodeadmin/adddomain.py %{buildroot}%{python_sitelib}/nodeadmin
> +%{__install} -p -m0755 nodeadmin/startdomain.py %{buildroot}%{python_sitelib}/nodeadmin
> +%{__install} -p -m0755 nodeadmin/stopdomain.py %{buildroot}%{python_sitelib}/nodeadmin
> +%{__install} -p -m0755 nodeadmin/removedomain.py %{buildroot}%{python_sitelib}/nodeadmin
>  %{__install} -p -m0755 nodeadmin/listdomains.py %{buildroot}%{python_sitelib}/nodeadmin
>  %{__install} -p -m0644 nodeadmin/domainconfig.py %{buildroot}%{python_sitelib}/nodeadmin
>  
> @@ -369,11 +369,11 @@ fi
>  %{_initrddir}/ovirt-functions
>  %defattr(-,root,root,0644)
>  %{_bindir}/nodeadmin
> -%{_bindir}/definedom
> -%{_bindir}/createdom
> -%{_bindir}/destroydom
> -%{_bindir}/undefinedom
> -%{_bindir}/listdoms
> +%{_bindir}/addvm
> +%{_bindir}/startvm
> +%{_bindir}/stopvm
> +%{_bindir}/rmvm
> +%{_bindir}/listvms
>  %{_bindir}/definenet
>  %{_bindir}/createnet
>  %{_bindir}/destroynet
>   
ACK, pending below changes

CreateDomain -> StartDomain
nodeadmin/nodemenu.py:from createdomain   import CreateDomain
nodeadmin/nodemenu.py:            elif item is CREATE_DOMAIN:  
CreateDomain()




More information about the ovirt-devel mailing list