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))
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 _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
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
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))
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))
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))
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)
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)
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))
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)
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