コード例 #1
0
 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()
コード例 #2
0
 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()
コード例 #3
0
ファイル: Config.py プロジェクト: AndyThirtover/wb_gateway
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))
コード例 #4
0
 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>
         """ )
コード例 #5
0
 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 }
コード例 #6
0
 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))
コード例 #7
0
    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})
コード例 #8
0
 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)
コード例 #9
0
    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>
            """)
コード例 #10
0
ファイル: Config.py プロジェクト: AndyThirtover/wb_gateway
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")