Newer
Older
AnthosCertManager / pkg / controller / issuers / sync.go
@Yangyang Xie Yangyang Xie on 22 Nov 2022 1 KB fix issues
package issuers

import (
	"context"
	"fmt"

	corev1 "k8s.io/api/core/v1"

	acmapi "gitbucket.jerxie.com/yangyangxie/AnthosCertManager/pkg/apis/anthoscertmanager/v1"
	"gitbucket.jerxie.com/yangyangxie/AnthosCertManager/pkg/controller/globals"
	logf "gitbucket.jerxie.com/yangyangxie/AnthosCertManager/pkg/logs"
	apiequality "k8s.io/apimachinery/pkg/api/equality"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/util/errors"
)

const (
	errorInitIssuer        = "ErrInitIssuer"
	messageErrorInitIssuer = "Error initializing issuer: "
)

func (c *controller) Sync(ctx context.Context, iss *acmapi.Issuer) (err error) {
	log := logf.FromContext(ctx)

	ctx, cancel := context.WithTimeout(ctx, globals.DefaultControllerContextTimeout)
	defer cancel()

	issuerCopy := iss.DeepCopy()

	// Sync the status at the end.
	defer func() {
		if saveErr := c.updateIssuerStatus(ctx, iss, issuerCopy); saveErr != nil {
			err = errors.NewAggregate([]error{saveErr, err})
			log.Error(err, "error update the issuer status")
		}
	}()

	i, err := c.issuerFactory.IssuerFor(issuerCopy)
	if err != nil {
		return err
	}

	// Initialize the issuer
	err = i.Setup(ctx)
	if err != nil {
		s := messageErrorInitIssuer + err.Error()
		log.Error(err, "error setting up issuer")
		c.recorder.Event(issuerCopy, corev1.EventTypeWarning, errorInitIssuer, s)
		return err
	}

	return nil
}

func (c *controller) updateIssuerStatus(ctx context.Context, old, new *acmapi.Issuer) error {
	if apiequality.Semantic.DeepEqual(old.Status, new.Status) {
		return nil
	}
	log := logf.FromContext(ctx)
	log.Info(fmt.Sprintf("new issuer structure: %+v", new))
	_, err := c.acmClient.AnthosCertmanagerV1().Issuers(new.Namespace).UpdateStatus(ctx, new, metav1.UpdateOptions{})
	return err
}