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

Darryl L. Pierce dpierce at redhat.com
Wed Oct 21 19:48:02 UTC 2009


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
-- 
1.6.2.5




More information about the ovirt-devel mailing list