func()

in pkg/controller/keyvault/placeholder_pod.go [340:369]


func (p *PlaceholderPodController) verifyServiceAccount(ctx context.Context, spc *secv1.SecretProviderClass, obj client.Object, logger logr.Logger) (string, error) {
	var serviceAccount string

	switch t := obj.(type) {
	case *gatewayv1.Gateway:
		logger.Info("verifying service account referenced by listener exists")
		for _, listener := range t.Spec.Listeners {
			if spc.Name != generateGwListenerCertName(t.Name, listener.Name) {
				continue
			}
			if listener.TLS != nil && listener.TLS.Options != nil {
				serviceAccount = string(listener.TLS.Options[serviceAccountTLSOption])
				break
			}
		}

		if serviceAccount == "" {
			err := fmt.Errorf("failed to locate listener for SPC %s on user's gateway resource", spc.Name)
			return "", util.NewUserError(err, fmt.Sprintf("gateway listener for spc %s doesn't exist or doesn't contain required TLS options", spc.Name))
		}

		_, err := util.GetServiceAccountAndVerifyWorkloadIdentity(ctx, p.client, serviceAccount, spc.Namespace)
		if err != nil {
			return "", err
		}
		return serviceAccount, nil
	}

	return "", nil
}