diff --git a/config/crds/v1/all-crds.yaml b/config/crds/v1/all-crds.yaml index e67c29bb14..706e63ae5a 100644 --- a/config/crds/v1/all-crds.yaml +++ b/config/crds/v1/all-crds.yaml @@ -82,6 +82,9 @@ spec: when created from a template type: object x-kubernetes-preserve-unknown-fields: true + revisionHistoryLimit: + format: int32 + type: integer updateStrategy: description: DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet. @@ -162,6 +165,9 @@ spec: replicas: format: int32 type: integer + revisionHistoryLimit: + format: int32 + type: integer strategy: description: DeploymentStrategy describes how to replace existing pods with new ones. diff --git a/config/crds/v1/bases/agent.k8s.elastic.co_agents.yaml b/config/crds/v1/bases/agent.k8s.elastic.co_agents.yaml index fe5f67d794..763f56d898 100644 --- a/config/crds/v1/bases/agent.k8s.elastic.co_agents.yaml +++ b/config/crds/v1/bases/agent.k8s.elastic.co_agents.yaml @@ -7548,6 +7548,9 @@ spec: type: object type: object x-kubernetes-preserve-unknown-fields: true + revisionHistoryLimit: + format: int32 + type: integer updateStrategy: description: DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet. @@ -15093,6 +15096,9 @@ spec: replicas: format: int32 type: integer + revisionHistoryLimit: + format: int32 + type: integer strategy: description: DeploymentStrategy describes how to replace existing pods with new ones. diff --git a/deploy/eck-operator/charts/eck-operator-crds/templates/all-crds.yaml b/deploy/eck-operator/charts/eck-operator-crds/templates/all-crds.yaml index dbd10c4a40..09c813a63d 100644 --- a/deploy/eck-operator/charts/eck-operator-crds/templates/all-crds.yaml +++ b/deploy/eck-operator/charts/eck-operator-crds/templates/all-crds.yaml @@ -88,6 +88,9 @@ spec: when created from a template type: object x-kubernetes-preserve-unknown-fields: true + revisionHistoryLimit: + format: int32 + type: integer updateStrategy: description: DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet. @@ -168,6 +171,9 @@ spec: replicas: format: int32 type: integer + revisionHistoryLimit: + format: int32 + type: integer strategy: description: DeploymentStrategy describes how to replace existing pods with new ones. diff --git a/docs/reference/api-docs.asciidoc b/docs/reference/api-docs.asciidoc index 8da0cd2a61..c0316fe11f 100644 --- a/docs/reference/api-docs.asciidoc +++ b/docs/reference/api-docs.asciidoc @@ -111,6 +111,7 @@ AgentSpec defines the desired state of the Agent |=== | Field | Description | *`podTemplate`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#podtemplatespec-v1-core[$$PodTemplateSpec$$]__ | +| *`revisionHistoryLimit`* __integer__ | | *`updateStrategy`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#daemonsetupdatestrategy-v1-apps[$$DaemonSetUpdateStrategy$$]__ | |=== @@ -130,6 +131,7 @@ AgentSpec defines the desired state of the Agent | Field | Description | *`podTemplate`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#podtemplatespec-v1-core[$$PodTemplateSpec$$]__ | | *`replicas`* __integer__ | +| *`revisionHistoryLimit`* __integer__ | | *`strategy`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#deploymentstrategy-v1-apps[$$DeploymentStrategy$$]__ | |=== diff --git a/pkg/apis/agent/v1alpha1/agent_types.go b/pkg/apis/agent/v1alpha1/agent_types.go index 94efce016d..bb58ba48cd 100644 --- a/pkg/apis/agent/v1alpha1/agent_types.go +++ b/pkg/apis/agent/v1alpha1/agent_types.go @@ -102,7 +102,8 @@ type Output struct { type DaemonSetSpec struct { // +kubebuilder:pruning:PreserveUnknownFields - PodTemplate corev1.PodTemplateSpec `json:"podTemplate,omitempty"` + PodTemplate corev1.PodTemplateSpec `json:"podTemplate,omitempty"` + RevisionHistoryLimit *int32 `json:"revisionHistoryLimit,omitempty"` // +kubebuilder:validation:Optional UpdateStrategy appsv1.DaemonSetUpdateStrategy `json:"updateStrategy,omitempty"` @@ -110,8 +111,9 @@ type DaemonSetSpec struct { type DeploymentSpec struct { // +kubebuilder:pruning:PreserveUnknownFields - PodTemplate corev1.PodTemplateSpec `json:"podTemplate,omitempty"` - Replicas *int32 `json:"replicas,omitempty"` + PodTemplate corev1.PodTemplateSpec `json:"podTemplate,omitempty"` + Replicas *int32 `json:"replicas,omitempty"` + RevisionHistoryLimit *int32 `json:"revisionHistoryLimit,omitempty"` // +kubebuilder:validation:Optional Strategy appsv1.DeploymentStrategy `json:"strategy,omitempty"` diff --git a/pkg/apis/agent/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/agent/v1alpha1/zz_generated.deepcopy.go index 9372b42b9f..4c11457342 100644 --- a/pkg/apis/agent/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/agent/v1alpha1/zz_generated.deepcopy.go @@ -226,6 +226,11 @@ func (in *AgentStatus) DeepCopy() *AgentStatus { func (in *DaemonSetSpec) DeepCopyInto(out *DaemonSetSpec) { *out = *in in.PodTemplate.DeepCopyInto(&out.PodTemplate) + if in.RevisionHistoryLimit != nil { + in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit + *out = new(int32) + **out = **in + } in.UpdateStrategy.DeepCopyInto(&out.UpdateStrategy) } @@ -248,6 +253,11 @@ func (in *DeploymentSpec) DeepCopyInto(out *DeploymentSpec) { *out = new(int32) **out = **in } + if in.RevisionHistoryLimit != nil { + in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit + *out = new(int32) + **out = **in + } in.Strategy.DeepCopyInto(&out.Strategy) } diff --git a/pkg/controller/agent/controller_test.go b/pkg/controller/agent/controller_test.go index dac128a4dc..4910b9a558 100644 --- a/pkg/controller/agent/controller_test.go +++ b/pkg/controller/agent/controller_test.go @@ -149,7 +149,7 @@ func TestReconcileAgent_Reconcile(t *testing.T) { ObjectMeta: metav1.ObjectMeta{ Name: "testAgent-agent", Namespace: "test", - Labels: addLabel(defaultLabels, hash.TemplateHashLabelName, "1678576940"), + Labels: addLabel(defaultLabels, hash.TemplateHashLabelName, "3363336355"), }, Status: appsv1.DeploymentStatus{ AvailableReplicas: 1, diff --git a/pkg/controller/agent/reconcile.go b/pkg/controller/agent/reconcile.go index d3b6f9d1a7..e490289562 100644 --- a/pkg/controller/agent/reconcile.go +++ b/pkg/controller/agent/reconcile.go @@ -88,13 +88,14 @@ func reconcilePodVehicle(params Params, podTemplate corev1.PodTemplateSpec) (*re func reconcileDeployment(rp ReconciliationParams) (int32, int32, error) { d := deployment.New(deployment.Params{ - Name: Name(rp.agent.Name), - Namespace: rp.agent.Namespace, - Selector: NewLabels(rp.agent), - Labels: NewLabels(rp.agent), - PodTemplateSpec: rp.podTemplate, - Replicas: pointer.Int32OrDefault(rp.agent.Spec.Deployment.Replicas, int32(1)), - Strategy: rp.agent.Spec.Deployment.Strategy, + Name: Name(rp.agent.Name), + Namespace: rp.agent.Namespace, + Selector: NewLabels(rp.agent), + Labels: NewLabels(rp.agent), + PodTemplateSpec: rp.podTemplate, + Replicas: pointer.Int32OrDefault(rp.agent.Spec.Deployment.Replicas, int32(1)), + RevisionHistoryLimit: pointer.Int32OrDefault(rp.agent.Spec.Deployment.RevisionHistoryLimit, int32(10)), + Strategy: rp.agent.Spec.Deployment.Strategy, }) if err := controllerutil.SetControllerReference(&rp.agent, &d, scheme.Scheme); err != nil { return 0, 0, err @@ -110,12 +111,13 @@ func reconcileDeployment(rp ReconciliationParams) (int32, int32, error) { func reconcileDaemonSet(rp ReconciliationParams) (int32, int32, error) { ds := daemonset.New(daemonset.Params{ - PodTemplate: rp.podTemplate, - Name: Name(rp.agent.Name), - Owner: &rp.agent, - Labels: NewLabels(rp.agent), - Selectors: NewLabels(rp.agent), - Strategy: rp.agent.Spec.DaemonSet.UpdateStrategy, + PodTemplate: rp.podTemplate, + Name: Name(rp.agent.Name), + Owner: &rp.agent, + Labels: NewLabels(rp.agent), + Selectors: NewLabels(rp.agent), + RevisionHistoryLimit: pointer.Int32OrDefault(rp.agent.Spec.DaemonSet.RevisionHistoryLimit, int32(10)), + Strategy: rp.agent.Spec.DaemonSet.UpdateStrategy, }) if err := controllerutil.SetControllerReference(&rp.agent, &ds, scheme.Scheme); err != nil { diff --git a/pkg/controller/common/daemonset/reconcile.go b/pkg/controller/common/daemonset/reconcile.go index 1200cc3e81..c264d1be11 100644 --- a/pkg/controller/common/daemonset/reconcile.go +++ b/pkg/controller/common/daemonset/reconcile.go @@ -18,12 +18,13 @@ import ( ) type Params struct { - PodTemplate corev1.PodTemplateSpec - Name string - Owner metav1.Object - Labels map[string]string - Selectors map[string]string - Strategy appsv1.DaemonSetUpdateStrategy + PodTemplate corev1.PodTemplateSpec + Name string + Owner metav1.Object + Labels map[string]string + Selectors map[string]string + RevisionHistoryLimit int32 + Strategy appsv1.DaemonSetUpdateStrategy } func New(params Params) appsv1.DaemonSet { @@ -37,8 +38,9 @@ func New(params Params) appsv1.DaemonSet { Selector: &metav1.LabelSelector{ MatchLabels: params.Selectors, }, - Template: params.PodTemplate, - UpdateStrategy: params.Strategy, + Template: params.PodTemplate, + RevisionHistoryLimit: ¶ms.RevisionHistoryLimit, + UpdateStrategy: params.Strategy, }, } } diff --git a/pkg/controller/common/deployment/reconcile.go b/pkg/controller/common/deployment/reconcile.go index d56f5f5480..b4fc34a47d 100644 --- a/pkg/controller/common/deployment/reconcile.go +++ b/pkg/controller/common/deployment/reconcile.go @@ -15,22 +15,18 @@ import ( "github.com/elastic/cloud-on-k8s/pkg/controller/common/hash" "github.com/elastic/cloud-on-k8s/pkg/controller/common/reconciler" "github.com/elastic/cloud-on-k8s/pkg/utils/k8s" - "github.com/elastic/cloud-on-k8s/pkg/utils/pointer" -) - -var ( - defaultRevisionHistoryLimit int32 ) // Params to specify a Deployment specification. type Params struct { - Name string - Namespace string - Selector map[string]string - Labels map[string]string - PodTemplateSpec corev1.PodTemplateSpec - Replicas int32 - Strategy appsv1.DeploymentStrategy + Name string + Namespace string + Selector map[string]string + Labels map[string]string + PodTemplateSpec corev1.PodTemplateSpec + Replicas int32 + RevisionHistoryLimit int32 + Strategy appsv1.DeploymentStrategy } // New creates a Deployment from the given params. @@ -42,7 +38,7 @@ func New(params Params) appsv1.Deployment { Labels: params.Labels, }, Spec: appsv1.DeploymentSpec{ - RevisionHistoryLimit: pointer.Int32(defaultRevisionHistoryLimit), + RevisionHistoryLimit: ¶ms.RevisionHistoryLimit, Selector: &metav1.LabelSelector{ MatchLabels: params.Selector, },