예제 #1
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>
         """ )
예제 #2
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>
            """)