func Add(mgr manager.Manager, ns string) error {
	return mgr.Add(&ReconcileNodes{
		podName:      os.Getenv("POD_NAME"),
		namespace:    ns,
		client:       mgr.GetClient(),
		cache:        mgr.GetCache(),
		scheme:       mgr.GetScheme(),
		logger:       log.Log.WithName("nodes.controller"),
		dtClientFunc: dynakube.BuildDynatraceClient,
		local:        os.Getenv("RUN_LOCAL") == "true",
	})
}
Add creates a new Nodes Controller and adds it to the Manager. The Manager will set fields on the Controller
and Start it when the Manager is Started.
package nodes
import (
	"context"
	"os"
	"time"
	dynatracev1beta1 "github.com/Dynatrace/dynatrace-operator/api/v1beta1"
	"github.com/Dynatrace/dynatrace-operator/controllers/dynakube"
	"github.com/Dynatrace/dynatrace-operator/controllers/kubeobjects"
	"github.com/Dynatrace/dynatrace-operator/dtclient"
	"github.com/go-logr/logr"
	corev1 "k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/api/errors"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/runtime"
	"k8s.io/apimachinery/pkg/runtime/schema"
	"sigs.k8s.io/controller-runtime/pkg/cache"
	"sigs.k8s.io/controller-runtime/pkg/client"
	"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
	"sigs.k8s.io/controller-runtime/pkg/log"
	"sigs.k8s.io/controller-runtime/pkg/manager"
)
const (
	cacheName = "dynatrace-node-cache"
)
var unschedulableTaints = []string{"ToBeDeletedByClusterAutoscaler"}
type ReconcileNodes struct {
	podName      string
	namespace    string
	client       client.Client
	cache        cache.Cache
	scheme       *runtime.Scheme
	logger       logr.Logger
	dtClientFunc dynakube.DynatraceClientFunc
	local        bool
}