create: Break out network paremeter validation to uihelpers

This will also be used by addhardware.
This commit is contained in:
Cole Robinson 2009-11-20 13:12:24 -05:00
parent 72315a372b
commit 54cd0cafde
2 changed files with 82 additions and 50 deletions

View File

@ -1248,27 +1248,6 @@ class vmmCreate(gobject.GObject):
self.guest.nics = []
# Make sure VirtualNetwork is running
if (nettype == VirtualNetworkInterface.TYPE_VIRTUAL and
devname not in self.conn.vmm.listNetworks()):
res = self.err.yes_no(_("Virtual Network is not active."),
_("Virtual Network '%s' is not active. "
"Would you like to start the network "
"now?") % devname)
if not res:
return False
# Try to start the network
try:
net = self.conn.vmm.networkLookupByName(devname)
net.create()
logging.info("Started network '%s'." % devname)
except Exception, e:
return self.err.show_err(_("Could not start virtual network "
"'%s': %s") % (devname, str(e)),
"".join(traceback.format_exc()))
if nettype is None:
# No network device available
instmethod = self.get_config_install_page()
@ -1281,36 +1260,13 @@ class vmmCreate(gobject.GObject):
if methname:
return self.verr(_("Network device required for %s install.") %
methname)
return True
# Create network device
try:
bridge = None
netname = None
if nettype == VirtualNetworkInterface.TYPE_VIRTUAL:
netname = devname
elif nettype == VirtualNetworkInterface.TYPE_BRIDGE:
bridge = devname
elif nettype == VirtualNetworkInterface.TYPE_USER:
pass
ret = uihelpers.validate_network(self.topwin,
self.conn, nettype, devname, macaddr)
if ret == False:
return False
net = VirtualNetworkInterface(type = nettype,
bridge = bridge,
network = netname,
macaddr = macaddr)
self.guest.nics.append(net)
except Exception, e:
return self.verr(_("Error with network parameters."), str(e))
# Make sure there is no mac address collision
isfatal, errmsg = net.is_conflict_net(self.guest.conn)
if isfatal:
return self.err.val_err(_("Mac address collision."), errmsg)
elif errmsg is not None:
return self.err.yes_no(_("Mac address collision."),
_("%s Are you sure you want to use this "
"address?") % errmsg)
self.guest.nics.append(ret)
return True

View File

@ -18,11 +18,26 @@
# MA 02110-1301 USA.
#
import logging
import traceback
import gtk
import virtinst
from virtinst import VirtualNetworkInterface
from virtManager.error import vmmErrorDialog
# Initialize an error object to use for validation functions
err_dial = vmmErrorDialog(None,
0, gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE,
_("Unexpected Error"),
_("An unexpected error occurred"))
def set_error_parent(parent):
global err_dial
err_dial.set_parent(parent)
err_dial = err_dial
# Widgets for listing network device options (in create, addhardware)
def init_network_list(net_list):
# [ network type, source name, label, sensitive? ]
@ -104,3 +119,64 @@ def populate_network_list(net_list, conn):
default = 0
net_list.set_active(default)
def validate_network(parent, conn, nettype, devname, macaddr, model=None):
set_error_parent(parent)
net = None
if nettype is None:
return None
# Make sure VirtualNetwork is running
if (nettype == VirtualNetworkInterface.TYPE_VIRTUAL and
devname not in conn.vmm.listNetworks()):
res = err_dial.yes_no(_("Virtual Network is not active."),
_("Virtual Network '%s' is not active. "
"Would you like to start the network "
"now?") % devname)
if not res:
return False
# Try to start the network
try:
virnet = conn.vmm.networkLookupByName(devname)
virnet.create()
logging.info("Started network '%s'." % devname)
except Exception, e:
return err_dial.show_err(_("Could not start virtual network "
"'%s': %s") % (devname, str(e)),
"".join(traceback.format_exc()))
# Create network device
try:
bridge = None
netname = None
if nettype == VirtualNetworkInterface.TYPE_VIRTUAL:
netname = devname
elif nettype == VirtualNetworkInterface.TYPE_BRIDGE:
bridge = devname
elif nettype == VirtualNetworkInterface.TYPE_USER:
pass
net = VirtualNetworkInterface(type = nettype,
bridge = bridge,
network = netname,
macaddr = macaddr)
except Exception, e:
return err_dial.val_err(_("Error with network parameters."), str(e))
# Make sure there is no mac address collision
isfatal, errmsg = net.is_conflict_net(conn.vmm)
if isfatal:
return err_dial.val_err(_("Mac address collision."), errmsg)
elif errmsg is not None:
retv = err_dial.yes_no(_("Mac address collision."),
_("%s Are you sure you want to use this "
"address?") % errmsg)
if not retv:
return False
return net