in pkg/gateway/model_build_targetgroup.go [132:188]
func (t *svcExportTargetGroupModelBuildTask) buildTargetGroup(ctx context.Context) (*model.TargetGroup, error) {
svc := &corev1.Service{}
noSvcFoundAndDeleting := false
if err := t.client.Get(ctx, k8s.NamespacedName(t.serviceExport), svc); err != nil {
if apierrors.IsNotFound(err) && !t.serviceExport.DeletionTimestamp.IsZero() {
// if we're deleting, it's OK if the service isn't there
noSvcFoundAndDeleting = true
} else { // either it's some other error or we aren't deleting
return nil, fmt.Errorf("failed to find corresponding k8sService %s, error :%w ",
k8s.NamespacedName(t.serviceExport), err)
}
}
var ipAddressType string
var err error
if noSvcFoundAndDeleting {
ipAddressType = "IPV4" // just pick a default
} else {
ipAddressType, err = buildTargetGroupIpAddressType(svc)
if err != nil {
return nil, err
}
}
tgp, err := t.tgp.ObjResolvedPolicy(ctx, t.serviceExport)
if err != nil {
return nil, err
}
protocol, protocolVersion, healthCheckConfig, err := parseTargetGroupConfig(tgp)
if err != nil {
return nil, err
}
spec := model.TargetGroupSpec{
Type: model.TargetGroupTypeIP,
Port: 80,
Protocol: protocol,
ProtocolVersion: protocolVersion,
IpAddressType: ipAddressType,
HealthCheckConfig: healthCheckConfig,
}
spec.VpcId = config.VpcID
spec.K8SSourceType = model.SourceTypeSvcExport
spec.K8SClusterName = config.ClusterName
spec.K8SServiceName = t.serviceExport.Name
spec.K8SServiceNamespace = t.serviceExport.Namespace
spec.K8SProtocolVersion = protocolVersion
stackTG, err := model.NewTargetGroup(t.stack, spec)
if err != nil {
return nil, err
}
stackTG.IsDeleted = !t.serviceExport.DeletionTimestamp.IsZero()
return stackTG, nil
}