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 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 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 sync_service_members(client, module): log('sync_service_members') configured_service_members = get_configured_service_members(client, module) actual_service_members = get_actual_service_members(client, module) skip_add = [] skip_delete = [] # Find positions of identical service members for (configured_index, configured_service) in enumerate(configured_service_members): for (actual_index, actual_service) in enumerate(actual_service_members): if configured_service.has_equal_attributes(actual_service): skip_add.append(configured_index) skip_delete.append(actual_index) # Delete actual that are not identical to any configured for (actual_index, actual_service) in enumerate(actual_service_members): # Skip identical if actual_index in skip_delete: log('Skipping actual delete at index %s' % actual_index) continue # Fallthrouth to deletion if all([ hasattr(actual_service, 'ip'), actual_service.ip is not None, hasattr(actual_service, 'servername'), actual_service.servername is not None, ]): actual_service.ip = None actual_service.servicegroupname = module.params['servicegroupname'] servicegroup_servicegroupmember_binding.delete(client, actual_service) # Add configured that are not already present in actual for (configured_index, configured_service) in enumerate(configured_service_members): # Skip identical if configured_index in skip_add: log('Skipping configured add at index %s' % configured_index) continue # Fallthrough to addition configured_service.add()
def delete_all_servicegroup_members(): log('delete_all_servicegroup_members') if servicegroup_servicegroupmember_binding.count( client, module.params['servicegroupname']) == 0: return service_group_members = servicegroup_servicegroupmember_binding.get( client, module.params['servicegroupname']) log('len %s' % len(service_group_members)) log('count %s' % servicegroup_servicegroupmember_binding.count( client, module.params['servicegroupname'])) for member in service_group_members: log('%s' % dir(member)) log('ip %s' % member.ip) log('servername %s' % member.servername) if all([ hasattr(member, 'ip'), member.ip is not None, hasattr(member, 'servername'), member.servername is not None, ]): member.ip = None member.servicegroupname = module.params['servicegroupname'] servicegroup_servicegroupmember_binding.delete(client, member)