Skip to content

Commit 2223910

Browse files
committed
OCM-13947 | feat: Support editing HCP cluster autoscaler
1 parent b04d131 commit 2223910

File tree

5 files changed

+394
-301
lines changed

5 files changed

+394
-301
lines changed

cmd/edit/autoscaler/cmd.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,17 @@ func EditAutoscalerRunner(autoscalerArgs *clusterautoscaler.AutoscalerArgs) rosa
7878
return err
7979
}
8080

81-
if cluster.Hypershift().Enabled() {
82-
return fmt.Errorf("Hosted Control Plane clusters do not support cluster-autoscaler configuration")
83-
}
84-
8581
if cluster.State() != cmv1.ClusterStateReady {
8682
return fmt.Errorf("Cluster '%s' is not yet ready. Current state is '%s'", clusterKey, cluster.State())
8783
}
8884

85+
if cluster.Hypershift().Enabled() {
86+
ok, err := clusterautoscaler.ValidateAutoscalerFlagsForHostedCp(argsPrefix, command)
87+
if !ok || err != nil {
88+
return err
89+
}
90+
}
91+
8992
autoscaler, err := r.OCMClient.GetClusterAutoscaler(cluster.ID())
9093
if err != nil {
9194
return fmt.Errorf("Failed updating autoscaler configuration for cluster '%s': %s",
@@ -129,7 +132,7 @@ func EditAutoscalerRunner(autoscalerArgs *clusterautoscaler.AutoscalerArgs) rosa
129132
cluster.ID(), err)
130133
}
131134

132-
_, err = r.OCMClient.UpdateClusterAutoscaler(cluster.ID(), autoscalerConfig)
135+
_, err = r.OCMClient.UpdateClusterAutoscaler(cluster.ID(), cluster.Hypershift().Enabled(), autoscalerConfig)
133136
if err != nil {
134137
return fmt.Errorf("Failed updating autoscaler configuration for cluster '%s': %s",
135138
cluster.ID(), err)

cmd/edit/autoscaler/cmd_test.go

Lines changed: 43 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -58,25 +58,6 @@ var _ = Describe("edit autoscaler", func() {
5858
Equal("There is no cluster with identifier or name 'cluster'"))
5959
})
6060

61-
It("Returns an error if the cluster is not classic cluster", func() {
62-
cluster := MockCluster(func(c *cmv1.ClusterBuilder) {
63-
b := cmv1.HypershiftBuilder{}
64-
b.Enabled(true)
65-
c.Hypershift(&b)
66-
})
67-
68-
t.ApiServer.AppendHandlers(
69-
RespondWithJSON(
70-
http.StatusOK, FormatClusterList([]*cmv1.Cluster{cluster})))
71-
t.SetCluster("cluster", nil)
72-
73-
runner := EditAutoscalerRunner(&clusterautoscaler.AutoscalerArgs{})
74-
err := runner(context.Background(), t.RosaRuntime, nil, nil)
75-
Expect(err).To(HaveOccurred())
76-
Expect(err.Error()).To(
77-
Equal("Hosted Control Plane clusters do not support cluster-autoscaler configuration"))
78-
})
79-
8061
It("Returns an error if the cluster is not ready", func() {
8162
cluster := MockCluster(func(c *cmv1.ClusterBuilder) {
8263
c.State(cmv1.ClusterStateInstalling)
@@ -186,5 +167,48 @@ var _ = Describe("edit autoscaler", func() {
186167
err := runner(context.Background(), t.RosaRuntime, cmd, nil)
187168
Expect(err).NotTo(HaveOccurred())
188169
})
170+
171+
It("Unsupported flags are blocked when using Hosted CP cluster for autoscaler", func() {
172+
cmd := NewEditAutoscalerCommand()
173+
174+
cmd.Flags().Set("balance-similar-node-groups", "true")
175+
cmd.Flag("balance-similar-node-groups").Changed = true
176+
177+
ok, err := clusterautoscaler.ValidateAutoscalerFlagsForHostedCp("", cmd)
178+
Expect(ok).To(BeFalse())
179+
Expect(err).To(HaveOccurred())
180+
Expect(err.Error()).To(Equal(fmt.Sprintf(clusterautoscaler.HcpError, "balance-similar-node-groups",
181+
"max-nodes-total", "max-pod-grace-period", "max-node-provision-time",
182+
"pod-priority-threshold")))
183+
184+
cmd = NewEditAutoscalerCommand()
185+
186+
cmd.Flags().Set("max-cores", "true")
187+
cmd.Flag("max-cores").Changed = true
188+
189+
ok, err = clusterautoscaler.ValidateAutoscalerFlagsForHostedCp("", cmd)
190+
Expect(ok).To(BeFalse())
191+
Expect(err).To(HaveOccurred())
192+
Expect(err.Error()).To(Equal(fmt.Sprintf(clusterautoscaler.HcpError, "max-cores",
193+
"max-nodes-total", "max-pod-grace-period", "max-node-provision-time",
194+
"pod-priority-threshold")))
195+
})
196+
197+
It("Supported flags work for Hosted CP cluster autoscaler", func() {
198+
cmd := NewEditAutoscalerCommand()
199+
200+
cmd.Flags().Set("max-nodes-total", "10")
201+
cmd.Flag("max-nodes-total").Changed = true
202+
cmd.Flags().Set("max-pod-grace-period", "800")
203+
cmd.Flag("max-pod-grace-period").Changed = true
204+
cmd.Flags().Set("max-node-provision-time", "10s")
205+
cmd.Flag("max-node-provision-time").Changed = true
206+
cmd.Flags().Set("pod-priority-threshold", "-8")
207+
cmd.Flag("pod-priority-threshold").Changed = true
208+
209+
ok, err := clusterautoscaler.ValidateAutoscalerFlagsForHostedCp("", cmd)
210+
Expect(ok).To(BeTrue())
211+
Expect(err).ToNot(HaveOccurred())
212+
})
189213
})
190214
})

0 commit comments

Comments
 (0)