Exemplo n.º 1
0
    def execute(self, action, actionargs=None, vs=None, rs=None):
        """
        Execute an action.
        """
        if action not in [
                "enable", "disable", "operenable", "operdisable", "enableall",
                "disableall"
        ]:
            yield None
            return
        v, httpclass, rip, port = self.parse(vs, rs)
        if rip is None:
            yield {}
            return
        orip = ip2oid(rip)

        if action == "enableall" or action == "disableall":
            d = defer.waitForDeferred(
                self.proxy.set(
                    (self.oids['ltmNodeAddrNewSessionEnable'], orip),
                    (action == "enableall") and 2 or 1))
            yield d
            d.getResult()
            yield True
            return

        # Get pool
        ov = str2oid(v)
        if httpclass is None:
            p = defer.waitForDeferred(
                self.cache_or_get(('ltmVirtualServDefaultPool', ov)))
        else:
            oc = str2oid(httpclass)
            p = defer.waitForDeferred(
                self.cache_or_get(('ltmHttpClassPoolName', oc)))
        yield p
        p = p.getResult()
        op = str2oid(p)

        d = defer.waitForDeferred(
            self.proxy.set(
                (self.oids['ltmPoolMemberNewSessionEnable'], op, orip, port),
                action.endswith("enable") and 2 or 1))
        yield d
        d.getResult()
        yield True
        return
Exemplo n.º 2
0
    def execute(self, action, actionargs=None, vs=None, rs=None):
        """
        Execute an action.
        """
        if action not in ["enable", "disable", "operenable", "operdisable",
                          "enableall", "disableall"]:
            yield None
            return
        v, httpclass, rip, port = self.parse(vs, rs)
        if rip is None:
            yield {}
            return
        orip = ip2oid(rip)

        if action == "enableall" or action == "disableall":
            d = defer.waitForDeferred(
                self.proxy.set((self.oids['ltmNodeAddrNewSessionEnable'], orip),
                               (action == "enableall") and 2 or 1))
            yield d
            d.getResult()
            yield True
            return

        # Get pool
        ov = str2oid(v)
        if httpclass is None:
            p = defer.waitForDeferred(self.cache_or_get(('ltmVirtualServDefaultPool', ov)))
        else:
            oc = str2oid(httpclass)
            p = defer.waitForDeferred(self.cache_or_get(('ltmHttpClassPoolName', oc)))
        yield p
        p = p.getResult()
        op = str2oid(p)

        d = defer.waitForDeferred(
            self.proxy.set((self.oids['ltmPoolMemberNewSessionEnable'],
                            op, orip, port),
                           action.endswith("enable") and 2 or 1))
        yield d
        d.getResult()
        yield True
        return
Exemplo n.º 3
0
    def process_rs(self, v, httpclass, rip, port):
        """
        Process data for a given virtual server and real server.

        @param v: virtual server
        @param httpclass: HTTP class (or C{None} for default pool)
        @param rip: real IP
        @param port: port
        """
        # Retrieve some data if needed:
        ov = str2oid(v)
        orip = ip2oid(rip)
        if httpclass is None:
            p = defer.waitForDeferred(self.cache_or_get(('ltmVirtualServDefaultPool', ov)))
        else:
            oc = str2oid(httpclass)
            p = defer.waitForDeferred(self.cache_or_get(('ltmHttpClassPoolName', oc)))
        yield p
        p = p.getResult()
        op = str2oid(p)
        oids = []
        for o in self.oids:
            if o.startswith("ltmPoolMbr") or o.startswith("ltmPoolMember"):
                oids.append((o, op, orip, port))
        oids = tuple(oids)
        c = defer.waitForDeferred(self.cache_or_get(*oids))
        yield c
        c.getResult()

        oids = []
        for o in self.oids:
            if o.startswith("ltmNodeAddr"):
                oids.append((o, orip))
        oids = tuple(oids)
        c = defer.waitForDeferred(self.cache_or_get(*oids))
        yield c
        c.getResult()

        name = self.cache(('ltmNodeAddrScreenName', orip))
        protocol = defer.waitForDeferred(self.get_protocol(ov))
        yield protocol
        protocol = protocol.getResult()
        weight = self.cache(('ltmPoolMemberWeight', op, orip, port))
        avail, enabled, session = self.cache(
            ('ltmPoolMbrStatusAvailState', op, orip, port),
            ('ltmPoolMbrStatusEnabledState', op, orip, port),
            ('ltmPoolMemberSessionStatus', op, orip, port))
        if session != 1 or self.enabledstates[enabled] != "enabled":
            state = "disabled"
        else:
            state = self.availstates[avail]
        rs = RealServer(name, rip, port, protocol, weight, state)
        rs.extra["detailed reason"] = self.cache(('ltmPoolMbrStatusDetailReason',
                                                  op, orip, port))
        rs.extra["monitor rule"] = self.cache(('ltmPoolMemberMonitorRule',
                                               op, orip, port))
        # Actions
        if self.proxy.writable:
            # ltmPoolMemberNewSessionEnable == 1 means user disabled
            if self.cache(('ltmPoolMemberNewSessionEnable', op, orip, port)) != 1:
                rs.actions['disable'] = 'Disable (permanent)'
            else:
                rs.actions['enable'] = 'Enable (permanent)'
            if self.cache(('ltmNodeAddrNewSessionEnable', orip)) != 1:
                rs.actions['disableall'] = 'Disable globally (permanent)'
            else:
                rs.actions['enableall'] = 'Enable globally (permanent)'
        yield rs
        return
Exemplo n.º 4
0
    def process_rs(self, v, httpclass, rip, port):
        """
        Process data for a given virtual server and real server.

        @param v: virtual server
        @param httpclass: HTTP class (or C{None} for default pool)
        @param rip: real IP
        @param port: port
        """
        # Retrieve some data if needed:
        ov = str2oid(v)
        orip = ip2oid(rip)
        if httpclass is None:
            p = defer.waitForDeferred(
                self.cache_or_get(('ltmVirtualServDefaultPool', ov)))
        else:
            oc = str2oid(httpclass)
            p = defer.waitForDeferred(
                self.cache_or_get(('ltmHttpClassPoolName', oc)))
        yield p
        p = p.getResult()
        op = str2oid(p)
        oids = []
        for o in self.oids:
            if o.startswith("ltmPoolMbr") or o.startswith("ltmPoolMember"):
                oids.append((o, op, orip, port))
        oids = tuple(oids)
        c = defer.waitForDeferred(self.cache_or_get(*oids))
        yield c
        c.getResult()

        oids = []
        for o in self.oids:
            if o.startswith("ltmNodeAddr"):
                oids.append((o, orip))
        oids = tuple(oids)
        c = defer.waitForDeferred(self.cache_or_get(*oids))
        yield c
        c.getResult()

        name = self.cache(('ltmNodeAddrScreenName', orip))
        protocol = defer.waitForDeferred(self.get_protocol(ov))
        yield protocol
        protocol = protocol.getResult()
        weight = self.cache(('ltmPoolMemberWeight', op, orip, port))
        avail, enabled, session = self.cache(
            ('ltmPoolMbrStatusAvailState', op, orip, port),
            ('ltmPoolMbrStatusEnabledState', op, orip, port),
            ('ltmPoolMemberSessionStatus', op, orip, port))
        if session != 1 or self.enabledstates[enabled] != "enabled":
            state = "disabled"
        else:
            state = self.availstates[avail]
        rs = RealServer(name, rip, port, protocol, weight, state)
        rs.extra["detailed reason"] = self.cache(
            ('ltmPoolMbrStatusDetailReason', op, orip, port))
        rs.extra["monitor rule"] = self.cache(
            ('ltmPoolMemberMonitorRule', op, orip, port))
        # Actions
        if self.proxy.writable:
            # ltmPoolMemberNewSessionEnable == 1 means user disabled
            if self.cache(
                ('ltmPoolMemberNewSessionEnable', op, orip, port)) != 1:
                rs.actions['disable'] = 'Disable (permanent)'
            else:
                rs.actions['enable'] = 'Enable (permanent)'
            if self.cache(('ltmNodeAddrNewSessionEnable', orip)) != 1:
                rs.actions['disableall'] = 'Disable globally (permanent)'
            else:
                rs.actions['enableall'] = 'Enable globally (permanent)'
        yield rs
        return