Ejemplo n.º 1
0
    def _vnc_delete_listeners(self, lb):
        listeners = lb.loadbalancer_listeners.copy()
        for ll_id in listeners or []:
            ll = LoadbalancerListenerKM.get(ll_id)
            if not ll:
                continue
            pool_id = ll.loadbalancer_pool
            if pool_id:
                pool = LoadbalancerPoolKM.get(pool_id)
                if pool:
                    members = pool.members.copy()
                    for member_id in members or []:
                        member = LoadbalancerMemberKM.get(member_id)
                        if member:
                            self.service_lb_member_mgr.delete(member_id)
                            self.logger.debug("Deleting LB member %s" %
                                              member.name)
                            LoadbalancerMemberKM.delete(member_id)

                self._vnc_delete_pool(pool_id)
                self.logger.debug("Deleting LB pool %s" % pool.name)
                LoadbalancerPoolKM.delete(pool_id)

            self.logger.debug("Deleting LB listener %s" % ll.name)
            self._vnc_delete_listener(ll_id)
            LoadbalancerListenerKM.delete(ll_id)
Ejemplo n.º 2
0
    def _remove_pod_from_service(self, service_id, pod_id, port=None):
        lb = LoadbalancerKM.get(service_id)
        if not lb:
            return

        for lb_listener_id in lb.loadbalancer_listeners:
            pool = self._get_loadbalancer_pool(lb_listener_id, port)
            if not pool:
                continue

            for member_id in pool.members:
                member = LoadbalancerMemberKM.get(member_id)
                if member and member.vm == pod_id:
                    self.logger.debug(
                        "Delete LB member for Pod/VM: %s from LB: %s" %
                        (pod_id, lb.name))

                    try:
                        vmi_obj = self._vnc_lib.virtual_machine_interface_read(
                            id=member.vmi)

                        # Remove service member label from vmi.
                        svc_member_label = self._labels.get_service_label(
                            lb.service_name)
                        for k, v in svc_member_label.items():
                            self._vnc_lib.unset_tag(vmi_obj, k)
                    except NoIdError:
                        # VMI has already been deleted. Nothing to unset/remove.
                        pass

                    self.service_lb_member_mgr.delete(member_id)
                    LoadbalancerMemberKM.delete(member.uuid)
                    break
Ejemplo n.º 3
0
 def _delete_listener(self, ll_id):
     ll = LoadbalancerListenerKM.get(ll_id)
     pool_id = ll.loadbalancer_pool
     if pool_id:
         pool = LoadbalancerPoolKM.get(pool_id)
         member_list = pool.members.copy()
         for member_id in member_list:
             self._vnc_delete_member(member_id)
             LoadbalancerMemberKM.delete(member_id)
         self._vnc_delete_pool(pool_id)
         LoadbalancerPoolKM.delete(pool_id)
     self._vnc_delete_listener(ll_id)
     LoadbalancerListenerKM.delete(ll_id)
    def _remove_pod_from_service(self, service_id, pod_id, port=None):
        lb = LoadbalancerKM.get(service_id)
        if not lb:
            return

        for lb_listener_id in lb.loadbalancer_listeners:
            pool = self._get_loadbalancer_pool(lb_listener_id, port)
            if not pool:
                continue

            for member_id in pool.members:
                member = LoadbalancerMemberKM.get(member_id)
                if member and member.vm == pod_id:
                    self.logger.debug(
                        "Delete LB member for Pod/VM: %s from LB: %s"
                        % (pod_id, lb.name))
                    self.service_lb_member_mgr.delete(member_id)
                    LoadbalancerMemberKM.delete(member.uuid)
                    break
    def _remove_pod_from_service(self, service_id, pod_id, port=None):
        lb = LoadbalancerKM.get(service_id)
        if not lb:
            return

        for lb_listener_id in lb.loadbalancer_listeners:
            pool = self._get_loadbalancer_pool(lb_listener_id, port)
            if not pool:
                continue

            for member_id in pool.members:
                member = LoadbalancerMemberKM.get(member_id)
                if member and member.vm == pod_id:
                    self.logger.debug(
                        "Delete LB member for Pod/VM: %s from LB: %s" %
                        (pod_id, lb.name))
                    self.service_lb_member_mgr.delete(member_id)
                    LoadbalancerMemberKM.delete(member.uuid)
                    break
Ejemplo n.º 6
0
 def _update_member(self, ns_name, backend_member, pool):
     resource_type = "service"
     member_id = backend_member['member_id']
     new_service_name = backend_member['serviceName']
     new_service_port = backend_member['servicePort']
     member = LoadbalancerMemberKM.get(member_id)
     annotations = member.annotations
     for kvp in annotations['key_value_pair'] or []:
         if kvp['key'] == 'serviceName':
             old_service_name = kvp['value']
             break
     old_service_port = member.params['protocol_port']
     service_ip = None
     if new_service_name != old_service_name:
         service_info = self._kube.get_resource(resource_type,
                                                new_service_name, ns_name)
         if service_info and 'clusterIP' in service_info['spec']:
             service_ip = service_info['spec']['clusterIP']
         else:
             self._logger.error("%s - clusterIP for Service %s Not Found" %
                                (self._name, new_service_name))
             self._logger.error(
                 "%s - (%s %s) Member Not Updated for Pool %s" %
                 (self._name, new_service_name, str(new_service_port),
                  pool.name))
             self._vnc_delete_member(member_id)
             LoadbalancerMemberKM.delete(member_id)
             self._logger.error("%s - (%s %s) Member Deleted for Pool %s" %
                                (self._name, old_service_name,
                                 str(old_service_port), pool.name))
             return None
     else:
         service_ip = member.params['address']
     annotations = {}
     annotations['serviceName'] = new_service_name
     self._vnc_update_member(member_id, service_ip, new_service_port,
                             annotations)
     member = LoadbalancerMemberKM.update(member)
     return member
Ejemplo n.º 7
0
    def _remove_pod_from_service(self, service_id, pod_id, port=None):
        lb = LoadbalancerKM.get(service_id)
        if not lb:
            return

        for lb_listener_id in lb.loadbalancer_listeners:
            pool = self._get_loadbalancer_pool(lb_listener_id, port)
            if not pool:
                continue

            for member_id in pool.members:
                member = LoadbalancerMemberKM.get(member_id)
                if member and member.vm == pod_id:
                    self.logger.debug(
                        "Delete LB member for Pod/VM: %s from LB: %s"
                        % (pod_id, lb.name))

                    try:
                        vmi_obj = self._vnc_lib.virtual_machine_interface_read(
                                      id = member.vmi)

                        # Remove service member label from vmi.
                        svc_member_label = self._labels.get_service_label(
                            lb.service_name)
                        for k,v in svc_member_label.iteritems():
                            self._vnc_lib.unset_tag(vmi_obj, k)

                    except NoIdError:
                        # VMI has already been deleted. Nothing to unset/remove.
                        pass
                    except:
                        raise

                    self.service_lb_member_mgr.delete(member_id)
                    LoadbalancerMemberKM.delete(member.uuid)
                    break