def _get_netscaler_renameloadbalancer_task(self, loadBalancerId,
                                               newLoadBalancerId,
                                               loadBalancer):

        if not all([loadBalancerId, newLoadBalancerId, loadBalancer
                    ]) or not "name" in loadBalancer:
            raise ImplementationError("programming error")

        existing_name = NitroUtils.get_lbvservername_from_loadbalancerid(
            loadBalancerId)
        new_name = NitroUtils.get_lbvservername_from_loadbalancerid(
            newLoadBalancerId)

        task = {}
        task["name"] = existing_name
        task["type"] = "lbvserver"
        task["operation"] = "RENAME"

        obj = {}
        obj["name"] = existing_name
        obj["newname"] = new_name

        task["state"] = obj

        return task
    def _get_netscaler_updateloadbalancer_task(self,
                                               loadBalancerId,
                                               loadBalancer,
                                               newLoadBalancerId=None):

        task_list = []

        self.logger.debug("About to get lbvserver state")

        if newLoadBalancerId:
            lbvserver_name = NitroUtils.get_lbvservername_from_loadbalancerid(
                newLoadBalancerId)
        else:
            lbvserver_name = NitroUtils.get_lbvservername_from_loadbalancerid(
                loadBalancerId)

        lbvserver = self._get_lbvserver_state(lbvserver_name, loadBalancer)

        lbvserver = self._adjust_lbvserver_state_for_update(
            loadBalancerId, lbvserver)

        if not lbvserver:
            return None

        if len(lbvserver.keys()) <= 1:
            """ There is no field to update on the lbvserver, so no need for an update task """
            return None

        task = {}
        task["type"] = "lbvserver"
        task["name"] = lbvserver_name
        task["operation"] = "UPDATE"
        task["state"] = lbvserver

        return task
Exemplo n.º 3
0
    def get_netscaler_getservicebindings_task(self, loadBalancerId, loadBalancer):
                 
        lbvserver_name = NitroUtils.get_lbvservername_from_loadbalancerid(loadBalancerId)
                                                                                          
        task = {}
        task["type"] = "lbvserver_service_binding"
        task["name"] = lbvserver_name
        task["operation"] = "GET"
        task["state"] = None

        return task
    def _get_netscaler_removeloadbalancer_task(self, loadBalancerId):

        lbvserver_name = NitroUtils.get_lbvservername_from_loadbalancerid(
            loadBalancerId)

        task = {}
        task["type"] = "lbvserver"
        task["name"] = lbvserver_name
        task["operation"] = "REMOVE"
        task["state"] = None

        return task
Exemplo n.º 5
0
    def get_netscaler_getlbvserver_task(loadBalancerId):

        lbvserver_name = NitroUtils.get_lbvservername_from_loadbalancerid(
            loadBalancerId)

        task = {}
        task["type"] = "lbvserver"
        task["name"] = lbvserver_name
        task["operation"] = "GET"
        task["state"] = None

        return task
    def _adjust_lbvserver_state_for_update(self, loadBalancerId, new_state):
        """ First, we'll get from Netscaler the current lbvserver state """
        """ XXX - In Netscaler, we haven't got IDs for resources so our assumption: loadBalancerId == loadBalancer.name """

        resource_type = "lbvserver"
        resource_name = NitroUtils.get_lbvservername_from_loadbalancerid(
            loadBalancerId)

        self.logger.debug(
            "adjusting the lbvserver state to submit for an update operation. For this we need to get the existing lbvserver"
        )
        current_state = self.nitrowrapper.get_netscaler_entity(
            resource_type, resource_name)

        if "servicetype" in new_state.keys():
            if new_state["servicetype"] != current_state["servicetype"]:
                """ XXX - Netscaler doesn't support changing the servicetype of an lbvserver. """
                raise NotImplementedException(
                    "Sorry, changing the protocol of the loadBalancer in the current implementation is not supported."
                )

            else:
                """ Just remove it since it is the same """
                del new_state["servicetype"]

        if "port" in new_state.keys():
            if type(current_state["port"]) is int:
                new_state["port"] = int(new_state["port"])

            if new_state["port"] != current_state["port"]:
                """ XXX - Netscaler doesn't support changing the port of an lbvserver. """
                raise NotImplementedException(
                    "Sorry, changing the port of the loadBalancer in the current implementation is not supported."
                )

            else:
                del new_state["port"]

        if "lbmethod" in new_state.keys():
            if new_state["lbmethod"] == current_state["lbmethod"]:
                del new_state["lbmethod"]

        if self.extensions_enabled:
            """ XXX - Also check for extended properties in the new_state dictionary """


        self.logger.debug("Adjusted state for Updating lbvserver %s is: %s" %
                          (resource_name, str(new_state)))

        return new_state
Exemplo n.º 7
0
    def get_netscaler_removeservicebinding_task(self, loadBalancerId, loadBalancer, nodeId):

        lbvserver_name = NitroUtils.get_lbvservername_from_loadbalancerid(loadBalancerId)
        servicename = NitroUtils.get_servicename_from_nodeid(loadBalancerId, nodeId)

        args = "servicename:" +  servicename
        args += ","
        args += "name:" + lbvserver_name

        task = {}
        task["type"] = "lbvserver_service_binding"
        task["name"] = lbvserver_name + "?args=" + args
        task["operation"] = "REMOVE"
        task["state"] = None

        return task
Exemplo n.º 8
0
    def extract_lbvserver_object_from_task_list(results, loadBalancerId):

        lbvserver_name = NitroUtils.get_lbvservername_from_loadbalancerid(
            loadBalancerId)

        for task in results:

            if task["type"] == "lbvserver" and task["operation"] == "GET":
                if task["name"] == lbvserver_name:
                    state = task["result"]
                    """ XXX Nitro bug returns a list of one lbvserver, so workaround here """
                    if isinstance(state, list):
                        return state[0]
                    else:
                        return state

        return None
Exemplo n.º 9
0
    def _get_netscaler_getservicebinding_task(self, loadBalancerId, loadBalancer, nodeId):

        self.logger.debug("loadBalancer Id is: %s" % loadBalancerId)
        self.logger.debug("node Id is: %s" % nodeId)

        lbvserver_name = NitroUtils.get_lbvservername_from_loadbalancerid(loadBalancerId) 
        service_name = NitroUtils.get_servicename_from_nodeid(loadBalancerId, nodeId)

        args = "servicename:" + service_name
                                                                                                        
        task = {}

        task["type"] = "lbvserver_service_binding"
        task["name"] = lbvserver_name + "?filter=" + args
        task["operation"] = "GET"
        task["state"] = None

        return task
Exemplo n.º 10
0
    def _get_netscaler_servicebinding_from_node(self, loadBalancerId, loadBalancer, nodeId, node):

        service_binding_obj = {}

        lbvserver_name = NitroUtils.get_lbvservername_from_loadbalancerid(loadBalancerId)
        service_name =  NitroUtils.get_servicename_from_nodeid(loadBalancerId, nodeId)

        service_binding_obj["name"] = lbvserver_name
        service_binding_obj["servicename"] = service_name


        if "weight" in node and node.weight != 1 :
            if not loadBalancer.algorithm.startswith("WEIGHTED_"):
                raise BadRequestException("validation fault", "invalid object", 
                                          "LB algorithm in use doesn't allow for weighted nodes")

            service_binding_obj["weight"] = node["weight"]

        return service_binding_obj
    def _get_netscaler_addloadbalancer_task(self, loadBalancerId,
                                            loadBalancer):

        task_list = []

        if not "name" in loadBalancer:
            raise ImplementationError(
                "We should have caught this during validation phase.")

        lbvserver_name = NitroUtils.get_lbvservername_from_loadbalancerid(
            loadBalancerId)

        task = {}
        task["type"] = "lbvserver"
        task["name"] = lbvserver_name
        task["operation"] = "ADD"

        lbvserver = self._get_lbvserver_state(lbvserver_name, loadBalancer)
        task["state"] = lbvserver
        task_list.append(task)

        return task
    def _get_loadbalancer_object_from_lbvserver_entity(self, loadBalancerId,
                                                       dict_obj):

        lbvserver_name = str(dict_obj["name"])

        expected_name = NitroUtils.get_lbvservername_from_loadbalancerid(
            loadBalancerId)

        if lbvserver_name != expected_name:
            raise ImplementationError("resource returned not expected...")

        loadBalancer = self._get_new_loadBalancer_object()

        loadBalancer.name = NitroUtils.get_loadBalancer_name(loadBalancerId)

        servicetype = str(dict_obj["servicetype"])

        loadBalancer.protocol = NitroUtils.get_protocol_from_servicetype(
            servicetype)

        port = str(dict_obj["port"])
        loadBalancer.port = port

        lbmethod = str(dict_obj["lbmethod"])
        loadBalancer.algorithm = NitroUtils.get_algorithm_from_lbmethod(
            lbmethod)

        effectivestate = str(dict_obj["effectivestate"])
        loadBalancer.status = NitroUtils.get_loadbalancerstatus_from_state(
            effectivestate)

        i = 1

        loadBalancer.virtualIps = []

        virtualIP = LBVirtualIPState(self.lbresource)

        ipaddress = str(dict_obj["ipv46"])

        virtualIP.address = ipaddress

        self.logger.debug("VIP for loadbalancer %s is %s" %
                          (loadBalancer.name, ipaddress))

        loadBalancer.virtualIps.append(virtualIP)
        """ Get Session Persistence data """
        persistencetype = str(dict_obj["persistencetype"])

        self.logger.debug("persistencetype of lbvserver is %s" %
                          persistencetype)

        if persistencetype != 'NONE':
            if self.extensions_enabled:
                sessionPersistence = NetScalerLBSessionPersistenceState(
                    self.lbresource)
            else:
                sessionPersistence = LBSessionPersistenceState(self.lbresource)

            persistencevalue = NitroUtils.get_persistencetype_from_nspersistencetype(
                persistencetype)

            if persistencevalue:
                sessionPersistence.persistenceType = persistencevalue

            if self.extensions_enabled:
                timeout = str(dict_obj["timeout"])
                if timeout != None:
                    sessionPersistence.timeout = timeout

            loadBalancer.sessionPersistence = sessionPersistence
        """ Get Connection Logging data """
        """
        if self.extensions_enabled:
    	    loadBalancer.connectionLogging = NetScalerLBConnectionLoggingState(self.lbresource)
        else:
    	    loadBalancer.connectionLogging = LBConnectionLoggingState(self.lbresource)


        appflow = str(dict_obj["appflowlog"])

        if appflow == "ENABLED":
            loadBalancer.connectionLogging.enabled="true"
        else:
            loadBalancer.connectionLogging.enabled="false"

        loadBalancer.connectionThrottle = LBConnectionThrottleState(self.lbresource)

        loadBalancer.connectionThrottle.minConnections = "10"
        loadBalancer.connectionThrottle.maxConnections = "100"
        loadBalancer.connectionThrottle.maxConnectionRate = "50"
        loadBalancer.connectionThrottle.rateInterval = "60"
        """

        if self.lbservice.cluster:
            loadBalancer.cluster = {}
            loadBalancer.cluster["name"] = self.lbservice.cluster
        else:
            loadBalancer.cluster = {}
            loadBalancer.cluster["name"] = "none"

        if self.extensions_enabled:

            sc = str(dict_obj["sc"])

            if sc == "ON":
                loadBalancer.sureConnect = "true"
            else:
                loadBalancer.sureConnect = "false"
            """
            if appflow == "ENABLED":
                loadBalancer.connectionLogging.type="appflow"
            """

        return loadBalancer