in pkg/controller/ingress/reconcile/builder/albconfig_manager/model_builder.go [159:250]
func (t *defaultModelBuildTask) run(ctx context.Context) error {
if !t.albconfig.DeletionTimestamp.IsZero() {
return nil
}
lb, err := t.buildAlbLoadBalancer(ctx, t.albconfig)
if err != nil {
return err
}
var lss = make(map[int32]*alb.Listener, 0)
for _, ls := range t.albconfig.Spec.Listeners {
modelLs, err := t.buildListener(ctx, lb.LoadBalancerID(), ls)
if err != nil {
return err
}
lss[int32(ls.Port.IntValue())] = modelLs
}
ingListByPort := make(map[portProtocol][]networking.Ingress)
for _, member := range t.ingGroup.Members {
listenPorts, err := ComputeIngressListenPorts(member)
if err != nil {
return err
}
for k, v := range listenPorts {
pp := portProtocol{
port: k,
protocol: v,
}
ingListByPort[pp] = append(ingListByPort[pp], *member)
}
}
for pp, ingList := range ingListByPort {
ls, ok := lss[pp.port]
if !ok {
continue
}
if pp.protocol == ProtocolHTTPS {
if len(ls.Spec.Certificates) == 0 {
var certIDs []string
for _, ing := range ingList {
cert, err := t.computeIngressInferredTLSCertIDs(ctx, &ing)
if err != nil {
klog.Errorf("computeIngressInferredTLSCertARNs error: %s", err.Error())
return err
}
certIDs = append(certIDs, cert...)
}
if len(certIDs) == 0 {
return fmt.Errorf("no cert was discovered: %v", certIDs)
}
certIDs = removeDuplicateElement(certIDs)
sort.Strings(certIDs)
cs := make([]alb.Certificate, 0)
for index, cid := range certIDs {
cert := alb.Certificate{
IsDefault: false,
CertificateId: cid,
}
if index == 0 {
cert.IsDefault = true
}
cs = append(cs, cert)
}
lss[pp.port].Spec.ListenerProtocol = string(ProtocolHTTPS)
lss[pp.port].Spec.Certificates = cs
}
}
if err := t.buildListenerRules(ctx, ls.ListenerID(), pp.port, ingList); err != nil {
return err
}
}
for _, ls := range lss {
if ls.Spec.ListenerProtocol == string(ProtocolHTTPS) {
var isDefaultCertExist bool
for _, c := range ls.Spec.Certificates {
if c.IsDefault {
isDefaultCertExist = true
break
}
}
if !isDefaultCertExist {
return fmt.Errorf("https listener: %d must provider one default cert", ls.Spec.ListenerPort)
}
}
}
return nil
}