in pkg/controller/dns/external_dns_crd.go [42:101]
func (e *ExternalDNSCRDController) Reconcile(ctx context.Context, req ctrl.Request) (res ctrl.Result, err error) {
defer func() {
metrics.HandleControllerReconcileMetrics(ExternalDNSCRDControllerName, res, err)
}()
// set up logger
logger, err := logr.FromContext(ctx)
if err != nil {
return ctrl.Result{}, fmt.Errorf("creating logger: %w", err)
}
logger = ExternalDNSCRDControllerName.AddToLogger(logger).WithValues("namespace", req.Namespace, "name", req.Name)
obj := &v1alpha1.ExternalDNS{}
if err = e.client.Get(ctx, req.NamespacedName, obj); err != nil {
if k8serrors.IsNotFound(err) {
logger.Info("externaldns crd object not found, will ignore not found error")
return ctrl.Result{}, nil
}
logger.Error(err, "failed to get externaldns object")
return ctrl.Result{}, err
}
// verify serviceaccount
if _, err = util.GetServiceAccountAndVerifyWorkloadIdentity(ctx, e.client, obj.GetInputServiceAccount(), obj.GetNamespace()); err != nil {
var userErr util.UserError
if errors.As(err, &userErr) {
logger.Info("failed to verify service account due to user error, sending warning event: " + userErr.UserError())
e.events.Eventf(obj, corev1.EventTypeWarning, "FailedUpdateOrCreateExternalDNSResources", "failed serviceaccount verification: %s", userErr.UserError())
return ctrl.Result{}, nil
}
logger.Error(err, "failed to verify service account")
return ctrl.Result{}, err
}
manifestsConf, err := generateManifestsConf(e.config, obj)
if err != nil {
var userErr util.UserError
if errors.As(err, &userErr) {
logger.Info("failed to generate manifests config due to user error, sending warning event: " + userErr.UserError())
e.events.Eventf(obj, corev1.EventTypeWarning, "FailedUpdateOrCreateExternalDNSResources", userErr.UserError())
return ctrl.Result{}, nil
}
}
err = deployExternalDNSResources(ctx, e.client, manifestsConf, []metav1.OwnerReference{{
APIVersion: obj.APIVersion,
Controller: util.ToPtr(true),
Kind: obj.Kind,
Name: obj.Name,
UID: obj.UID,
}})
if err != nil {
logger.Error(err, "failed to upsert externaldns resources")
e.events.Eventf(obj, corev1.EventTypeWarning, "FailedUpdateOrCreateExternalDNSResources", "failed to deploy external DNS resources: %s", err.Error())
return ctrl.Result{}, err
}
return ctrl.Result{}, nil
}