diff --git a/apis/datadoghq/v2alpha1/datadogagent_default.go b/apis/datadoghq/v2alpha1/datadogagent_default.go index e3f94a5b6..8c76763a3 100644 --- a/apis/datadoghq/v2alpha1/datadogagent_default.go +++ b/apis/datadoghq/v2alpha1/datadogagent_default.go @@ -72,8 +72,6 @@ const ( // defaultPrometheusScrapeEnabled bool = false defaultPrometheusScrapeEnableServiceEndpoints bool = false - - // defaultDatadogMonitorEnabled bool = false ) // DefaultDatadogAgent defaults the DatadogAgentSpec GlobalConfig and Features. diff --git a/controllers/datadogagent/controller_reconcile_v2.go b/controllers/datadogagent/controller_reconcile_v2.go index 5572395bc..493a54394 100644 --- a/controllers/datadogagent/controller_reconcile_v2.go +++ b/controllers/datadogagent/controller_reconcile_v2.go @@ -77,7 +77,11 @@ func (r *Reconciler) internalReconcileV2(ctx context.Context, request reconcile. } */ - return r.reconcileInstanceV2(ctx, reqLogger, instance) + // Set default values for GlobalConfig and Features + instanceCopy := instance.DeepCopy() + datadoghqv2alpha1.DefaultDatadogAgent(instanceCopy) + + return r.reconcileInstanceV2(ctx, reqLogger, instanceCopy) } func (r *Reconciler) reconcileInstanceV2(ctx context.Context, logger logr.Logger, instance *datadoghqv2alpha1.DatadogAgent) (reconcile.Result, error) { diff --git a/controllers/datadogagent/dependencies/store.go b/controllers/datadogagent/dependencies/store.go index 4b59411c7..3368e7f9b 100644 --- a/controllers/datadogagent/dependencies/store.go +++ b/controllers/datadogagent/dependencies/store.go @@ -17,6 +17,7 @@ import ( "github.com/DataDog/datadog-operator/pkg/kubernetes" "github.com/go-logr/logr" + v1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" apimeta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -198,16 +199,23 @@ func (ds *Store) Apply(ctx context.Context, k8sClient client.Client) []error { err := k8sClient.Get(ctx, objNSName, objAPIServer) if err != nil && apierrors.IsNotFound(err) { ds.logger.V(2).Info("dependencies.store Add object to create", "obj.namespace", objStore.GetNamespace(), "obj.name", objStore.GetName(), "obj.kind", kind) - objsToCreate = append(objsToCreate, ds.deps[kind][objID]) + objsToCreate = append(objsToCreate, objStore) continue } else if err != nil { errs = append(errs, err) continue } + // ServicesKind is a special case; the cluster IPs are immutable and resource version must be set. + if kind == kubernetes.ServicesKind { + objStore.(*v1.Service).Spec.ClusterIP = objAPIServer.(*v1.Service).Spec.ClusterIP + objStore.(*v1.Service).Spec.ClusterIPs = objAPIServer.(*v1.Service).Spec.ClusterIPs + objStore.SetResourceVersion(objAPIServer.GetResourceVersion()) + } + if !equality.IsEqualObject(kind, objStore, objAPIServer) { ds.logger.V(2).Info("dependencies.store Add object to update", "obj.namespace", objStore.GetNamespace(), "obj.name", objStore.GetName(), "obj.kind", kind) - objsToUpdate = append(objsToUpdate, ds.deps[kind][objID]) + objsToUpdate = append(objsToUpdate, objStore) continue } } diff --git a/docs/how-to-contribute.md b/docs/how-to-contribute.md index d5a34e0e6..f628b05e6 100644 --- a/docs/how-to-contribute.md +++ b/docs/how-to-contribute.md @@ -80,7 +80,11 @@ export DD_API_KEY= export DD_APP_KEY= export DD_TOKEN=<32-chars-token> -kubectl -n $KUBE_NAMESPACE create secret generic datadog-secret --from-literal api-key=$DD_API_KEY --from-literal app-key=$DD_APP_KEY --from-literal token=$DD_TOKEN +kubectl -n $KUBE_NAMESPACE create secret generic datadog-secret --from-literal api-key=$DD_API_KEY --from-literal app-key=$DD_APP_KEY + + +kubectl -n $KUBE_NAMESPACE create secret generic datadog-token --from-literal token=$DD_TOKEN + kubectl -n $KUBE_NAMESPACE apply -f `examples/v2alpha1/min.yaml` ```