create: Warn if network doesn't support PXE, if PXE selected

This commit is contained in:
Cole Robinson 2010-12-04 12:28:44 -05:00
parent 766ddc7bf6
commit 8ff71a65b7
4 changed files with 120 additions and 42 deletions

View File

@ -131,6 +131,7 @@ class vmmCreate(gobject.GObject):
"on_config_storage_browse_clicked": self.browse_storage,
"on_config_storage_select_toggled": self.toggle_storage_select,
"on_config_netdev_changed": self.netdev_changed,
"on_config_set_macaddr_toggled": self.toggle_macaddr,
"on_config_hv_changed": self.hv_changed,
@ -530,26 +531,41 @@ class vmmCreate(gobject.GObject):
util.tooltip_wrapper(storage_area, storage_tooltip)
# Networking
net_expander = self.window.get_widget("config-advanced-expander")
net_expander = self.window.get_widget("config-advanced-expander")
net_list = self.window.get_widget("config-netdev")
net_warn_icon = self.window.get_widget("config-netdev-warn-icon")
net_warn_box = self.window.get_widget("config-netdev-warn-box")
net_expander.hide()
net_list = self.window.get_widget("config-netdev")
net_warn = self.window.get_widget("config-netdev-warn")
net_warn_icon.hide()
net_warn_box.hide()
net_expander.set_expanded(False)
do_warn = uihelpers.populate_network_list(net_list, self.conn)
if self.conn.netdev_error or do_warn:
net_warn.show()
net_expander.set_expanded(True)
if self.conn.netdev_error:
util.tooltip_wrapper(net_warn, self.conn.netdev_error)
else:
net_warn.hide()
net_expander.set_expanded(False)
self.set_net_warn(self.conn.netdev_error or do_warn,
self.conn.netdev_error, True)
newmac = uihelpers.generate_macaddr(self.conn)
self.window.get_widget("config-set-macaddr").set_active(bool(newmac))
self.window.get_widget("config-macaddr").set_text(newmac)
def set_net_warn(self, show_warn, msg, do_tooltip):
net_warn_icon = self.window.get_widget("config-netdev-warn-icon")
net_warn_box = self.window.get_widget("config-netdev-warn-box")
net_warn_label = self.window.get_widget("config-netdev-warn-label")
net_expander = self.window.get_widget("config-advanced-expander")
if show_warn:
net_expander.set_expanded(True)
if do_tooltip:
net_warn_icon.set_property("visible", show_warn)
if msg:
util.tooltip_wrapper(net_warn_icon, show_warn and msg or "")
else:
net_warn_box.set_property("visible", show_warn)
markup = show_warn and ("<small>%s</small>" % msg) or ""
net_warn_label.set_markup(markup)
def populate_hv(self):
hv_list = self.window.get_widget("config-hv")
model = hv_list.get_model()
@ -896,6 +912,27 @@ class vmmCreate(gobject.GObject):
self.set_conn(conn)
def netdev_changed(self, ignore):
self.check_network_selection()
def check_network_selection(self):
src = self.window.get_widget("config-netdev")
idx = src.get_active()
show_pxe_warn = True
if not idx < 0:
row = src.get_model()[idx]
ntype = row[0]
obj = row[6]
show_pxe_warn = (
(ntype == virtinst.VirtualNetworkInterface.TYPE_USER or
(ntype == virtinst.VirtualNetworkInterface.TYPE_VIRTUAL and
not obj.can_pxe())))
self.set_net_warn(show_pxe_warn,
_("Network selection does not support PXE"), False)
def hv_changed(self, src):
idx = src.get_active()
if idx < 0:
@ -1096,23 +1133,31 @@ class vmmCreate(gobject.GObject):
if pagenum == PAGE_INSTALL:
self.detect_media_os()
if pagenum == PAGE_FINISH:
# This is hidden in reset_state, so that it doesn't distort
# the size of the wizard if it is expanded by default due to
# error
self.window.get_widget("config-advanced-expander").show()
self.window.get_widget("create-forward").hide()
self.window.get_widget("create-finish").show()
self.window.get_widget("create-finish").grab_focus()
self.populate_summary()
# Repopulate the HV list, so we can make install method relevant
# changes
self.populate_hv()
else:
if pagenum != PAGE_FINISH:
self.window.get_widget("create-forward").show()
self.window.get_widget("create-finish").hide()
return
# PAGE_FINISH
# This is hidden in reset_state, so that it doesn't distort
# the size of the wizard if it is expanded by default due to
# error
self.window.get_widget("config-advanced-expander").show()
self.window.get_widget("create-forward").hide()
self.window.get_widget("create-finish").show()
self.window.get_widget("create-finish").grab_focus()
self.populate_summary()
# Repopulate the HV list, so we can make install method relevant
# changes
self.populate_hv()
# Make sure the networking selection takes into account
# the install method, so we can warn if trying to PXE boot with
# insufficient network option
self.check_network_selection()
def build_guest(self, installer, name):
guest = installer.guest_from_installer()

View File

@ -140,9 +140,9 @@ class vmmNetwork(gobject.GObject):
forward, forwardDev = self.get_ipv4_forward()
return vmmNetwork.pretty_desc(forward, forwardDev)
def is_read_only(self):
if self.connection.is_read_only():
return True
return False
def can_pxe(self):
xml = self.get_xml()
return (util.get_xml_path(xml, "/network/forward/@mode") == "route" or
util.get_xml_path(xml, "/network/ip/dhcp/bootp/@file"))
gobject.type_register(vmmNetwork)

View File

@ -263,8 +263,8 @@ def pretty_network_desc(nettype, source=None, netobj=None):
def init_network_list(net_list, bridge_box):
# [ network type, source name, label, sensitive?, net is active,
# manual bridge]
net_model = gtk.ListStore(str, str, str, bool, bool, bool)
# manual bridge, net instance]
net_model = gtk.ListStore(str, str, str, bool, bool, bool, object)
net_list.set_model(net_model)
net_list.connect("changed", net_list_changed, bridge_box)
@ -306,8 +306,10 @@ def populate_network_list(net_list, conn):
iface_dict = {}
def build_row(nettype, name, label, is_sensitive, is_running,
manual_bridge=False):
return [nettype, name, label, is_sensitive, is_running, manual_bridge]
manual_bridge=False, obj=None):
return [nettype, name, label,
is_sensitive, is_running, manual_bridge,
obj]
def set_active(idx):
net_list.set_active(idx)
@ -345,7 +347,7 @@ def populate_network_list(net_list, conn):
netIdxLabel = label
vnet_dict[label] = build_row(nettype, net.get_name(), label, True,
net.is_active())
net.is_active(), obj=net)
# Build a list of vnet bridges, so we know not to list them
# in the physical interface list
@ -385,7 +387,7 @@ def populate_network_list(net_list, conn):
if hasShared and not brIdxLabel:
brIdxLabel = label
row = build_row(nettype, bridge_name, label, sensitive, True)
row = build_row(nettype, bridge_name, label, sensitive, True, obj=br)
if sensitive:
bridge_dict[label] = row

View File

@ -1656,6 +1656,35 @@ User shouldn't see this.</property>
<widget class="GtkVBox" id="vbox17">
<property name="visible">True</property>
<property name="spacing">6</property>
<child>
<widget class="GtkHBox" id="config-netdev-warn-box">
<property name="visible">True</property>
<property name="spacing">6</property>
<child>
<widget class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="stock">gtk-dialog-warning</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="config-netdev-warn-label">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label">warn</property>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="vbox6">
<property name="visible">True</property>
@ -1666,6 +1695,7 @@ User shouldn't see this.</property>
<child>
<widget class="GtkComboBox" id="config-netdev">
<property name="visible">True</property>
<signal name="changed" handler="on_config_netdev_changed"/>
</widget>
<packing>
<property name="expand">False</property>
@ -1674,7 +1704,7 @@ User shouldn't see this.</property>
</packing>
</child>
<child>
<widget class="GtkImage" id="config-netdev-warn">
<widget class="GtkImage" id="config-netdev-warn-icon">
<property name="visible">True</property>
<property name="stock">gtk-dialog-warning</property>
</widget>
@ -1733,7 +1763,7 @@ User shouldn't see this.</property>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
<property name="position">1</property>
</packing>
</child>
<child>
@ -1749,12 +1779,13 @@ User shouldn't see this.</property>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
<property name="position">2</property>
</packing>
</child>
<child>
<widget class="GtkHBox" id="hbox13">
<property name="visible">True</property>
<property name="spacing">6</property>
<child>
<widget class="GtkEntry" id="config-macaddr">
<property name="visible">True</property>
@ -1778,7 +1809,7 @@ User shouldn't see this.</property>
</child>
</widget>
<packing>
<property name="position">2</property>
<property name="position">3</property>
</packing>
</child>
</widget>