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