def check(self, args): """Validate that all fields have valid values and sanity checks.""" # Get field information responses = dict() self.parent.footer.set_text("Checking data...") for index, fieldname in enumerate(self.fields): if fieldname == "blank" or fieldname == "ifname": pass elif fieldname == "bootproto": rb_group = self.edits[index].rb_group if rb_group[0].state: responses["bootproto"] = "none" else: responses["bootproto"] = "dhcp" elif fieldname == "onboot": rb_group = self.edits[index].rb_group if rb_group[0].state: responses["onboot"] = "yes" else: responses["onboot"] = "no" else: responses[fieldname] = self.edits[index].get_edit_text() # Validate each field errors = [] # Check for the duplicate IP provided for k, v in six.iteritems(self.netsettings): if (k != self.activeiface and responses["ipaddr"] != '' and responses["ipaddr"] == v.get('addr')): errors.append("The same IP address {0} is assigned for " "interfaces '{1}' and '{2}'.".format( responses["ipaddr"], k, self.activeiface)) break if responses["onboot"] == "no": numactiveifaces = 0 for iface in self.netsettings: if self.netsettings[iface]['addr'] != "": numactiveifaces += 1 if numactiveifaces < 2 and \ self.netsettings[self.activeiface]['addr'] != "": # Block user because puppet l23network fails if all interfaces # are disabled. errors.append("Cannot disable all interfaces.") elif responses["bootproto"] == "dhcp": self.parent.footer.set_text("Scanning for DHCP servers. " "Please wait...") self.parent.refreshScreen() try: dhcptimeout = 5 dhcp_server_data = network.search_external_dhcp( self.activeiface, dhcptimeout) except network.NetworkException: self.log.warning("dhcp_checker failed to check on %s" % self.activeiface) dhcp_server_data = [] if len(dhcp_server_data) < 1: errors.append("No DHCP servers found. Cannot enable DHCP") # Check ipaddr, netmask, gateway only if static elif responses["bootproto"] == "none": try: if netaddr.valid_ipv4(responses["ipaddr"]): if not netaddr.IPAddress(responses["ipaddr"]): raise BadIPException("Not a valid IP address") else: raise BadIPException("Not a valid IP address") except (BadIPException, Exception): errors.append("Not a valid IP address: %s" % responses["ipaddr"]) try: if netaddr.valid_ipv4(responses["netmask"]): netmask = netaddr.IPAddress(responses["netmask"]) if netmask.is_netmask is False: raise BadIPException("Not a valid IP address") else: raise BadIPException("Not a valid IP address") except (BadIPException, Exception): errors.append("Not a valid netmask: %s" % responses["netmask"]) try: if len(responses["gateway"]) > 0: # Check if gateway is valid if netaddr.valid_ipv4(responses["gateway"]) is False: raise BadIPException("Gateway IP address is not valid") # Check if gateway is in same subnet if network.inSameSubnet(responses["ipaddr"], responses["gateway"], responses["netmask"]) is False: raise BadIPException("Gateway IP is not in same " "subnet as IP address") except (BadIPException, Exception) as e: errors.append(e) self.parent.footer.set_text("Scanning for duplicate IP address..") if len(responses["ipaddr"]) > 0: if self.netsettings[self.activeiface]['link'].upper() != "UP": try: network.upIface(self.activeiface) except NetworkException as e: errors.append("Cannot activate {0} to check for " "duplicate IP.".format(self.activeiface)) # Bind arping to requested IP if it's already assigned assigned_ips = [v.get('addr') for v in self.netsettings.itervalues()] arping_bind = responses["ipaddr"] in assigned_ips if network.duplicateIPExists(responses["ipaddr"], self.activeiface, arping_bind): errors.append("Duplicate host found with IP {0}.".format( responses["ipaddr"])) if len(errors) > 0: self.log.error("Errors: %s %s" % (len(errors), errors)) ModuleHelper.display_failed_check_dialog(self, errors) return False else: self.parent.footer.set_text("No errors found.") return responses
def check(self, args): """Validate that all fields have valid values and sanity checks.""" # Get field information responses = dict() self.parent.footer.set_text("Checking data...") for index, fieldname in enumerate(self.fields): if fieldname == "blank" or fieldname == "ifname": pass elif fieldname == "bootproto": rb_group = self.edits[index].rb_group if rb_group[0].state: responses["bootproto"] = "none" else: responses["bootproto"] = "dhcp" elif fieldname == "onboot": rb_group = self.edits[index].rb_group if rb_group[0].state: responses["onboot"] = "yes" else: responses["onboot"] = "no" else: responses[fieldname] = self.edits[index].get_edit_text() # Validate each field errors = [] # Check for the duplicate IP provided for k, v in self.netsettings.items(): if (k != self.activeiface and responses["ipaddr"] != '' and responses["ipaddr"] == v.get('addr')): errors.append("The same IP address {0} is assigned for " "interfaces '{1}' and '{2}'.".format( responses["ipaddr"], k, self.activeiface)) break if responses["onboot"] == "no": numactiveifaces = 0 for iface in self.netsettings: if self.netsettings[iface]['addr'] != "": numactiveifaces += 1 if numactiveifaces < 2 and \ self.netsettings[self.activeiface]['addr'] != "": # Block user because puppet l23network fails if all interfaces # are disabled. errors.append("Cannot disable all interfaces.") elif responses["bootproto"] == "dhcp": self.parent.footer.set_text("Scanning for DHCP servers. " "Please wait...") self.parent.refreshScreen() try: dhcptimeout = 5 dhcp_server_data = network.search_external_dhcp( self.activeiface, dhcptimeout) except network.NetworkException: self.log.warning("dhcp_checker failed to check on %s" % self.activeiface) dhcp_server_data = [] if len(dhcp_server_data) < 1: errors.append("No DHCP servers found. Cannot enable DHCP") # Check ipaddr, netmask, gateway only if static elif responses["bootproto"] == "none": try: if netaddr.valid_ipv4(responses["ipaddr"]): if not netaddr.IPAddress(responses["ipaddr"]): raise f_errors.BadIPException("Not a valid IP address") else: raise f_errors.BadIPException("Not a valid IP address") except (f_errors.BadIPException, Exception): errors.append("Not a valid IP address: %s" % responses["ipaddr"]) try: if netaddr.valid_ipv4(responses["netmask"]): netmask = netaddr.IPAddress(responses["netmask"]) if netmask.is_netmask is False: raise f_errors.BadIPException("Not a valid IP address") else: raise f_errors.BadIPException("Not a valid IP address") except (f_errors.BadIPException, Exception): errors.append("Not a valid netmask: %s" % responses["netmask"]) try: if len(responses["gateway"]) > 0: # Check if gateway is valid if netaddr.valid_ipv4(responses["gateway"]) is False: raise f_errors.BadIPException( "Gateway IP address is not valid") # Check if gateway is in same subnet if network.inSameSubnet(responses["ipaddr"], responses["gateway"], responses["netmask"]) is False: raise f_errors.BadIPException( "Gateway IP is not in same " "subnet as IP address") except (f_errors.BadIPException, Exception) as e: errors.append(e) self.parent.footer.set_text("Scanning for duplicate IP address..") if len(responses["ipaddr"]) > 0: if self.netsettings[self.activeiface]['link'].upper() != "UP": try: network.upIface(self.activeiface) except f_errors.NetworkException as e: errors.append("Cannot activate {0} to check for " "duplicate IP.".format(self.activeiface)) # Bind arping to requested IP if it's already assigned assigned_ips = [ v.get('addr') for v in self.netsettings.itervalues() ] arping_bind = responses["ipaddr"] in assigned_ips if network.duplicateIPExists(responses["ipaddr"], self.activeiface, arping_bind): errors.append("Duplicate host found with IP {0}.".format( responses["ipaddr"])) if len(errors) > 0: self.log.error("Errors: %s %s" % (len(errors), errors)) modulehelper.ModuleHelper.display_failed_check_dialog(self, errors) return False else: self.parent.footer.set_text("No errors found.") return responses
def check(self, args): """Validate that all fields have valid values and sanity checks.""" #Get field information responses = dict() self.parent.footer.set_text("Checking data...") for index, fieldname in enumerate(self.fields): if fieldname == "blank" or fieldname == "ifname": pass elif fieldname == "bootproto": rb_group = self.edits[index].rb_group if rb_group[0].state: responses["bootproto"] = "dhcp" else: responses["bootproto"] = "none" elif fieldname == "onboot": rb_group = self.edits[index].rb_group if rb_group[0].state: responses["onboot"] = "yes" else: responses["onboot"] = "no" else: responses[fieldname] = self.edits[index].get_edit_text() ###Validate each field errors = [] if responses["onboot"] == "no": numactiveifaces = 0 for iface in self.netsettings: if self.netsettings[iface]['addr'] != "": numactiveifaces += 1 if numactiveifaces < 2 and \ self.netsettings[self.activeiface]['addr'] != "": #Block user because puppet l23network fails if all intefaces #are disabled. errors.append("Cannot disable all interfaces.") elif responses["bootproto"] == "dhcp": self.parent.footer.set_text("Scanning for DHCP servers. " "Please wait...") self.parent.refreshScreen() try: dhcptimeout = 5 with timeout.run_with_timeout(dhcp_checker.utils.IfaceState, [self.activeiface], timeout=dhcptimeout) as iface: dhcp_server_data = timeout.run_with_timeout( dhcp_checker.api.check_dhcp_on_eth, [iface, dhcptimeout], timeout=dhcptimeout) except (KeyboardInterrupt, timeout.TimeoutError): self.log.debug("DHCP scan timed out") self.log.warning(traceback.format_exc()) dhcp_server_data = [] except Exception: self.log.warning("dhcp_checker failed to check on %s" % self.activeiface) dhcp_server_data = [] responses["dhcp_nowait"] = False if len(dhcp_server_data) < 1: self.log.debug("No DHCP servers found. Warning user about " "dhcp_nowait.") #Build dialog elements dhcp_info = [] dhcp_info.append( urwid.Padding(urwid.Text(("header", "!!! WARNING !!!")), "center")) dhcp_info.append( widget.TextLabel( "Unable to detect DHCP server" + "on interface %s." % (self.activeiface) + "\nDHCP will be set up in the background, " + "but may not receive an IP address. You may " + "want to check your DHCP connection manually " + "using the Shell Login menu to the left.")) dialog.display_dialog( self, urwid.Pile(dhcp_info), "DHCP Servers Found on %s" % self.activeiface) self.parent.refreshScreen() responses["dhcp_nowait"] = True #Check ipaddr, netmask, gateway only if static elif responses["bootproto"] == "none": try: if netaddr.valid_ipv4(responses["ipaddr"]): if not netaddr.IPAddress(responses["ipaddr"]): raise BadIPException("Not a valid IP address") else: raise BadIPException("Not a valid IP address") except (BadIPException, Exception): errors.append("Not a valid IP address: %s" % responses["ipaddr"]) try: if netaddr.valid_ipv4(responses["netmask"]): netmask = netaddr.IPAddress(responses["netmask"]) if netmask.is_netmask is False: raise BadIPException("Not a valid IP address") else: raise BadIPException("Not a valid IP address") except (BadIPException, Exception): errors.append("Not a valid netmask: %s" % responses["netmask"]) try: if len(responses["gateway"]) > 0: #Check if gateway is valid if netaddr.valid_ipv4(responses["gateway"]) is False: raise BadIPException("Gateway IP address is not valid") #Check if gateway is in same subnet if network.inSameSubnet(responses["ipaddr"], responses["gateway"], responses["netmask"]) is False: raise BadIPException("Gateway IP is not in same " "subnet as IP address") except (BadIPException, Exception) as e: errors.append(e) self.parent.footer.set_text("Scanning for duplicate IP address..") if len(responses["ipaddr"]) > 0: if self.netsettings[self.activeiface]['link'].upper() != "UP": try: network.upIface(self.activeiface) except NetworkException as e: errors.append("Cannot activate {0} to check for " "duplicate IP.".format(self.activeiface)) if network.duplicateIPExists(responses["ipaddr"], self.activeiface): errors.append("Duplicate host found with IP {0}.".format( responses["ipaddr"])) if len(errors) > 0: self.parent.footer.set_text("Error: %s" % (errors[0])) self.log.error("Errors: %s %s" % (len(errors), errors)) return False else: self.parent.footer.set_text("No errors found.") return responses
def check(self, args): """Validate that all fields have valid values and sanity checks.""" #Get field information responses = dict() self.parent.footer.set_text("Checking data...") for index, fieldname in enumerate(self.fields): if fieldname == "blank" or fieldname == "ifname": pass elif fieldname == "bootproto": rb_group = self.edits[index].rb_group if rb_group[0].state: responses["bootproto"] = "dhcp" else: responses["bootproto"] = "none" elif fieldname == "onboot": rb_group = self.edits[index].rb_group if rb_group[0].state: responses["onboot"] = "yes" else: responses["onboot"] = "no" else: responses[fieldname] = self.edits[index].get_edit_text() ###Validate each field errors = [] if responses["onboot"] == "no": numactiveifaces = 0 for iface in self.netsettings: if self.netsettings[iface]['addr'] != "": numactiveifaces += 1 if numactiveifaces < 2 and \ self.netsettings[self.activeiface]['addr'] != "": #Block user because puppet l23network fails if all intefaces #are disabled. errors.append("Cannot disable all interfaces.") elif responses["bootproto"] == "dhcp": self.parent.footer.set_text("Scanning for DHCP servers. " "Please wait...") self.parent.refreshScreen() try: dhcptimeout = 5 with timeout.run_with_timeout(dhcp_checker.utils.IfaceState, [self.activeiface], timeout=dhcptimeout) as iface: dhcp_server_data = timeout.run_with_timeout( dhcp_checker.api.check_dhcp_on_eth, [iface, dhcptimeout], timeout=dhcptimeout) except (KeyboardInterrupt, timeout.TimeoutError): self.log.debug("DHCP scan timed out") self.log.warning(traceback.format_exc()) dhcp_server_data = [] except Exception: self.log.warning("dhcp_checker failed to check on %s" % self.activeiface) dhcp_server_data = [] responses["dhcp_nowait"] = False if len(dhcp_server_data) < 1: self.log.debug("No DHCP servers found. Warning user about " "dhcp_nowait.") #Build dialog elements dhcp_info = [] dhcp_info.append(urwid.Padding( urwid.Text(("header", "!!! WARNING !!!")), "center")) dhcp_info.append( widget.TextLabel( "Unable to detect DHCP server" + "on interface %s." % (self.activeiface) + "\nDHCP will be set up in the background, " + "but may not receive an IP address. You may " + "want to check your DHCP connection manually " + "using the Shell Login menu to the left.")) dialog.display_dialog(self, urwid.Pile(dhcp_info), "DHCP Servers Found on %s" % self.activeiface) self.parent.refreshScreen() responses["dhcp_nowait"] = True #Check ipaddr, netmask, gateway only if static elif responses["bootproto"] == "none": try: if netaddr.valid_ipv4(responses["ipaddr"]): if not netaddr.IPAddress(responses["ipaddr"]): raise BadIPException("Not a valid IP address") else: raise BadIPException("Not a valid IP address") except (BadIPException, Exception): errors.append("Not a valid IP address: %s" % responses["ipaddr"]) try: if netaddr.valid_ipv4(responses["netmask"]): netmask = netaddr.IPAddress(responses["netmask"]) if netmask.is_netmask is False: raise BadIPException("Not a valid IP address") else: raise BadIPException("Not a valid IP address") except (BadIPException, Exception): errors.append("Not a valid netmask: %s" % responses["netmask"]) try: if len(responses["gateway"]) > 0: #Check if gateway is valid if netaddr.valid_ipv4(responses["gateway"]) is False: raise BadIPException("Gateway IP address is not valid") #Check if gateway is in same subnet if network.inSameSubnet(responses["ipaddr"], responses["gateway"], responses["netmask"]) is False: raise BadIPException("Gateway IP is not in same " "subnet as IP address") except (BadIPException, Exception) as e: errors.append(e) self.parent.footer.set_text("Scanning for duplicate IP address..") if len(responses["ipaddr"]) > 0: if self.netsettings[self.activeiface]['link'].upper() != "UP": try: network.upIface(self.activeiface) except NetworkException as e: errors.append("Cannot activate {0} to check for " "duplicate IP.".format(self.activeiface)) if network.duplicateIPExists(responses["ipaddr"], self.activeiface): errors.append("Duplicate host found with IP {0}.".format( responses["ipaddr"])) if len(errors) > 0: self.parent.footer.set_text("Error: %s" % (errors[0])) self.log.error("Errors: %s %s" % (len(errors), errors)) return False else: self.parent.footer.set_text("No errors found.") return responses