예제 #1
0
 def add_remove_services(self, grpname, ip_ports):
     """ Reconfigures service group membership to be the
     same as supplied list of ip and port
     """
     to_add = ip_ports
     to_remove = []
     try:
         bindings = servicegroup_servicegroupmember_binding.get(
             self.ns_session, grpname)
         existing = [(b.ip, b.port) for b in bindings if b.port != 0]
         to_remove = list(set(existing) - set(ip_ports))
         to_add = list(set(ip_ports) - set(existing))
         to_leave = list(set(ip_ports) & set(existing))
     except nitro_exception:
         pass  # no bindings
     for s in to_remove:
         binding = servicegroup_servicegroupmember_binding()
         binding.servicegroupname = grpname
         binding.ip = s[0]
         binding.port = s[1]
         logger.info("Unbinding %s:%s from service group %s " % (s[0], s[1], grpname))
         servicegroup_servicegroupmember_binding.delete(self.ns_session,
                                                        binding)
     for s in to_add:
         binding = servicegroup_servicegroupmember_binding()
         binding.servicegroupname = grpname
         binding.ip = s[0]
         binding.port = s[1]
         logger.info("Binding %s:%s from service group %s " % (s[0], s[1], grpname))
         servicegroup_servicegroupmember_binding.add(self.ns_session,
                                                     binding)
     for s in to_leave:
         logger.info("Service %s:%s is already bound to  service group %s" % (s[0], s[1], grpname))
예제 #2
0
 def _configure_services(self, grpname, srvrs):
     to_add = srvrs
     to_remove = []
     try:
         bindings = servicegroup_servicegroupmember_binding.get(
             self.ns_session, grpname)
         existing = [(b.ip, b.port) for b in bindings if b.port != 0]
         to_remove = list(set(existing) - set(srvrs))
         to_add = list(set(srvrs) - set(existing))
         to_leave = list(set(srvrs) & set(existing))
     except nitro_exception as e:
         pass  # no bindings
     for s in to_remove:
         binding = servicegroup_servicegroupmember_binding()
         binding.servicegroupname = grpname
         binding.ip = s[0]
         binding.port = s[1]
         logger.info("Unbinding %s:%s from service group %s " %
                     (s[0], s[1], grpname))
         servicegroup_servicegroupmember_binding.delete(
             self.ns_session, binding)
     for s in to_add:
         binding = servicegroup_servicegroupmember_binding()
         binding.servicegroupname = grpname
         binding.ip = s[0]
         binding.port = s[1]
         logger.info("Binding %s:%s from service group %s " %
                     (s[0], s[1], grpname))
         servicegroup_servicegroupmember_binding.add(
             self.ns_session, binding)
     for s in to_leave:
         logger.info("%s:%s is already bound to  service group %s" %
                     (s[0], s[1], grpname))
예제 #3
0
 def _configure_services(self, grpname, srvrs):
     to_add = srvrs
     to_remove = []
     try:
         bindings = servicegroup_servicegroupmember_binding.get(
             self.ns_session, grpname)
         existing = [(b.ip, b.port) for b in bindings if b.port != 0]
         to_remove = list(set(existing) - set(srvrs))
         to_add = list(set(srvrs) - set(existing))
         to_leave = list(set(srvrs) & set(existing))
     except nitro_exception as e:
         pass  # no bindings
     for s in to_remove:
         binding = servicegroup_servicegroupmember_binding()
         binding.servicegroupname = grpname
         binding.ip = s[0]
         binding.port = s[1]
         logger.info("Unbinding %s:%s from service group %s " % (s[0], s[1],
                     grpname))
         servicegroup_servicegroupmember_binding.delete(self.ns_session,
                                                        binding)
     for s in to_add:
         binding = servicegroup_servicegroupmember_binding()
         binding.servicegroupname = grpname
         binding.ip = s[0]
         binding.port = s[1]
         logger.info("Binding %s:%s from service group %s " %
                     (s[0], s[1], grpname))
         servicegroup_servicegroupmember_binding.add(self.ns_session,
                                                     binding)
     for s in to_leave:
         logger.info("%s:%s is already bound to  service group %s"
                     % (s[0], s[1], grpname))
def get_configured_service_members(client, module):
    log('get_configured_service_members')
    readwrite_attrs = [
        'servicegroupname', 'ip', 'port', 'state', 'hashid', 'serverid',
        'servername', 'customserverid', 'weight'
    ]
    readonly_attrs = [
        'delay',
        'statechangetimesec',
        'svrstate',
        'tickssincelaststatechange',
        'graceful',
    ]

    members = []
    if module.params['servicemembers'] is None:
        return members

    for config in module.params['servicemembers']:
        # Make a copy to update
        config = copy.deepcopy(config)
        config['servicegroupname'] = module.params['servicegroupname']
        member_proxy = ConfigProxy(
            actual=servicegroup_servicegroupmember_binding(),
            client=client,
            attribute_values_dict=config,
            readwrite_attrs=readwrite_attrs,
            readonly_attrs=readonly_attrs)
        members.append(member_proxy)
    return members
예제 #5
0
파일: nitro.py 프로젝트: zbukhari/netscaler
    def servicegroup_servicegroupmember_binding(self, action, fqdns, port,
                                                svcGrp):
        '''Function to bind (add) or unbind (delete) server(s) to a servicegroup.

	@param action string: add or delete
	@param fqdns list: list of FQDNs
	@param port int: Destination port for server
	@param svcGrp string: name of service group to bind servers with services to.
'''

        listOfObjs = []

        try:
            for i in range(len(fqdns)):
                listOfObjs.append(servicegroup_servicegroupmember_binding())
                listOfObjs[i].servicegroupname = svcGrp
                listOfObjs[i].servername = fqdns[i]
                listOfObjs[i].port = port

            if action == 'add':
                servicegroup_servicegroupmember_binding.add(
                    self._sess, listOfObjs)
            elif action == 'delete':
                servicegroup_servicegroupmember_binding.delete(
                    self._sess, listOfObjs)
        except nitro_exception as e:
            print('Exception::errorcode=' + str(e.errorcode) + ',message=' +
                  e.message)
        except Exception as e:
            print('Exception::message=' + str(e.args))
        else:
            return True

        return False
예제 #6
0
def call_nitro_commands(ns_session):
    try:
        ns_session.clear_config(force=True, level='full')
        logging.debug('Clear config executed')
        needed_features = [
            nsfeature.Feature.CS, nsfeature.Feature.LB, nsfeature.Feature.SSL,
            nsfeature.Feature.RESPONDER, nsfeature.Feature.REWRITE
        ]
        ns_session.enable_features(needed_features)

        logging.debug('Adding CS vserver')
        csvserver_instance = csvserver()
        csvserver_instance.name = 'drinks_sample'
        csvserver_instance.ipv46 = '127.0.0.1'
        csvserver_instance.servicetype = 'http'
        csvserver_instance.port = '443'
        csvserver_instance.add(ns_session, csvserver_instance)

        logging.debug('Adding LB vserver')
        lbvserver_instance = lbvserver()
        lbvserver_instance.name = 'lbvs_hotdrink_http_example'
        lbvserver_instance.ipv46 = '0.0.0.0'
        lbvserver_instance.port = 0
        lbvserver_instance.servicetype = 'http'
        lbvserver_instance.add(ns_session, lbvserver_instance)

        logging.debug('Adding servicegroup')
        servicegroup_instance = servicegroup()
        servicegroup_instance.servicegroupname = 'sg_hotdrink_http_example'
        servicegroup_instance.servicetype = 'http'
        servicegroup_instance.add(ns_session, servicegroup_instance)

        logging.debug('Adding servieegroup binding')
        servicegroup_servicegroupmember_binding_instance = servicegroup_servicegroupmember_binding(
        )
        servicegroup_servicegroupmember_binding_instance.servicegroupname = 'sg_hotdrink_http_example'
        servicegroup_servicegroupmember_binding_instance.ip = '172.100.100.3'
        servicegroup_servicegroupmember_binding_instance.port = 80
        servicegroup_servicegroupmember_binding_instance.add(
            ns_session, servicegroup_servicegroupmember_binding_instance)

        logging.debug('Adding servicegroup lb vserver binding')
        lbvserver_servicegroup_binding_instance = lbvserver_servicegroup_binding(
        )
        lbvserver_servicegroup_binding_instance.name = 'lbvs_hotdrink_http_example'
        lbvserver_servicegroup_binding_instance.servicegroupname = 'sg_hotdrink_http_example'
        lbvserver_servicegroup_binding_instance.add(
            ns_session, lbvserver_servicegroup_binding_instance)

        logging.debug('SUCCESS: Configuration completed')
    except Exception as e:
        logging.error('FAILURE: Error during configuration: {}'.format(
            e.message))
예제 #7
0
    def unbind_svcgrp_svgrpmem(self, client):
        try:
            obj = [servicegroup_servicegroupmember_binding() for _ in range(2)]
            obj[0].servicegroupname = "sg1"
            obj[0].ip = "1.1.1.7"
            obj[0].port = 77

            obj[1].servicegroupname = "sg2"
            obj[1].ip = "1.1.1.8"
            obj[1].port = 78
            servicegroup_servicegroupmember_binding.delete(client, obj)
            print("unbind_svcgrp_svgrpmem - Done")
        except nitro_exception as e:
            print("Exception:: unbind_svcgrp_svgrpmem::rc=" + str(e.errorcode) + " , Message =" + e.message)
        except Exception as e:
            print("Exception:: unbind_svcgrp_svgrpmem::message=" + str(e.args))
예제 #8
0
 def bind_servicegroup_server (self, client) : 
     try :
         grp = servicegroup()
         grp.servicegroupname = "svcgrp1"
         grp.servicetype = servicegroup.Servicetype.HTTP
         servicegroup.add(client, grp)
         obj = servicegroup_servicegroupmember_binding()
         obj.servicegroupname = "svcgrp1"
         obj.ip = "1.1.2.79"
         obj.port = 77
         servicegroup_servicegroupmember_binding.add(client, obj)
         print("bind_servicegroup_server - Done")
     except nitro_exception as e :
         print("Exception::bind_servicegroup_server::errorcode="+str(e.errorcode)+",message="+ e.message)
     except Exception as e:
         print("Exception::bind_servicegroup_server::message="+str(e.args))
예제 #9
0
    def _add_service(self, grpname, srvr_ip, srvr_port):
        try:
            bindings = servicegroup_servicegroupmember_binding.get(
                self.ns_session, grpname)
            for binding in bindings:
                if binding.ip == srvr_ip and str(binding.port) == srvr_port:
                    logger.info("Service %s:%s is already bound to service \
                                group %s " % (srvr_ip, srvr_port, grpname))
                    return

        except nitro_exception as e:
            pass
        binding = servicegroup_servicegroupmember_binding()
        binding.servicegroupname = grpname
        binding.ip = srvr_ip
        binding.port = srvr_port
        servicegroup_servicegroupmember_binding.add(self.ns_session, binding)
예제 #10
0
    def _add_service(self, grpname, srvr_ip, srvr_port):
        try:
            bindings = servicegroup_servicegroupmember_binding.get(
                self.ns_session, grpname)
            for binding in bindings:
                if binding.ip == srvr_ip and str(binding.port) == srvr_port:
                    logger.info("Service %s:%s is already bound to service \
                                group %s " % (srvr_ip, srvr_port, grpname))
                    return

        except nitro_exception as e:
            pass
        binding = servicegroup_servicegroupmember_binding()
        binding.servicegroupname = grpname
        binding.ip = srvr_ip
        binding.port = srvr_port
        servicegroup_servicegroupmember_binding.add(self.ns_session, binding)
예제 #11
0
    def unbind_svcgrp_svgrpmem(self, client):
        try:
            obj = [servicegroup_servicegroupmember_binding() for _ in range(2)]
            obj[0].servicegroupname = "sg1"
            obj[0].ip = "1.1.1.7"
            obj[0].port = 77

            obj[1].servicegroupname = "sg2"
            obj[1].ip = "1.1.1.8"
            obj[1].port = 78
            servicegroup_servicegroupmember_binding.delete(client, obj)
            print("unbind_svcgrp_svgrpmem - Done")
        except nitro_exception as e:
            print("Exception:: unbind_svcgrp_svgrpmem::rc=" +
                  str(e.errorcode) + " , Message =" + e.message)
        except Exception as e:
            print("Exception:: unbind_svcgrp_svgrpmem::message=" + str(e.args))
예제 #12
0
    def add_service(self, grpname, srvr_ip, srvr_port):
        """Add a service(ip, port) to an existing service group."""
        try:
            bindings = servicegroup_servicegroupmember_binding.get(
                self.ns_session, grpname)
            for binding in bindings:
                if binding.ip == srvr_ip and binding.port == srvr_port:
                    logger.info('Service %s:%s is already bound to service \
                                group %s ' % (srvr_ip, srvr_port, grpname))
                    return

        except nitro_exception:
            pass
        binding = servicegroup_servicegroupmember_binding()
        binding.servicegroupname = grpname
        binding.ip = srvr_ip
        binding.port = srvr_port
        servicegroup_servicegroupmember_binding.add(self.ns_session, binding)
예제 #13
0
    def get_servicegroups_from_module_params():
        log('get_servicegroups_from_module_params')
        readwrite_attrs = [
            u'servicegroupname', u'ip', u'port', u'state', u'hashid',
            u'serverid', u'servername', u'customserverid', u'weight'
        ]
        readonly_attrs = [
            u'delay', u'statechangetimesec', u'svrstate',
            u'tickssincelaststatechange', u'graceful', u'__count'
        ]

        members = []
        for config in module.params['servicemembers']:
            # Make a copy to update
            config = copy.deepcopy(config)
            config['servicegroupname'] = module.params['servicegroupname']
            member_proxy = ConfigProxy(
                actual=servicegroup_servicegroupmember_binding(),
                client=client,
                attribute_values_dict=config,
                readwrite_attrs=readwrite_attrs,
                readonly_attrs=readonly_attrs)
            members.append(member_proxy)
        return members