def wbDeleteConfigSet(self): """ Process return from delete configuration set confirmation form """ req = cherrypy.request if "Confirm" in req.paramMap.keys(): configset = req.paramMap["WbConfigSet"] if not ConfigSet.exists(configset): return self.wbConfigError("Configuration set does not exist: "+configset) ConfigSet.delete(configset) return self.ConfigFrontPage()
def wbNewConfigSet(self): """ Process return from new configuration set form """ req = cherrypy.request if "Confirm" in req.paramMap.keys(): configset = req.paramMap["WbConfigSet"] if not ConfigSet.validName(configset): return self.wbConfigError("Invalid configuration set name: '"+configset+"'") if ConfigSet.exists(configset): return self.wbConfigError("Configuration set already exists: "+configset) ConfigSet.create(configset) return self.ConfigFrontPage()
def listNodes(configsetname): """ Return list of node numbers in stored configuration set """ def isConfig(f): return len(f) == 2 and f[1] == "xml" def nodeNum(f): return f[0] def splitName(f): return f.split('.', 2) cnfset = ConfigSet.configsetPath(configsetname) nodes = map(splitName, os.listdir(cnfset)) return map(nodeNum, filter(isConfig, nodes))
def wbConfigSets(self): cherrypy.response.headerMap["Content-Type"] = "application/xml" cherrypy.response.headerMap["Cache-Control"] = "no-cache" configsets = map( wrap("<ConfigSet>", "</ConfigSet>"), ConfigSet.listNames() ) return ( """<?xml version="1.0" encoding="utf-8" ?> <ConfigSets> """+ "\n".join(configsets)+ """ </ConfigSets> """ )
def ShowConfigForm(self, configsetname, confignode, configname): cherrypy.response.headerMap["Cache-Control"] = "no-cache" ### read config into local structure if not ConfigSet.exists(configsetname): return self.wbConfigError("Configuration set does not exist: "+configsetname) if not Config.exists(configsetname, confignode): return self.wbConfigError( "No configuration file for node (%s, %s)" % (configset, confignode)) cnfxml = Config.read(configsetname, confignode) if not cnfxml: return self.wbConfigError( "Cannot read configuration file for node (%s, %s)" % (configsetname, confignode)) wbcnf = Wb6Config(cnfxml=cnfxml) return { "WbCnf": wbcnf }
def CopyConfigSet(self, frset, toset): """ Copy configuration set on gateway server """ if frset == toset: return self.wbConfigError("Cannot copy configuration set to itself") if not ConfigSet.exists(toset): return self.wbConfigError("Target configuration set does not exist") # ConfigSet.create(toset) if Config.listNodes(toset): return self.wbConfigError( "Copy: target configuration set already contains node configuration data"+ " - select a new or empty configuration set") nodes = Config.listNodes(frset) for n in nodes: err = Config.copy(frset,n,toset,n) if err: return self.wbConfigError(err) return self.wbConfigMessage( "Copied WebBrick configuration set %s to %s" % (frset, toset))
def WebBrickLoad(self, nodenum, nodeip, nodemac, password, configset, confignum): """ Load configuration to a specified WebBrick from the given configuration file. Returns None if the operation is completed successfully, otherwise returns a page to be displayed describing the reason for non-completion. """ if not ConfigSet.exists(configset): return self.wbConfigError("Configuration set does not exist: "+configset) if not Config.exists(configset, confignum): return self.wbConfigError( "No configuration file for node (%s, %s)" % (configset, str(confignum))) cnfxml = Config.read(configset, confignum) if not cnfxml: return self.wbConfigError( "Cannot read configuration file for node (%s, %s)" % (configset, str(confignum))) return self.UpdateConfig(nodeip, cnfxml, {'password': password})
def WebBrickSave(self, nodenum, nodeip, configset, confirmed): """ Save configuration for the specified WebBrick into the given configuration set directory. Returns None if the operation is completed successfully, otherwise returns a page to be displayed describing the reason for non-completion. """ if not ConfigSet.exists(configset): return self.wbConfigError("Configuration set does not exist: "+configset) if Config.exists(configset, nodenum): if not bool(confirmed): return self.wbConfirmQuery( "Overwrite existing configuration for node "+str(nodenum)+"?", "WebBrickSaveAndContinue", nodenum, nodeip, configset, "True" ) Config.backup(configset, nodenum) wb = Wb6Config(nodeip) cnfxml = wb.getConfigXml() if not cnfxml: return self.wbConfigError( "Cannot get configuration from WebBrick (%s, %s)") return Config.create(configset, nodenum, cnfxml)
def wbConfigAction(self): """ Process return from main configuration form """ # Process submission req = cherrypy.request action = req.paramMap["action"] if isinstance( action, list ): # Internet explorer action = req.paramMap["buttonAction"] #action = self.getAction( req.paramMap ) Trace("%s"%(req.paramMap), "wbConfigAction") # Save selections for session consistency cherrypy.session.acquire_lock() cherrypy.session["Network"] = req.paramMap["WbIpNetworks"] cherrypy.session["ConfigSet"] = req.paramMap["WbConfigSets"] cherrypy.session["Password"] = req.paramMap["WbPassword"] cherrypy.session.release_lock() # Force discovery of WebBricks on selected network if action == "WbDiscover": net = req.paramMap["WbIpNetworks"] self.WebBrickDiscover(net) return self.ConfigFrontPage() # Update IP address of WebBrick if action == "WbIpUpdate": Password = req.paramMap["WbPassword"] or "password" NewIpAdrs = req.paramMap["WbNewIpAdrs"] IpAddress = req.paramMap["WbIpAddress"] MacAddress = req.paramMap["WbMacAddress"] NetAddress = req.paramMap["WbIpNetworks"] if NewIpAdrs == IpAddress: return self.wbConfigMessage( "WebBrick IP address not changed (%s)"%(IpAddress)) err = self.WebBrickUpdateIp(IpAddress, MacAddress, NetAddress, Password, NewIpAdrs) self.WebBrickFlushDiscovered() return err or self.wbConfigMessage( "Sent new IP address "+NewIpAdrs+ " to WebBrick "+MacAddress+" at "+IpAddress, "(If the WebBrick IP address does not appear to be updated, "+ "check that the correct WebBrick password is being used)") # Remove WebBrick from list of WebBricks if action == "WbRemoveWebBrick": wbn = req.paramMap.get("WbSelector","") err = self.WebBrickRemove(wbn) if err: return self.wbConfigError(err) return self.ConfigFrontPage() # Add WebBrick IP address to the list of WebBricks if action == "WbAddIpAddress": wbip = req.paramMap.get("WbNewIpAdrs","") err = self.WebBrickAdd(wbip) return err or self.ConfigFrontPage() # Load/Save WebBrick configurations if action == "WbLoadConfig": if not req.paramMap.has_key("WbSelector"): return self.wbConfigError("No WebBrick selected for load") nodenum = req.paramMap["WbSelector"] nodemac = req.paramMap["WbMacAddress"] nodeip = req.paramMap["WbIpAddress"] password = req.paramMap["WbPassword"] configset = req.paramMap["WbConfigSets"] confignum = req.paramMap["WbConfigNode"] err = self.WebBrickLoad( nodenum, nodeip, nodemac, password, configset, confignum ) return err or self.wbConfigMessage( "Loaded WebBrick configuration for node "+str(confignum), "If the WebBrick configuration does not appear to be updated, "+ "check that the correct WebBrick password is being used") if action == "WbSaveConfig": if not req.paramMap.has_key("WbSelector"): return self.wbConfigError("No WebBrick selected for save") nodenum = req.paramMap["WbSelector"] nodeip = req.paramMap["WbIpAddress"] configset = req.paramMap["WbConfigSets"] err = self.WebBrickSave( nodenum, nodeip, configset, False ) return err or self.wbConfigMessage( "Saved WebBrick configuration for node "+str(nodenum)) if action == "WbSaveAllConfigs": def mkpair(s): return s.split(',',2) def ispair(p): return len(p) == 2 nodeliststr = req.paramMap["WbNodeList"] nodelist = filter(ispair, map(mkpair, nodeliststr.split(';'))) configset = req.paramMap["WbConfigSets"] numnodes = 0 for (nodenum,nodeip) in nodelist: err = self.WebBrickSave( nodenum, nodeip, configset, False ) if err: return err numnodes += 1 if numnodes == 0: msg = "No WebBrick configurations saved" else: msg = "Saved configuration for "+str(numnodes)+" WebBrick" if numnodes > 1: msg += "s" return self.wbConfigMessage(msg) # Create/delete configuration set if action == "WbNewCs": return self.NewConfigSetForm("") if action == "WbDeleteCs": configset = req.paramMap["WbConfigSets"] if not ConfigSet.exists(configset): return self.wbConfigError( "Configuration set does not exist: "+configset) return self.DeleteConfigSetForm(configset) if action == "WbDeleteConfig": configset = req.paramMap["WbConfigSets"] confignode = req.paramMap["WbConfigNode"] configname = req.paramMap["WbConfigName"] if not Config.exists(configset, confignode): return self.wbConfigError( "Configuration set %s/%s does not exist"%(configset,confignode)) return self.DeleteConfigForm(configset, confignode, configname) # Configuration manipulation (New, Show, Edit, Delete) if action == "WbShowConfig": configset = req.paramMap["WbConfigSets"] confignode = req.paramMap["WbConfigNode"] configname = req.paramMap["WbConfigName"] return self.ShowConfigForm(configset, confignode, configname) #################### more ############################ # Configuration transfer options (Copy, Move, Upload, Download) if action == "WbCopyConfig": configsets = ConfigSet.listNames() configset = req.paramMap["WbConfigSets"] confignode = req.paramMap["WbConfigNode"] configname = req.paramMap["WbConfigName"] return self.CopyConfigForm(configset, confignode, configname, configsets) if action == "WbMoveConfig": configsets = ConfigSet.listNames() if req.paramMap["WbConfigNode"] == "(None)": return self.wbConfigError("Move: a source node must be selected") configset = req.paramMap["WbConfigSets"] confignode = req.paramMap["WbConfigNode"] configname = req.paramMap["WbConfigName"] return self.MoveConfigForm(configset, confignode, configname, configsets) if action == "WbUploadConfig": configset = req.paramMap["WbConfigSets"] return self.UploadConfigForm(configset) if action == "WbDownloadConfig": configset = req.paramMap["WbConfigSets"] confignode = req.paramMap["WbConfigNode"] return self.DownloadConfig(configset, confignode) # Default for now: dump form parameters paramlist = "" for k in req.paramMap.keys(): paramlist += str(k)+": "+str(req.paramMap[k])+"\n" return ("<h1>Unrecognized option</h1>\n"+ "<pre>"+paramlist+"</pre>"+ """ <p> <a href='"""+self.FrontPage+"""'>Return to main configuration manager page</a> </p> """)
def configPath(configsetname, node): """ Returns the path name corresponding to a specified configuration. """ if not ConfigSet.exists(configsetname): return None return os.path.join(ConfigSet.configsetPath(configsetname), node+".xml")