func()

in pkg/skoop/network/aliyun/assertion.go [548:628]


func (a *slbAssertion) assertListenerAndServerGroup(lbID string, port int32, protocol string, packet *model.Packet, backends []network.LoadBalancerBackend) ([]model.Suspicion, error) {
	var sus []model.Suspicion
	lis, err := a.cloudManager.GetSLBListener(lbID, port, protocol)
	if err != nil {
		return nil, err
	}

	if lis == nil {
		sus = append(sus, model.Suspicion{
			Level:   model.SuspicionLevelFatal,
			Message: fmt.Sprintf("cannot find listener port %d protocol %q for slb %q", port, protocol, lbID),
		})
		return sus, nil
	}

	if lis.TCP != nil {
		if lis.TCP.Status != nil && *lis.TCP.Status != "running" {
			sus = append(sus, model.Suspicion{
				Level: model.SuspicionLevelFatal,
				Message: fmt.Sprintf("status of loadbalancer %q for tcp port %d is %q, not \"running\"",
					lbID, port, *lis.TCP.Status),
			})
		}

		if lis.TCP.AclStatus != nil && *lis.TCP.AclStatus == "on" && lis.TCP.AclId != nil {
			s, err := a.assertACL(*lis.TCP.AclId, *lis.TCP.AclType, packet)
			if err != nil {
				return nil, err
			}
			sus = append(sus, s...)
		}

		if lis.TCP.VServerGroupId != nil && *lis.TCP.VServerGroupId != "" {
			s, err := a.assertServerGroup(*lis.TCP.VServerGroupId, backends)
			if err != nil {
				return nil, err
			}
			sus = append(sus, s...)
		} else {
			sus = append(sus, model.Suspicion{
				Level:   model.SuspicionLevelFatal,
				Message: fmt.Sprintf("cannot find vserver group of loadbalancer %q port %d", lbID, port),
			})
		}
		return sus, nil
	}

	if lis.UDP != nil {
		if lis.UDP.Status != nil && *lis.UDP.Status != "running" {
			sus = append(sus, model.Suspicion{
				Level: model.SuspicionLevelFatal,
				Message: fmt.Sprintf("status of loadbalancer %q for udp port %d is %q, not \"running\"",
					lbID, port, *lis.TCP.Status),
			})
		}

		if lis.UDP.AclStatus != nil && *lis.UDP.AclStatus == "on" && lis.TCP.AclId != nil {
			s, err := a.assertACL(*lis.UDP.AclId, *lis.UDP.AclType, packet)
			if err != nil {
				return nil, err
			}
			sus = append(sus, s...)
		}

		if lis.UDP.VServerGroupId != nil && *lis.UDP.VServerGroupId != "" {
			s, err := a.assertServerGroup(*lis.UDP.VServerGroupId, backends)
			if err != nil {
				return nil, err
			}
			sus = append(sus, s...)
		} else {
			sus = append(sus, model.Suspicion{
				Level:   model.SuspicionLevelFatal,
				Message: fmt.Sprintf("cannot find vserver group of loadbalancer %q port %d", lbID, port),
			})
		}
		return sus, nil
	}

	return nil, fmt.Errorf("not supported protocol %s", protocol)
}