def _checkValues(self): if not self.ipv4Selected and not self.ipv6Selected: self.anaconda.intf.messageWindow(_("Missing protocol"), _("You must select at least one protocol version")) return False if self.ipv4Selected: if self.ipv4Method == "v4manual": try: network.sanityCheckIPString(self.ipv4Address) except network.IPMissing, msg: self._handleIPMissing(_("IPv4 Address")) return False except network.IPError, msg: self._handleIPError(_("IPv4 Address"), msg) return False if not self.ipv4Prefix: self._handleIPMissing(_("IPv4 Prefix")) return False elif (int(self.ipv4Prefix) < 0 or int(self.ipv4Prefix) > 32): msg = _("IPv4 CIDR prefix must be between 0 and 32.") self._handleIPError(_("IPv4 Prefix"), msg) return False if self.ipv4Gateway: try: network.sanityCheckIPString(self.ipv4Gateway) except network.IPError, msg: self._handleIPError(_("IPv4 Gateway"), msg) return False
def addIscsiDriveDialog(self, screen): if not network.hasActiveNetDev(): ButtonChoiceWindow( screen, _("Error"), "Must have a network configuration set up " "for iSCSI config. Please boot with " "'linux asknetwork'") return INSTALL_BACK iname = iscsi.iscsi().initiator (button, entries) = EntryWindow( screen, _("Configure iSCSI Parameters"), _("To use iSCSI disks, you must provide the address of your iSCSI target and the iSCSI initiator name you've configured for your host." ), prompts=[ _("Target IP Address"), (_("iSCSI Initiator Name"), iname), _("CHAP username"), _("CHAP password"), _("Reverse CHAP username"), _("Reverse CHAP password") ]) if button == TEXT_CANCEL_CHECK: return INSTALL_BACK (user, pw, user_in, pw_in) = entries[2:] target = entries[0].strip() try: count = len(target.split(":")) idx = target.rfind("]:") # Check for IPV6 [IPV6-ip]:port if idx != -1: ip = target[1:idx] port = target[idx + 2:] # Check for IPV4 aaa.bbb.ccc.ddd:port elif count == 2: idx = target.rfind(":") ip = target[:idx] port = target[idx + 1:] else: ip = target port = "3260" network.sanityCheckIPString(ip) except network.IPMissing, msg: raise ValueError, msg
self._handleIPError(_("IPv4 Gateway"), msg) return False if self.ipv4Nameserver: for addr in self.ipv4Nameserver.split(','): addr.split() try: network.sanityCheckIPString(addr) except network.IPError, msg: self._handleIPError(_("IPv4 Nameserver"), msg) return False if self.ipv6Selected: if self.ipv6Method == "v6manual": try: network.sanityCheckIPString(self.ipv6Address) except network.IPMissing, msg: self._handleIPMissing(_("IPv6 Address")) return False except network.IPError, msg: self._handleIPError(_("IPv6 Address"), msg) return False if not self.ipv6Prefix: self._handleIPMissing(_("IPv6 Prefix")) return False elif (int(self.ipv6Prefix) < 0 or int(self.ipv6Prefix) > 128): msg = _("IPv6 CIDR prefix must be between 0 and 128.") self._handleIPError(_("IPv6 Prefix"), msg) return False
def _checkValues(self): if not self.ipv4Selected and not self.ipv6Selected: self.anaconda.intf.messageWindow(_("Missing protocol"), _("You must select at least one protocol version")) return False if self.ipv4Selected: if self.ipv4Method == "v4manual": try: network.sanityCheckIPString(self.ipv4Address) except network.IPMissing as msg: self._handleIPMissing(_("IPv4 Address")) return False except network.IPError as msg: self._handleIPError(_("IPv4 Address"), msg) return False if not self.ipv4Prefix: self._handleIPMissing(_("IPv4 Prefix")) return False elif (int(self.ipv4Prefix) < 0 or int(self.ipv4Prefix) > 32): msg = _("IPv4 CIDR prefix must be between 0 and 32.") self._handleIPError(_("IPv4 Prefix"), msg) return False if self.ipv4Gateway: try: network.sanityCheckIPString(self.ipv4Gateway) except network.IPError as msg: self._handleIPError(_("IPv4 Gateway"), msg) return False if self.ipv4Nameserver: for addr in self.ipv4Nameserver.split(','): addr.split() try: network.sanityCheckIPString(addr) except network.IPError as msg: self._handleIPError(_("IPv4 Nameserver"), msg) return False if self.ipv6Selected: if self.ipv6Method == "v6manual": try: network.sanityCheckIPString(self.ipv6Address) except network.IPMissing as msg: self._handleIPMissing(_("IPv6 Address")) return False except network.IPError as msg: self._handleIPError(_("IPv6 Address"), msg) return False if not self.ipv6Prefix: self._handleIPMissing(_("IPv6 Prefix")) return False elif (int(self.ipv6Prefix) < 0 or int(self.ipv6Prefix) > 128): msg = _("IPv6 CIDR prefix must be between 0 and 128.") self._handleIPError(_("IPv6 Prefix"), msg) return False if self.ipv6Gateway: try: network.sanityCheckIPString(self.ipv6Gateway) except network.IPError as msg: self._handleIPError(_("IPv6 Gateway"), msg) return False if self.ipv6Nameserver: for addr in self.ipv6Nameserver.split(','): addr.split() try: network.sanityCheckIPString(addr) except network.IPError as msg: self._handleIPError(_("IPv6 Nameserver"), msg) return False return True
class NetworkConfiguratorText: def _handleIPError(self, field, errmsg): self.anaconda.intf.messageWindow(_("Error With Data"), _("An error occurred converting the " "value entered for " "\"%(field)s\":\n%(errmsg)s") \ % {'field': field, 'errmsg': errmsg}) def _handleIPMissing(self, field): self.anaconda.intf.messageWindow(_("Error With Data"), _("A value is required for the field %s") % field) def __init__(self, screen, anaconda): self.screen = screen self.anaconda = anaconda self.netdevs = self.anaconda.network.netdevices self._initValues() def _initValues(self): self.ipv4Selected = 1 self.ipv6Selected = 1 self.ipv4Method = "v4dhcp" self.ipv6Method = "v6auto" self.ipv4Address = "" self.ipv4Prefix = "" self.ipv4Gateway = "" self.ipv4Nameserver = "" self.ipv6Address = "" self.ipv6Prefix = "" self.ipv6Gateway = "" self.ipv6Nameserver = "" def run(self): dev_list = [] selected_devname = None devnames = self.netdevs.keys() devnames.sort() # Preselect device set in kickstart ksdevice = self.anaconda.network.getKSDevice() if ksdevice: ksdevice = ksdevice.get("DEVICE") for devname in devnames: hwaddr = self.netdevs[devname].get("HWADDR") if hwaddr: desc = "%s - %.50s" % (devname, hwaddr) else: desc = devname if selected_devname is None: selected_devname = devname if ksdevice and ksdevice == devname: selected_devname = devname dev_list.append((desc, devname)) while True: w = self.deviceSelectionForm(dev_list, selected_devname) result = w.run() button = w.buttons.buttonPressed(result) if button == TEXT_BACK_CHECK: self.screen.popWindow() return INSTALL_BACK selected_devname = self.interfaceList.current() while True: w = self.configForm(selected_devname) result = w.run() button = w.buttons.buttonPressed(result) if button == TEXT_BACK_CHECK: self.screen.popWindow() self.screen.popWindow() break self._readValues() if (self._checkValues() and self._applyValues(selected_devname)): self.screen.popWindow() self.screen.popWindow() return INSTALL_OK else: self.screen.popWindow() def deviceSelectionForm(self, dev_list, preselected_dev=None): grid = GridFormHelp(self.screen, _("Enable network interface"), "netselection", 1, 9) tb = TextboxReflowed(60, _("This requires that you have an active " "network connection during the installation " "process. Please select network " "interface to configure.")) grid.add(tb, 0, 0, anchorLeft = 1, padding = (0, 0, 0, 1)) self.interfaceList = Listbox(3, scroll = 1, returnExit = 0) for (desc, dev) in dev_list: self.interfaceList.append(desc, dev) if preselected_dev: self.interfaceList.setCurrent(preselected_dev) grid.add(self.interfaceList, 0, 1, padding = (0, 0, 0, 1)) grid.buttons = ButtonBar(self.screen, [TEXT_OK_BUTTON, TEXT_BACK_BUTTON] ) grid.add(grid.buttons, 0, 2, anchorLeft = 1, growx = 1) return grid def configForm(self, devname): # Create device configuration screen grid = GridFormHelp(self.screen, _("Enable network interface"), "netconfig", 1, 13) tb = TextboxReflowed(60, _("Configure interface %s " "to be used during installation process.") % devname) grid.add(tb, 0, 0, anchorLeft = 1, padding = (0, 0, 0, 1)) self.ipv4Checkbox = Checkbox(_("Enable IPv4 Support"), isOn=self.ipv4Selected) grid.add(self.ipv4Checkbox, 0, 1, anchorLeft = 1, padding = (0, 0, 0, 0), growx = 1) self.v4radio = RadioGroup() self.v4radio_auto = self.v4radio.add(_("Dynamic IP configuration (DHCP)"), "v4dhcp", self.ipv4Method=="v4dhcp") self.v4radio_manual = self.v4radio.add(_("Manual Configuration"), "v4manual", self.ipv4Method=="v4manual") grid.add(self.v4radio_auto, 0, 2, anchorLeft = 1, padding = (2, 0, 0, 0), growx = 1) grid.add(self.v4radio_manual, 0, 3, anchorLeft = 1, padding = (2, 0, 0, 0), growx = 1) ipv4Grid = Grid(4, 3) ipv4Grid.setField(Label(_("IPv4 Address:")), 0, 0, padding = (0, 0, 1, 0), anchorLeft = 1) self.ipv4AddressEntry = Entry(20, scroll=1) self.ipv4AddressEntry.set(self.ipv4Address) ipv4Grid.setField(self.ipv4AddressEntry, 1, 0) ipv4Grid.setField(Label("/"), 2, 0) self.ipv4PrefixEntry = Entry(3, scroll=0) self.ipv4PrefixEntry.set(self.ipv4Prefix) ipv4Grid.setField(self.ipv4PrefixEntry, 3, 0) ipv4Grid.setField(Label(_("Gateway:")), 0, 1, padding = (0, 0, 0, 0), anchorLeft = 1) self.ipv4GatewayEntry = Entry(20, scroll=1) self.ipv4GatewayEntry.set(self.ipv4Gateway) ipv4Grid.setField(self.ipv4GatewayEntry, 1, 1) ipv4Grid.setField(Label(_("Nameserver:")), 0, 2, padding = (0, 0, 0, 0), anchorLeft = 1) self.ipv4NameserverEntry = Entry(20, scroll=1) self.ipv4NameserverEntry.set(self.ipv4Nameserver) ipv4Grid.setField(self.ipv4NameserverEntry, 1, 2) grid.add(ipv4Grid, 0, 4, anchorLeft = 1, padding = (6, 0, 0, 0)) self.ipv6Checkbox = Checkbox(_("Enable IPv6 Support"), isOn=self.ipv6Selected) grid.add(self.ipv6Checkbox, 0, 5, anchorLeft = 1, padding = (0, 0, 0, 0), growx = 1) self.v6radio = RadioGroup() self.v6radio_auto = self.v6radio.add(_("Automatic neighbor discovery"), "v6auto", self.ipv6Method=="v6auto") self.v6radio_dhcp = self.v6radio.add(_("Dynamic IP Configuration (DHCPv6)"), "v6dhcp", self.ipv6Method=="v6dhcp") self.v6radio_manual = self.v6radio.add(_("Manual Configuration"), "v6manual", self.ipv6Method=="v6manual") grid.add(self.v6radio_auto, 0, 6, anchorLeft = 1, padding = (2, 0, 0, 0), growx = 1) grid.add(self.v6radio_dhcp, 0, 7, anchorLeft = 1, padding = (2, 0, 0, 0), growx = 1) grid.add(self.v6radio_manual, 0, 8, anchorLeft = 1, padding = (2, 0, 0, 0), growx = 1) ipv6Grid = Grid(4, 3) ipv6Grid.setField(Label(_("IPv6 Address:")), 0, 0, padding = (0, 0, 1, 0), anchorLeft = 1) self.ipv6AddressEntry = Entry(41, scroll=1) self.ipv6AddressEntry.set(self.ipv6Address) ipv6Grid.setField(self.ipv6AddressEntry, 1, 0) ipv6Grid.setField(Label("/"), 2, 0) self.ipv6PrefixEntry = Entry(4, scroll=0) self.ipv6PrefixEntry.set(self.ipv6Prefix) ipv6Grid.setField(self.ipv6PrefixEntry, 3, 0) ipv6Grid.setField(Label(_("Gateway:")), 0, 1, padding = (0, 0, 0, 0), anchorLeft = 1) self.ipv6GatewayEntry = Entry(41, scroll=1) self.ipv6GatewayEntry.set(self.ipv6Gateway) ipv6Grid.setField(self.ipv6GatewayEntry, 1, 1) ipv6Grid.setField(Label(_("Nameserver:")), 0, 2, padding = (0, 0, 0, 0), anchorLeft = 1) self.ipv6NameserverEntry = Entry(41, scroll=1) self.ipv6NameserverEntry.set(self.ipv6Nameserver) ipv6Grid.setField(self.ipv6NameserverEntry, 1, 2) grid.add(ipv6Grid, 0, 9, anchorLeft = 1, padding = (6, 0, 0, 0)) grid.buttons = ButtonBar(self.screen, [TEXT_OK_BUTTON, TEXT_BACK_BUTTON]) grid.add(grid.buttons, 0, 10, anchorLeft = 1, growx = 1) self.v4radio_manual.setCallback(self._ipv4MethodToggled) self.v4radio_auto.setCallback(self._ipv4MethodToggled) self.v6radio_manual.setCallback(self._ipv6MethodToggled) self.v6radio_auto.setCallback(self._ipv6MethodToggled) self.v6radio_dhcp.setCallback(self._ipv6MethodToggled) self.ipv4Checkbox.setCallback(self._ipv4MethodToggled) self.ipv6Checkbox.setCallback(self._ipv6MethodToggled) self._ipv4MethodToggled() self._ipv6MethodToggled() return grid def _readValues(self): self.ipv4Selected = self.ipv4Checkbox.selected() self.ipv6Selected = self.ipv6Checkbox.selected() self.ipv4Method = self.v4radio.getSelection() self.ipv6Method = self.v6radio.getSelection() self.ipv4Address = self.ipv4AddressEntry.value() self.ipv4Prefix = self.ipv4PrefixEntry.value() self.ipv4Gateway = self.ipv4GatewayEntry.value() self.ipv4Nameserver = self.ipv4NameserverEntry.value() self.ipv6Address = self.ipv6AddressEntry.value() self.ipv6Prefix = self.ipv6PrefixEntry.value() self.ipv6Gateway = self.ipv6GatewayEntry.value() self.ipv6Nameserver = self.ipv6NameserverEntry.value() def _checkValues(self): if not self.ipv4Selected and not self.ipv6Selected: self.anaconda.intf.messageWindow(_("Missing protocol"), _("You must select at least one protocol version")) return False if self.ipv4Selected: if self.ipv4Method == "v4manual": try: network.sanityCheckIPString(self.ipv4Address) except network.IPMissing, msg: self._handleIPMissing(_("IPv4 Address")) return False except network.IPError, msg: self._handleIPError(_("IPv4 Address"), msg) return False if not self.ipv4Prefix: self._handleIPMissing(_("IPv4 Prefix")) return False elif (int(self.ipv4Prefix) < 0 or int(self.ipv4Prefix) > 32): msg = _("IPv4 CIDR prefix must be between 0 and 32.") self._handleIPError(_("IPv4 Prefix"), msg) return False if self.ipv4Gateway: try: network.sanityCheckIPString(self.ipv4Gateway) except network.IPError, msg: self._handleIPError(_("IPv4 Gateway"), msg) return False if self.ipv4Nameserver: for addr in self.ipv4Nameserver.split(','): addr.split() try: network.sanityCheckIPString(addr) except network.IPError, msg: self._handleIPError(_("IPv4 Nameserver"), msg) return False
def addIscsiDrive(anaconda): if not network.hasActiveNetDev(): if not anaconda.intf.enableNetwork(): return gtk.RESPONSE_CANCEL urlgrabber.grabber.reset_curl_obj() (dxml, dialog) = gui.getGladeWidget("iscsi-config.glade", "iscsiDialog") gui.addFrame(dialog) dialog.show_all() sg = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) for w in [ "iscsiAddrEntry", "iscsiInitiatorEntry", "userEntry", "passEntry", "userinEntry", "passinEntry" ]: sg.add_widget(dxml.get_widget(w)) # get the initiator name if it exists and don't allow changing # once set initiator_entry = dxml.get_widget("iscsiInitiatorEntry") initiator_entry.set_text(anaconda.storage.iscsi.initiator) if anaconda.storage.iscsi.initiatorSet: initiator_entry.set_sensitive(False) while True: rc = dialog.run() if rc in [gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT]: break initiator = initiator_entry.get_text().strip() if len(initiator) == 0: anaconda.intf.messageWindow( _("Invalid Initiator Name"), _("You must provide an initiator name.")) continue anaconda.storage.iscsi.initiator = initiator target = dxml.get_widget("iscsiAddrEntry").get_text().strip() user = dxml.get_widget("userEntry").get_text().strip() pw = dxml.get_widget("passEntry").get_text().strip() user_in = dxml.get_widget("userinEntry").get_text().strip() pw_in = dxml.get_widget("passinEntry").get_text().strip() try: count = len(target.split(":")) idx = target.rfind("]:") # Check for IPV6 [IPV6-ip]:port if idx != -1: ip = target[1:idx] port = target[idx + 2:] # Check for IPV4 aaa.bbb.ccc.ddd:port elif count == 2: idx = target.rfind(":") ip = target[:idx] port = target[idx + 1:] else: ip = target port = "3260" network.sanityCheckIPString(ip) except (network.IPMissing, network.IPError) as msg: anaconda.intf.messageWindow(_("Error with Data"), msg) continue try: anaconda.storage.iscsi.addTarget(ip, port, user, pw, user_in, pw_in, anaconda.intf) except ValueError as e: anaconda.intf.messageWindow(_("Error"), str(e)) continue except IOError as e: anaconda.intf.messageWindow(_("Error"), str(e)) rc = gtk.RESPONSE_CANCEL break dialog.destroy() return rc