func()

in pkg/webhook/cert.go [73:126]


func (s *CertService) createCertsSecret(
	ctx context.Context,
	namespace,
	serviceName string,
) (*CertData, error) {
	serKey, serCert, caCert, err := certresources.CreateCerts(
		ctx,
		serviceName,
		namespace,
		time.Now().Add(century),
	)
	if err != nil {
		return nil, fmt.Errorf("failed to create certs: %w", err)
	}

	certData := NewCertData(serKey, serCert, caCert)

	secret := &corev1.Secret{}

	err = s.clientReader.Get(ctx, ctrlClient.ObjectKey{Namespace: namespace, Name: secretCertsName}, secret)
	if err != nil {
		if k8serrors.IsNotFound(err) {
			secret.ObjectMeta = metav1.ObjectMeta{
				Namespace: namespace,
				Name:      secretCertsName,
			}
			secret.Data = map[string][]byte{
				secretTLSKey:  serKey,
				secretTLSCert: serCert,
				secretCACert:  caCert,
			}
			secret.Type = corev1.SecretTypeOpaque

			if err = s.clientWriter.Create(ctx, secret); err != nil {
				return nil, fmt.Errorf("failed to create secret: %w", err)
			}

			return certData, nil
		}

		return nil, fmt.Errorf("failed to get secret: %w", err)
	}

	secret.Data = map[string][]byte{
		secretTLSKey:  serKey,
		secretTLSCert: serCert,
		secretCACert:  caCert,
	}
	if err = s.clientWriter.Update(ctx, secret); err != nil {
		return nil, fmt.Errorf("failed to update secret: %w", err)
	}

	return certData, nil
}