mirror of
https://github.com/virt-manager/virt-manager.git
synced 2024-10-27 01:55:20 +03:00
create: Warn if network doesn't support PXE, if PXE selected
This commit is contained in:
parent
766ddc7bf6
commit
8ff71a65b7
@ -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()
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user