Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion LICENSE-3rdparty.csv
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ core,github.com/DataDog/datadog-operator/api/datadoghq/common,Unknown
core,github.com/DataDog/datadog-operator/api/datadoghq/v1alpha1,Unknown
core,github.com/DataDog/datadog-operator/api/datadoghq/v2alpha1,Unknown
core,github.com/DataDog/datadog-operator/api/utils,Unknown
core,github.com/DataDog/extendeddaemonset/api/v1alpha1,Apache-2.0
core,github.com/DataDog/go-libddwaf/v3,Apache-2.0
core,github.com/DataDog/go-sqllexer,MIT
core,github.com/DataDog/go-tuf,BSD-3-Clause
Expand Down
94 changes: 22 additions & 72 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import (
"sync/atomic"
"time"

edsdatadoghqv1alpha1 "github.com/DataDog/extendeddaemonset/api/v1alpha1"
"github.com/go-logr/logr"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
Expand Down Expand Up @@ -85,7 +84,6 @@ func init() {
utilruntime.Must(apiregistrationv1.AddToScheme(scheme))

utilruntime.Must(datadoghqv1alpha1.AddToScheme(scheme))
utilruntime.Must(edsdatadoghqv1alpha1.AddToScheme(scheme))
utilruntime.Must(datadoghqv2alpha1.AddToScheme(scheme))
utilruntime.Must(apiextensionsv1.AddToScheme(scheme))
utilruntime.Must(storagev1.AddToScheme(scheme))
Expand All @@ -104,16 +102,6 @@ func (ss *stringSlice) Set(value string) error {
return nil
}

const (
// ExtendedDaemonset default configuration values from https://github.com/DataDog/extendeddaemonset/blob/main/api/v1alpha1/extendeddaemonset_default.go
defaultCanaryAutoPauseEnabled = true
defaultCanaryAutoFailEnabled = true
// default to 0, to use default value from EDS.
defaultCanaryAutoPauseMaxRestarts = 0
defaultCanaryAutoFailMaxRestarts = 0
defaultCanaryAutoPauseMaxSlowStartDuration = 0
)

type options struct {
// Observability options
metricsAddr string
Expand All @@ -129,39 +117,28 @@ type options struct {
leaderElectionLeaseDuration time.Duration

// Controllers options
supportExtendedDaemonset bool
edsMaxPodUnavailable string
edsMaxPodSchedulerFailure string
edsCanaryDuration time.Duration
edsCanaryReplicas string
edsCanaryAutoPauseEnabled bool
edsCanaryAutoPauseMaxRestarts int
edsCanaryAutoFailEnabled bool
edsCanaryAutoFailMaxRestarts int
edsCanaryAutoPauseMaxSlowStartDuration time.Duration
edsSlowStartAdditiveIncrease string
supportCilium bool
datadogAgentEnabled bool
createControllerRevisions bool
datadogMonitorEnabled bool
datadogMonitorMaxWorkers int
datadogMonitorRequeuePeriod time.Duration
datadogSLOEnabled bool
operatorMetricsEnabled bool
maximumGoroutines int
introspectionEnabled bool
datadogAgentProfileEnabled bool
remoteConfigEnabled bool
remoteUpdatesEnabled bool
managedAgentInstallationEnabled bool
datadogDashboardEnabled bool
datadogGenericResourceEnabled bool
datadogGenericResourceMaxWorkers int
datadogGenericResourceRequeuePeriod time.Duration
datadogCSIDriverEnabled bool
untaintControllerEnabled bool
untaintControllerWaitForCSIDriver bool
rolloutOnConfigMapChangeEnabled bool
supportCilium bool
Comment thread
tbavelier marked this conversation as resolved.
datadogAgentEnabled bool
createControllerRevisions bool
datadogMonitorEnabled bool
datadogMonitorMaxWorkers int
datadogMonitorRequeuePeriod time.Duration
datadogSLOEnabled bool
operatorMetricsEnabled bool
maximumGoroutines int
introspectionEnabled bool
datadogAgentProfileEnabled bool
remoteConfigEnabled bool
remoteUpdatesEnabled bool
managedAgentInstallationEnabled bool
datadogDashboardEnabled bool
datadogGenericResourceEnabled bool
datadogGenericResourceMaxWorkers int
datadogGenericResourceRequeuePeriod time.Duration
datadogCSIDriverEnabled bool
untaintControllerEnabled bool
untaintControllerWaitForCSIDriver bool
rolloutOnConfigMapChangeEnabled bool

// Secret Backend options
secretBackendCommand string
Expand Down Expand Up @@ -215,19 +192,6 @@ func (opts *options) Parse() {
// DatadogAgentInternal
flag.BoolVar(&opts.createControllerRevisions, "createControllerRevisions", false, "Enable creation of ControllerRevision snapshots on each DDA spec change")

// ExtendedDaemonset configuration
flag.BoolVar(&opts.supportExtendedDaemonset, "supportExtendedDaemonset", false, "Support usage of Datadog ExtendedDaemonset CRD.")
flag.StringVar(&opts.edsMaxPodUnavailable, "edsMaxPodUnavailable", "", "ExtendedDaemonset number of max unavailable pods during the rolling update")
flag.StringVar(&opts.edsSlowStartAdditiveIncrease, "edsSlowStartAdditiveIncrease", "", "ExtendedDaemonset slow start additive increase")
flag.StringVar(&opts.edsMaxPodSchedulerFailure, "edsMaxPodSchedulerFailure", "", "ExtendedDaemonset number of max pod scheduler failures")
flag.DurationVar(&opts.edsCanaryDuration, "edsCanaryDuration", 10*time.Minute, "ExtendedDaemonset canary duration")
flag.StringVar(&opts.edsCanaryReplicas, "edsCanaryReplicas", "", "ExtendedDaemonset number of canary pods")
flag.BoolVar(&opts.edsCanaryAutoPauseEnabled, "edsCanaryAutoPauseEnabled", defaultCanaryAutoPauseEnabled, "ExtendedDaemonset canary auto pause enabled")
flag.IntVar(&opts.edsCanaryAutoPauseMaxRestarts, "edsCanaryAutoPauseMaxRestarts", defaultCanaryAutoPauseMaxRestarts, "ExtendedDaemonset canary auto pause max restart count")
flag.BoolVar(&opts.edsCanaryAutoFailEnabled, "edsCanaryAutoFailEnabled", defaultCanaryAutoFailEnabled, "ExtendedDaemonset canary auto fail enabled")
flag.IntVar(&opts.edsCanaryAutoFailMaxRestarts, "edsCanaryAutoFailMaxRestarts", defaultCanaryAutoFailMaxRestarts, "ExtendedDaemonset canary auto fail max restart count")
flag.DurationVar(&opts.edsCanaryAutoPauseMaxSlowStartDuration, "edsCanaryAutoPauseMaxSlowStartDuration", defaultCanaryAutoPauseMaxSlowStartDuration*time.Minute, "ExtendedDaemonset canary max slow start duration")

// Environment variable overrides applied before flag.Parse() so that
// explicit CLI flags take precedence (default < env < CLI).
applyEnvOptions([]envOption{
Expand Down Expand Up @@ -517,19 +481,6 @@ func run(opts *options) error {
}

options := controller.SetupOptions{
SupportExtendedDaemonset: controller.ExtendedDaemonsetOptions{
Enabled: opts.supportExtendedDaemonset,
MaxPodUnavailable: opts.edsMaxPodUnavailable,
SlowStartAdditiveIncrease: opts.edsSlowStartAdditiveIncrease,
CanaryDuration: opts.edsCanaryDuration,
CanaryReplicas: opts.edsCanaryReplicas,
CanaryAutoPauseEnabled: opts.edsCanaryAutoPauseEnabled,
CanaryAutoPauseMaxRestarts: opts.edsCanaryAutoPauseMaxRestarts,
CanaryAutoFailEnabled: opts.edsCanaryAutoFailEnabled,
CanaryAutoFailMaxRestarts: opts.edsCanaryAutoFailMaxRestarts,
CanaryAutoPauseMaxSlowStartDuration: opts.edsCanaryAutoPauseMaxSlowStartDuration,
MaxPodSchedulerFailure: opts.edsMaxPodSchedulerFailure,
},
SupportCilium: opts.supportCilium,
CredsManager: credsManager,
DatadogAgentEnabled: opts.datadogAgentEnabled,
Expand Down Expand Up @@ -794,7 +745,6 @@ func setupAndStartOperatorMetadataForwarder(logger logr.Logger, client client.Re
// Since v1.27, DDAI is always tied to DDA — no separate flag. Kept in telemetry for metric continuity.
DatadogAgentInternalEnabled: options.datadogAgentEnabled,
LeaderElectionEnabled: options.enableLeaderElection,
ExtendedDaemonSetEnabled: options.supportExtendedDaemonset,
RemoteConfigEnabled: options.remoteConfigEnabled,
RemoteUpdatesEnabled: options.remoteUpdatesEnabled,
IntrospectionEnabled: options.introspectionEnabled,
Expand Down
10 changes: 0 additions & 10 deletions config/rbac/role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,6 @@ rules:
- datadogmonitors/finalizers
- datadogslos
- datadogslos/finalizers
- extendeddaemonsets
verbs:
- create
- delete
Expand Down Expand Up @@ -352,15 +351,6 @@ rules:
- datadogpodautoscalers/status
verbs:
- '*'
- apiGroups:
- datadoghq.com
resources:
- extendeddaemonsetreplicasets
verbs:
- delete
- get
- list
- watch
- apiGroups:
- discovery.k8s.io
resources:
Expand Down
2 changes: 0 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ go 1.26.7
require (
github.com/DataDog/datadog-agent/pkg/util/scrubber v0.63.0-rc.1 // indirect
github.com/DataDog/datadog-api-client-go/v2 v2.56.0
// TODO: pin to an EDS released version once there is a release that includes the api module
github.com/DataDog/extendeddaemonset/api v0.0.0-20250108205105-6c4d337b78a1
github.com/Masterminds/semver/v3 v3.4.0
github.com/go-logr/logr v1.4.3
github.com/gobwas/glob v0.2.3
Expand Down
2 changes: 0 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,6 @@ github.com/DataDog/datadog-go/v5 v5.6.0 h1:2oCLxjF/4htd55piM75baflj/KoE6VYS7alEU
github.com/DataDog/datadog-go/v5 v5.6.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw=
github.com/DataDog/datadog-operator/api v0.0.0-20250130131115-7f198adcc856 h1:zHq/clXi0DJQsZj2WD3WTqlg/WXGicNH3DjXa0ARpWk=
github.com/DataDog/datadog-operator/api v0.0.0-20250130131115-7f198adcc856/go.mod h1:Ef4llzn4c4p6FPZNjeYgIQFHa2va2JPC8Wf/kivrF2E=
github.com/DataDog/extendeddaemonset/api v0.0.0-20250108205105-6c4d337b78a1 h1:K9SD6kTk58j3vG99mExuVIFh994JSpPALQRr2MPszXQ=
github.com/DataDog/extendeddaemonset/api v0.0.0-20250108205105-6c4d337b78a1/go.mod h1:CLkfm3awFwTY5aBDm8esFwiocXIoNxY28eK6zZ5u9t0=
github.com/DataDog/go-libddwaf/v3 v3.3.0 h1:jS72fuQpFgJZEdEJDmHJCPAgNTEMZoz1EUvimPUOiJ4=
github.com/DataDog/go-libddwaf/v3 v3.3.0/go.mod h1:Bz/0JkpGf689mzbUjKJeheJINqsyyhM8p9PDuHdK2Ec=
github.com/DataDog/go-sqllexer v0.0.15 h1:rUUu52dP8EQhJLnUw0MIAxZp0BQx2fOTuMztr3vtHUU=
Expand Down
1 change: 0 additions & 1 deletion go.work.sum
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,6 @@ github.com/DataDog/datadog-agent/pkg/util/testutil v0.63.0-rc.1 h1:3Ct/38ONls2/g
github.com/DataDog/datadog-agent/pkg/util/testutil v0.63.0-rc.1/go.mod h1:y1l7iTMENfjfgV4L3a5RtsMiQAVeu6B/0SEo6A8XDFQ=
github.com/DataDog/datadog-api-client-go v1.16.0 h1:5jOZv1m98criCvYTa3qpW8Hzv301nbZX3K9yJtwGyWY=
github.com/DataDog/datadog-api-client-go v1.16.0/go.mod h1:PgrP2ABuJWL3Auw2iEkemAJ/r72ghG4DQQmb5sgnKW4=
github.com/DataDog/extendeddaemonset v0.10.0-rc.4 h1:m88E+emuRHIqKgi7kHMd9N0S/NtruCCOISp3cjB7DNs=
github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.0 h1:oVLqHXhnYtUwM89y9T1fXGaK9wTkXHgNp8/ZNMQzUxE=
github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.0/go.mod h1:dppbR7CwXD4pgtV9t3wD1812RaLDcBjtblcDF5f1vI0=
Expand Down
12 changes: 2 additions & 10 deletions internal/controller/datadogagent/component/agent/default.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (
"strconv"
"strings"

edsv1alpha1 "github.com/DataDog/extendeddaemonset/api/v1alpha1"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand All @@ -32,20 +31,13 @@ import (

// NewDefaultAgentDaemonset return a new default agent DaemonSet
// TODO: remove instanceName once v2 reconcile is removed
func NewDefaultAgentDaemonset(dda metav1.Object, edsOptions *ExtendedDaemonsetOptions, agentComponent feature.RequiredComponent, instanceName string) *appsv1.DaemonSet {
daemonset := NewDaemonset(dda, edsOptions, constants.DefaultAgentResourceSuffix, component.GetAgentName(dda), common.GetAgentVersion(dda), nil, instanceName)
func NewDefaultAgentDaemonset(dda metav1.Object, agentComponent feature.RequiredComponent, instanceName string) *appsv1.DaemonSet {
daemonset := NewDaemonset(dda, constants.DefaultAgentResourceSuffix, component.GetAgentName(dda), common.GetAgentVersion(dda), nil, instanceName)
podTemplate := NewDefaultAgentPodTemplateSpec(dda, agentComponent, daemonset.GetLabels())
daemonset.Spec.Template = *podTemplate
return daemonset
}

// NewDefaultAgentExtendedDaemonset return a new default agent DaemonSet
func NewDefaultAgentExtendedDaemonset(dda metav1.Object, edsOptions *ExtendedDaemonsetOptions, agentComponent feature.RequiredComponent) *edsv1alpha1.ExtendedDaemonSet {
edsDaemonset := NewExtendedDaemonset(dda, edsOptions, constants.DefaultAgentResourceSuffix, component.GetAgentName(dda), common.GetAgentVersion(dda), nil)
edsDaemonset.Spec.Template = *NewDefaultAgentPodTemplateSpec(dda, agentComponent, edsDaemonset.GetLabels())
return edsDaemonset
}

// NewDefaultAgentPodTemplateSpec returns a defaulted node agent PodTemplateSpec with a single multi-process container or multiple single-process containers
func NewDefaultAgentPodTemplateSpec(dda metav1.Object, agentComponent feature.RequiredComponent, labels map[string]string) *corev1.PodTemplateSpec {
requiredContainers := agentComponent.Containers
Expand Down
95 changes: 1 addition & 94 deletions internal/controller/datadogagent/component/agent/new.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,14 @@
package agent

import (
"time"

edsv1alpha1 "github.com/DataDog/extendeddaemonset/api/v1alpha1"
appsv1 "k8s.io/api/apps/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

apiutils "github.com/DataDog/datadog-operator/api/utils"
"github.com/DataDog/datadog-operator/internal/controller/datadogagent/common"
)

// NewDaemonset use to generate the skeleton of a new daemonset based on few information
func NewDaemonset(owner metav1.Object, edsOptions *ExtendedDaemonsetOptions, componentKind, componentName, version string, selector *metav1.LabelSelector, instanceName string) *appsv1.DaemonSet {
func NewDaemonset(owner metav1.Object, componentKind, componentName, version string, selector *metav1.LabelSelector, instanceName string) *appsv1.DaemonSet {
labels, annotations, selector := common.GetDefaultMetadata(owner, componentKind, instanceName, version, selector)

daemonset := &appsv1.DaemonSet{
Expand All @@ -31,94 +27,5 @@ func NewDaemonset(owner metav1.Object, edsOptions *ExtendedDaemonsetOptions, com
Selector: selector,
},
}
if edsOptions != nil && edsOptions.MaxPodUnavailable != "" {
daemonset.Spec.UpdateStrategy = appsv1.DaemonSetUpdateStrategy{
RollingUpdate: &appsv1.RollingUpdateDaemonSet{
MaxUnavailable: apiutils.NewIntOrStringPointer(edsOptions.MaxPodUnavailable),
},
}
}
return daemonset
}

// NewExtendedDaemonset use to generate the skeleton of a new extended daemonset based on few information
func NewExtendedDaemonset(owner metav1.Object, edsOptions *ExtendedDaemonsetOptions, componentKind, componentName, version string, selector *metav1.LabelSelector) *edsv1alpha1.ExtendedDaemonSet {
// FIXME (@CharlyF): The EDS controller uses the Spec.Selector as a node selector to get the NodeList to rollout the agent.
// Per https://github.com/DataDog/extendeddaemonset/blob/28a8e082cee9890ae6d925a7d6247a36c6f6ba5d/controllers/extendeddaemonsetreplicaset/controller.go#L344-L360
// Up until v0.8.2, the Datadog Operator set the selector to nil, which circumvented this case.
// Until the EDS controller uses the Affinity field to get the NodeList instead of Spec.Selector, let's keep the previous behavior.
labels, annotations, _ := common.GetDefaultMetadata(owner, componentKind, componentName, version, selector)

daemonset := &edsv1alpha1.ExtendedDaemonSet{
ObjectMeta: metav1.ObjectMeta{
Name: componentName,
Namespace: owner.GetNamespace(),
Labels: labels,
Annotations: annotations,
},
Spec: defaultEDSSpec(edsOptions),
}

return daemonset
}

// ExtendedDaemonsetOptions defines ExtendedDaemonset options
type ExtendedDaemonsetOptions struct {
Enabled bool

MaxPodUnavailable string
MaxPodSchedulerFailure string
SlowStartAdditiveIncrease string

CanaryDuration time.Duration
CanaryReplicas string
CanaryAutoPauseEnabled bool
CanaryAutoPauseMaxRestarts int32
CanaryAutoFailEnabled bool
CanaryAutoFailMaxRestarts int32
CanaryAutoPauseMaxSlowStartDuration time.Duration
}

func defaultEDSSpec(options *ExtendedDaemonsetOptions) edsv1alpha1.ExtendedDaemonSetSpec {
spec := edsv1alpha1.ExtendedDaemonSetSpec{
Strategy: edsv1alpha1.ExtendedDaemonSetSpecStrategy{
Canary: &edsv1alpha1.ExtendedDaemonSetSpecStrategyCanary{},
},
}
edsv1alpha1.DefaultExtendedDaemonSetSpec(&spec, edsv1alpha1.ExtendedDaemonSetSpecStrategyCanaryValidationModeAuto)

if options.MaxPodUnavailable != "" {
spec.Strategy.RollingUpdate.MaxUnavailable = apiutils.NewIntOrStringPointer(options.MaxPodUnavailable)
}

if options.MaxPodSchedulerFailure != "" {
spec.Strategy.RollingUpdate.MaxPodSchedulerFailure = apiutils.NewIntOrStringPointer(options.MaxPodSchedulerFailure)
}

if options.SlowStartAdditiveIncrease != "" {
spec.Strategy.RollingUpdate.SlowStartAdditiveIncrease = apiutils.NewIntOrStringPointer(options.SlowStartAdditiveIncrease)
}

if options.CanaryDuration != 0 {
spec.Strategy.Canary.Duration = &metav1.Duration{Duration: options.CanaryDuration}
}

if options.CanaryReplicas != "" {
spec.Strategy.Canary.Replicas = apiutils.NewIntOrStringPointer(options.CanaryReplicas)
}

spec.Strategy.Canary.AutoFail.Enabled = new(options.CanaryAutoFailEnabled)
if options.CanaryAutoFailMaxRestarts > 0 {
spec.Strategy.Canary.AutoFail.MaxRestarts = new(options.CanaryAutoFailMaxRestarts)
}

if options.CanaryAutoPauseMaxSlowStartDuration != 0 {
spec.Strategy.Canary.AutoPause.MaxSlowStartDuration = &metav1.Duration{Duration: options.CanaryAutoPauseMaxSlowStartDuration}
}

spec.Strategy.Canary.AutoPause.Enabled = new(options.CanaryAutoPauseEnabled)
if options.CanaryAutoPauseMaxRestarts > 0 {
spec.Strategy.Canary.AutoPause.MaxRestarts = new(options.CanaryAutoPauseMaxRestarts)
}
return spec
}
2 changes: 1 addition & 1 deletion internal/controller/datadogagent/component/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ func GetAgentName(dda metav1.Object) string {
return fmt.Sprintf("%s-%s", dda.GetName(), constants.DefaultAgentResourceSuffix)
}

// GetDaemonSetNameFromDatadogAgent returns the expected node Agent DS/EDS name based on
// GetDaemonSetNameFromDatadogAgent returns the expected node Agent DaemonSet name based on
// the DDA name and nodeAgent name override
func GetDaemonSetNameFromDatadogAgent(ddaObject metav1.Object, ddaSpec *v2alpha1.DatadogAgentSpec) string {
dsName := GetAgentName(ddaObject)
Expand Down
2 changes: 0 additions & 2 deletions internal/controller/datadogagent/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import (
"sigs.k8s.io/controller-runtime/pkg/reconcile"

"github.com/DataDog/datadog-operator/api/datadoghq/v2alpha1"
componentagent "github.com/DataDog/datadog-operator/internal/controller/datadogagent/component/agent"
"github.com/DataDog/datadog-operator/pkg/controller/utils/datadog"
"github.com/DataDog/datadog-operator/pkg/kubernetes"

Expand Down Expand Up @@ -90,7 +89,6 @@ type ProviderReader interface {

// ReconcilerOptions provides options read from command line
type ReconcilerOptions struct {
ExtendedDaemonsetOptions componentagent.ExtendedDaemonsetOptions
SupportCilium bool
OperatorMetricsEnabled bool
IntrospectionEnabled bool
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import (
rbacv1 "k8s.io/api/rbac/v1"

apiutils "github.com/DataDog/datadog-operator/api/utils"
"github.com/DataDog/datadog-operator/pkg/extendeddaemonset"
"github.com/DataDog/datadog-operator/pkg/kubernetes/rbac"
)

Expand All @@ -35,14 +34,6 @@ func (f *admissionControllerFeature) getRBACClusterPolicyRules() []rbacv1.Policy
rbac.DeleteVerb,
},
},
// ExtendedDaemonsetReplicaSets
{
APIGroups: []string{extendeddaemonset.GroupVersion.Group},
Resources: []string{
rbac.ExtendedDaemonSetReplicaSetResource,
},
Verbs: []string{rbac.GetVerb},
},
{
APIGroups: []string{rbac.CoreAPIGroup},
Resources: []string{
Expand Down
Loading
Loading