def __init__(self, title, description, plugin): self.keys = [ "rhn.proxyhost", "rhn.proxyport", "rhn.proxyuser", "rhn.proxypassword" ] def clear_invalid(dialog, changes): [plugin.stash_change(prefix) for prefix in self.keys] title = _("RHSM Proxy Information") entries = [ ui.Entry("rhn.proxyhost", "Server:"), ui.Entry("rhn.proxyport", "Port:"), ui.Entry("rhn.proxyuser", "Username:"******"rhn.proxypassword", "Password:"******"label[0]", description), ui.Divider("divider[0]") ] children.extend(entries) super(ProxyDialog, self).__init__("proxy.dialog", title, children) self.buttons = [ ui.CloseButton("proxy.save", _("Save"), enabled=True), ui.CloseButton("proxy.close", _("Cancel")) ] b = plugins.UIElements(self.buttons) b["proxy.close"].on_activate.clear() b["proxy.close"].on_activate.connect(ui.CloseAction()) b["proxy.close"].on_activate.connect(clear_invalid)
def __init__(self, plugin, iface, app_mode, config_nfs, db_type, firewall, dc_type): super(AdvanceOptionsDialog, self).__init__("dialog.options", iface, []) self.plugin = plugin #padd = lambda l: l.ljust(14) ws = [ ui.Options("engine_cfg.model", "App modes:", self._model), ui.Options("engine_cfg.storage", "Storage:", self._storage), ui.Options("engine_cfg.isoASK", "NFS ISO Domain:", self._iso_domain), ui.Options("engine_cfg.dbTYPE", "DB type:", self._db_type), ui.Options("engine_cfg.firewall", "Firewall:", self._firewall), ] self.plugin._model_extra.update({ "engine_cfg.firewall": firewall, "engine_cfg.model": app_mode or 'both', "engine_cfg.storage": dc_type or 'nfs', "engine_cfg.isoASK": config_nfs or False, "engine_cfg.dbTYPE": db_type, }) self.plugin.widgets.add(ws) self.children = ws self.buttons = [ ui.SaveButton("dialog.options.save", "Aplly"), ui.CloseButton("dialog.options.close", "Cancel"), ]
def _check_outstanding_changes(self): """This function checks if any UI Element has changed """ has_outstanding_changes = False return has_outstanding_changes # FIXME the rest of this function has to be activated when it # is possible to set the selected menu item in the left-sided # main menu # otehrwise this popup will show, but the next menu item is selected # and we can not reset it to the entry which raised this popup if self.current_plugin() and self.current_plugin().pending_changes(): pending_changes = self.current_plugin().pending_changes() elements = self.current_plugin().widgets self.logger.debug("Pending changes: %s" % pending_changes) self.logger.debug("Available elements: %s" % elements) msg = "" for path in [p for p in pending_changes if p in elements]: self.logger.debug("Element '%s' changed" % path) # assumption that element is a container element = elements[path] field = element.label() self.logger.debug("Changed widget: " + "%s %s" % (path, element)) msg += "- %s\n" % (field.strip(":")) if msg: txt = "The following fields have changed:\n%s" % msg txt += "\n\nPlease save or reset the page." dialog = ui.Dialog("dialog.changes", "Pending Changes", [ui.Label("dialog.changes.txt", txt)]) dialog.buttons = [ui.CloseButton("dialog.changes.close", "Back")] self.show(dialog) has_outstanding_changes = True
def display_exception_as_notice(e): self.logger.debug(traceback.format_exc()) children = [ui.Label("dialog.notice.exception", "%s" % e)] notice = ui.Dialog("dialog.notice", "An exception occurred", children) notice.buttons = [ ui.CloseButton("dialog.notice.action.close", "Close") ] self.show(notice)
def notice(self, msg): """Displays a notice on the screen """ if True: children = [ui.Label("app.notice.text", msg)] dialog = ui.Dialog("app.notice", "Notice", children) dialog.buttons = [ui.CloseButton("app.notice.close")] self.show(dialog) else: self.ui._show_on_notice(msg)
def __init__(self, path, title, description): title = "Custom Block Device" device_entry = ui.Entry("boot.device.custom", "Device path:") children = [ui.Label("label[0]", description), ui.Divider("divider[0]"), device_entry] super(CustomDeviceDialog, self).__init__(path, title, children) self.buttons = [ui.SaveButton("dialog.device.custom.save"), ui.CloseButton("dialog.device.custom.close", "Cancel")]
def __init__(self, path, title): super(HostkeyDialog, self).__init__(path, title, []) ssh = security.Ssh() fp, hk = ssh.get_hostkey() self.children = [ ui.Label("hostkey.label[0]", "RSA Host Key Fingerprint:"), ui.Label("hostkey.fp", fp), ui.Divider("hostkey.divider[0]"), ui.Label("hostkey.label[1]", "RSA Host Key:"), ui.Label("hostkey", "\n".join(textwrap.wrap(hk, 64))), ] self.buttons = [ui.CloseButton("dialog.close")]
def __init__(self, path_prefix, title, description): title = _("Custom Block Device") device_entry = ui.Entry(path_prefix, _("Device path:")) children = [ui.Label("label[0]", description), ui.Divider("divider[0]"), device_entry] super(CustomDeviceDialog, self).__init__("%s.dialog" % path_prefix, title, children) self.buttons = [ui.SaveButton("dialog.device.custom.save", _("Save"), enabled=False), ui.CloseButton("dialog.device.custom.close", _("Cancel"))]
def quit(instance): def ui_quit(dialog, changes): instance.ui.quit() txt = "Are you sure you want to quit?" dialog = ui.ConfirmationDialog("dialog.exit", "Exit", txt, [ ui.Button("dialog.exit.yes", "Yes"), ui.CloseButton("dialog.exit.close", "No") ]) dialog.buttons[0].on_activate.clear() dialog.buttons[0].on_activate.connect(ui.CloseAction()) dialog.buttons[0].on_activate.connect(ui_quit) instance.show(dialog)
def quit(instance): def ui_quit(dialog, changes): utils.system.reboot() instance.ui.quit() txt = "Are you sure you want to quit? The system will be rebooted." dialog = ui.ConfirmationDialog("dialog.exit", "Exit", txt, [ ui.Button("dialog.exit.yes", "Reboot"), ui.CloseButton("dialog.exit.close", "Cancel") ]) dialog.buttons[0].on_activate.clear() dialog.buttons[0].on_activate.connect(ui.CloseAction()) dialog.buttons[0].on_activate.connect(ui_quit) instance.show(dialog)
def __init__(self, path_prefix, title, description, plugin): def clear_invalid(dialog, changes): plugin.stash_change(path_prefix) title = _("Custom Block Device") device_entry = ui.Entry(path_prefix, _("Device path:")) children = [ui.Label("label[0]", description), ui.Divider("divider[0]"), device_entry] super(CustomDeviceDialog, self).__init__("%s.dialog" % path_prefix, title, children) self.buttons = [ui.SaveButton("dialog.device.custom.save", _("Save"), enabled=False), ui.CloseButton("dialog.device.custom.close", _("Cancel"))] b = plugins.UIElements(self.buttons) b["dialog.device.custom.close"].on_activate.clear() b["dialog.device.custom.close"].on_activate.connect(ui.CloseAction()) b["dialog.device.custom.close"].on_activate.connect(clear_invalid)
def __init__(self, title, plugin): self.keys = ["maintenance.level"] self.plugin = plugin def clear_invalid(dialog, changes): [plugin.stash_change(prefix) for prefix in self.keys] entries = [ui.Options("maintenance.level", "Maintenance Level", self.states, selected=self.__vm_status())] children = [ui.Divider("divider.options"), ui.Label("label[0]", "Please select the maintenance " "level"), ui.Divider("divider[0]")] children.extend(entries) super(MaintenanceDialog, self).__init__( "maintenance.dialog", title, children) self.buttons = [ui.SaveButton("maintenance.confirm", "Set"), ui.CloseButton("maintenance.close", "Cancel")] b = plugins.UIElements(self.buttons) b["maintenance.close"].on_activate.clear() b["maintenance.close"].on_activate.connect(ui.CloseAction()) b["maintenance.close"].on_activate.connect(clear_invalid)
def __init__(self, title, plugin): self.keys = ["hosted_engine.diskpath", "hosted_engine.pxe"] def clear_invalid(dialog, changes): [plugin.stash_change(prefix) for prefix in self.keys] entries = [ui.Entry("hosted_engine.diskpath", "Engine ISO/OVA URL for download:"), ui.Checkbox("hosted_engine.pxe", "PXE Boot Engine VM"), ui.Divider("divider[1]"), ui.SaveButton("deploy.additional", "Add this host to an existing group")] children = [ui.Label("label[0]", "Please provide details for " "deployment of hosted engine"), ui.Divider("divider[0]")] children.extend(entries) super(DeployDialog, self).__init__("deploy.dialog", title, children) self.buttons = [ui.SaveButton("deploy.confirm", "Deploy"), ui.CloseButton("deploy.close", "Cancel")] b = plugins.UIElements(self.buttons) b["deploy.close"].on_activate.clear() b["deploy.close"].on_activate.connect(ui.CloseAction()) b["deploy.close"].on_activate.connect(clear_invalid)
def notice(self, msg): children = [ui.Label("app.notice.text", msg)] dialog = ui.Dialog("app.notice", "Notice", children) dialog.buttons = [ui.CloseButton("app.notice.close")]
def __init__(self, plugin, ifname): super(NicDetailsDialog, self).__init__("dialog.nic", "NIC Details: %s" % ifname, []) self.plugin = plugin # Populate model with nic specific informations self.logger.debug("Building NIC details dialog for %s" % ifname) nic = utils.network.NodeNetwork().nics()[ifname] model = defaults.Network().retrieve() ip6model = defaults.IPv6().retrieve() self.logger.debug("nic: %s" % nic) self.logger.debug("model: %s" % model) self.logger.debug("ip6model: %s" % ip6model) is_primary_interface = model["iface"] == ifname link_status_txt = ("Connected" if nic.has_link() else "Disconnected") vendor_txt = nic.vendor[:24] if nic.vendor else "" self.plugin._model_extra.update({ "dialog.nic.driver": nic.driver, "dialog.nic.vendor": vendor_txt, "dialog.nic.link_status": link_status_txt, "dialog.nic.hwaddress": nic.hwaddr, }) if isinstance(nic, network.BondedNIC): self.plugin._model_extra.update({ "dialog.nic.bond_mode": nic.mode, "dialog.nic.bond_slaves": " ".join(nic.slaves) }) bootproto = model["bootproto"] ipaddr = model["ipaddr"] netmask = model["netmask"] gateway = model["gateway"] vlanid = model["vlanid"] if model["bootproto"] == "dhcp": if nic.exists(): routes = utils.network.Routes() gateway = routes.default() ipaddr, netmask = nic.ipv4_address().items() vlanid = ",".join(nic.vlanids()) else: if ipaddr: bootproto = "static" nicfields = { "dialog.nic.ipv4.bootproto": bootproto, "dialog.nic.ipv4.address": ipaddr, "dialog.nic.ipv4.netmask": netmask, "dialog.nic.ipv4.gateway": gateway, "dialog.nic.ipv6.bootproto": ip6model["bootproto"], "dialog.nic.ipv6.address": ip6model["ipaddr"], "dialog.nic.ipv6.netmask": ip6model["netmask"], "dialog.nic.ipv6.gateway": ip6model["gateway"], "dialog.nic.vlanid": vlanid, } self.plugin._model_extra.update(nicfields) if not is_primary_interface: # Unset all NIC fields. Because their values are only relevant # for the primary interface self.plugin._model_extra.update(dict.fromkeys(nicfields.keys())) self.logger.debug("model: %s" % self.plugin.model()) padd = lambda l: l.ljust(12) ws = [ ui.Row("dialog.nic._row[0]", [ ui.KeywordLabel("dialog.nic.driver", padd(_("Driver: "))), ui.KeywordLabel("dialog.nic.vendor", padd(_("Vendor: "))), ]), ui.Row("dialog.nic._row[2]", [ ui.KeywordLabel("dialog.nic.link_status", padd("Link Status: ")), ui.KeywordLabel("dialog.nic.hwaddress", padd("MAC Address: ")), ]) ] if isinstance(nic, network.BondedNIC): ws += [ ui.Row("dialog.nic._row[3]", [ ui.KeywordLabel("dialog.nic.bond_mode", _("Bond Mode: ")), ui.KeywordLabel("dialog.nic.bond_slaves", _("Bond Slaves: ")) ]) ] ws += [ ui.Divider("dialog.nic._divider[0]"), ui.Label("dialog.nic.ipv4._header", _("IPv4 Settings")), ui.Options("dialog.nic.ipv4.bootproto", "Bootprotocol: ", [("none", _("Disabled")), ("dhcp", _("DHCP")), ("static", _("Static"))]), ui.Row("dialog.nic._row[4]", [ ui.Entry("dialog.nic.ipv4.address", padd(_("IP Address: "))), ui.Entry("dialog.nic.ipv4.netmask", padd(_(" Netmask: "))) ]), ui.Row("dialog.nic._row[5]", [ ui.Entry("dialog.nic.ipv4.gateway", padd(_("Gateway: "))), ui.Label("dummy[0]", "") ]), ui.Divider("dialog.nic._divider[1]"), ui.Label("dialog.nic.ipv6._header", _("IPv6 Settings")), ui.Options("dialog.nic.ipv6.bootproto", "Bootprotocol: ", [("none", _("Disabled")), ("auto", _("Auto")), ("dhcp", _("DHCP")), ("static", _("Static"))]), ui.Row("dialog.nic._row[6]", [ ui.Entry("dialog.nic.ipv6.address", padd(_("IP Address: "))), ui.Entry("dialog.nic.ipv6.netmask", padd( _(" Prefix Length: "))) ]), ui.Row("dialog.nic._row[7]", [ ui.Entry("dialog.nic.ipv6.gateway", padd(_("Gateway: "))), ui.Label("dummy[1]", "") ]), ui.Divider("dialog.nic._divider[2]"), ui.Row("dialog.nic._row[8]", [ ui.Entry("dialog.nic.vlanid", padd(_("VLAN ID: "))), ui.Label("dummy[2]", "") ]), ui.Divider("dialog.nic._divider[3]"), ui.Divider("dialog.nic._divider[4]"), ui.Button("dialog.nic.identify", _("Flash Lights to Identify")) ] self.plugin.widgets.add(ws) self.children = ws self.plugin._nic_details_group.enabled(False) if isinstance(nic, network.BridgedNIC): self.buttons = [ui.CloseButton("dialog.nic.close", _("Close"))] else: self.plugin.widgets["dialog.nic.vlanid"].enabled(True) self.buttons = [ ui.SaveButton("dialog.nic.save", _("Save")), ui.CloseButton("dialog.nic.close", _("Close")) ]
def __init__(self, plugin, iface): super(NicDetailsDialog, self).__init__("dialog.nic", "NIC Details: %s" % iface, []) self.plugin = plugin # Populate model with nic specific informations self.logger.debug("Building NIC details dialog for %s" % iface) self.logger.debug("Getting informations for NIC details page") live = utils.network.node_nics()[iface] cfg = defaults.Network().retrieve() self.logger.debug("live: %s" % live) self.logger.debug("cfg: %s" % cfg) # The primary interface of this Node: node_bridge_slave = config.network.node_bridge_slave() if node_bridge_slave != iface: # The config contains the information for the primary iface, # because this iface is not the primary iface we clear the config cfg = {k: "" for k in cfg.keys()} ipaddr, netmask, gateway, vlanid = (cfg["ipaddr"], cfg["netmask"], cfg["gateway"], cfg["vlanid"]) bridge_nic = utils.network.NIC(live["bridge"]) if cfg["bootproto"] == "dhcp": if bridge_nic.exists(): routes = utils.network.Routes() ipaddr, netmask = bridge_nic.ipv4_address().items() gateway = routes.default() vlanid = bridge_nic.vlanid() else: self.logger.warning("Bridge assigned but couldn't gather " + "live info: %s" % bridge_nic) self.plugin._model_extra.update({ "dialog.nic.iface": live["name"], "dialog.nic.driver": live["driver"], "dialog.nic.protocol": live["bootproto"] or "N/A", "dialog.nic.vendor": live["vendor"], "dialog.nic.link_status": "Connected" if live["link_detected"] else "Disconnected", "dialog.nic.hwaddress": live["hwaddr"], "dialog.nic.ipv4.bootproto": cfg["bootproto"], "dialog.nic.ipv4.address": ipaddr, "dialog.nic.ipv4.netmask": netmask, "dialog.nic.ipv4.gateway": gateway, "dialog.nic.vlanid": vlanid, }) self.logger.debug("model: %s" % self.plugin.model()) padd = lambda l: l.ljust(14) ws = [ ui.Row("dialog.nic._row[0]", [ ui.KeywordLabel("dialog.nic.iface", padd("Interface: ")), ui.KeywordLabel("dialog.nic.driver", padd("Driver: ")), ]), ui.Row("dialog.nic._row[1]", [ ui.KeywordLabel("dialog.nic.protocol", padd("Protocol: ")), ui.KeywordLabel("dialog.nic.vendor", padd("Vendor: ")), ]), ui.Row("dialog.nic._row[2]", [ ui.KeywordLabel("dialog.nic.link_status", padd("Link Status: ")), ui.KeywordLabel("dialog.nic.hwaddress", padd("MAC Address: ")), ]), ui.Divider("dialog.nic._divider[0]"), ui.Header("dialog.nic.ipv4._header", "IPv4 Settings"), ui.Options("dialog.nic.ipv4.bootproto", "Bootprotocol: ", [("none", "Disabled"), ("dhcp", "DHCP"), ("static", "Static")]), ui.Entry("dialog.nic.ipv4.address", padd("IP Address: ")), ui.Entry("dialog.nic.ipv4.netmask", padd("Netmask: ")), ui.Entry("dialog.nic.ipv4.gateway", padd("Gateway: ")), ui.Divider("dialog.nic._divider[1]"), ui.Entry("dialog.nic.vlanid", padd("VLAN ID: ")), ] self.plugin.widgets.add(ws) self.children = ws self.buttons = [ ui.SaveButton("dialog.nic.save", "Save"), ui.CloseButton("dialog.nic.close", "Close"), ] self.plugin._nic_details_group.enabled(False)
def __init__(self, plugin, ifname): super(NicDetailsDialog, self).__init__("dialog.nic", "NIC Details: %s" % ifname, []) self.plugin = plugin # Populate model with nic specific informations self.logger.debug("Building NIC details dialog for %s" % ifname) nic = utils.network.NodeNetwork().nics()[ifname] model = defaults.Network().retrieve() ip6model = defaults.IPv6().retrieve() m_layout = defaults.NetworkLayout().retrieve() self.logger.debug("nic: %s" % nic) self.logger.debug("model: %s" % model) self.logger.debug("ip6model: %s" % ip6model) is_primary_interface = model["iface"] == ifname if not is_primary_interface: # The config contains the information for the primary ifnamee, # because this ifnamee is not the primaryifnameme we clear the # config model = dict((k, "") for k in model.keys()) ipaddr, netmask, gateway, vlanid = (model["ipaddr"], model["netmask"], model["gateway"], model["vlanid"]) ip6addr, ip6netmask, ip6gateway, ip6bootproto = (ip6model["ipaddr"], ip6model["netmask"], ip6model["gateway"], ip6model["bootproto"]) bootproto = model["bootproto"] if model["bootproto"] == "dhcp": if nic.exists(): routes = utils.network.Routes() gateway = routes.default() ipaddr, netmask = nic.ipv4_address().items() vlanid = ",".join(nic.vlanids()) else: if ipaddr: bootproto = "static" link_status_txt = ("Connected" if nic.has_link() else "Disconnected") vendor_txt = nic.vendor[:24] if nic.vendor else "" self.plugin._model_extra.update({ "dialog.nic.driver": nic.driver, "dialog.nic.vendor": vendor_txt, "dialog.nic.link_status": link_status_txt, "dialog.nic.hwaddress": nic.hwaddr, "dialog.nic.ipv4.bootproto": bootproto, "dialog.nic.ipv4.address": ipaddr, "dialog.nic.ipv4.netmask": netmask, "dialog.nic.ipv4.gateway": gateway, "dialog.nic.ipv6.bootproto": ip6bootproto, "dialog.nic.ipv6.address": ip6addr, "dialog.nic.ipv6.netmask": ip6netmask, "dialog.nic.ipv6.gateway": ip6gateway, "dialog.nic.vlanid": vlanid, "dialog.nic.layout_bridged": m_layout["layout"] == "bridged", }) self.logger.debug("model: %s" % self.plugin.model()) padd = lambda l: l.ljust(12) ws = [ ui.Row("dialog.nic._row[0]", [ ui.KeywordLabel("dialog.nic.driver", padd("Driver: ")), ui.KeywordLabel("dialog.nic.vendor", padd("Vendor: ")), ]), ui.Row("dialog.nic._row[2]", [ ui.KeywordLabel("dialog.nic.link_status", padd("Link Status: ")), ui.KeywordLabel("dialog.nic.hwaddress", padd("MAC Address: ")), ]), ui.Divider("dialog.nic._divider[0]"), ui.Label("dialog.nic.ipv4._header", "IPv4 Settings"), ui.Options("dialog.nic.ipv4.bootproto", "Bootprotocol: ", [("none", "Disabled"), ("dhcp", "DHCP"), ("static", "Static")]), ui.Row("dialog.nic._row[4]", [ ui.Entry("dialog.nic.ipv4.address", padd("IP Address: ")), ui.Entry("dialog.nic.ipv4.netmask", padd(" Netmask: ")) ]), ui.Row("dialog.nic._row[5]", [ ui.Entry("dialog.nic.ipv4.gateway", padd("Gateway: ")), ui.Label("dummy[0]", "") ]), ui.Divider("dialog.nic._divider[1]"), ui.Label("dialog.nic.ipv6._header", "IPv6 Settings"), ui.Options("dialog.nic.ipv6.bootproto", "Bootprotocol: ", [("none", "Disabled"), ("auto", "Auto"), ("dhcp", "DHCP"), ("static", "Static")]), ui.Row("dialog.nic._row[6]", [ ui.Entry("dialog.nic.ipv6.address", padd("IP Address: ")), ui.Entry("dialog.nic.ipv6.netmask", padd(" Prefix Length: ")) ]), ui.Row("dialog.nic._row[7]", [ ui.Entry("dialog.nic.ipv6.gateway", padd("Gateway: ")), ui.Label("dummy[1]", "") ]), ui.Divider("dialog.nic._divider[2]"), ui.Row("dialog.nic._row[8]", [ ui.Entry("dialog.nic.vlanid", padd("VLAN ID: ")), ui.Label("dummy[2]", "") ]), ui.Divider("dialog.nic._divider[3]"), ui.Checkbox("dialog.nic.layout_bridged", "Use Bridge: "), ui.Divider("dialog.nic._divider[4]"), ui.Button("dialog.nic.identify", "Flash Lights to Identify"), ] self.plugin.widgets.add(ws) self.children = ws self.buttons = [ ui.SaveButton("dialog.nic.save", "Save"), ui.CloseButton("dialog.nic.close", "Close") ] self.plugin._nic_details_group.enabled(False) self.plugin.widgets["dialog.nic.vlanid"].enabled(True) self.plugin.widgets["dialog.nic.layout_bridged"].enabled(True)
def __init__(self, path, title): super(CPUFeaturesDialog, self).__init__(path, title, []) self.children = [ ui.Label("label[0]", utils.system.cpu_details()), ] self.buttons = [ui.CloseButton("dialog.close")]