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
44 changes: 38 additions & 6 deletions internal/controller/cli_download_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,14 +167,22 @@ func (c *CLIDownloadSetup) reconcileCLIResources(ctx context.Context, operatorDe
c.Log.Info("Created CLI server deployment", "image", cliServerImage)
} else if err != nil {
return fmt.Errorf("failed to get CLI server deployment: %w", err)
} else {
} else if idx := findContainerIndexByName(deployment.Spec.Template.Spec.Containers, "oadp-cli-server"); idx != -1 {
// Deployment exists from a version before probes/service account were added; backfill them.
desired := buildCLIServerDeployment(c.Namespace, cliServerImage)
desiredContainer := desired.Spec.Template.Spec.Containers[0]
currentContainer := &deployment.Spec.Template.Spec.Containers[idx]
needsUpdate := false
if len(deployment.Spec.Template.Spec.Containers) > 0 &&
deployment.Spec.Template.Spec.Containers[0].ReadinessProbe == nil {
deployment.Spec.Template.Spec.Containers[0].ReadinessProbe = desired.Spec.Template.Spec.Containers[0].ReadinessProbe
deployment.Spec.Template.Spec.Containers[0].LivenessProbe = desired.Spec.Template.Spec.Containers[0].LivenessProbe
if currentContainer.ReadinessProbe == nil && desiredContainer.ReadinessProbe != nil {
currentContainer.ReadinessProbe = desiredContainer.ReadinessProbe
needsUpdate = true
}
if currentContainer.LivenessProbe == nil && desiredContainer.LivenessProbe != nil {
currentContainer.LivenessProbe = desiredContainer.LivenessProbe
needsUpdate = true
}
if currentContainer.StartupProbe == nil && desiredContainer.StartupProbe != nil {
currentContainer.StartupProbe = desiredContainer.StartupProbe
needsUpdate = true
}
if deployment.Spec.Template.Spec.ServiceAccountName != cliServerServiceAccountName {
Expand All @@ -191,7 +199,7 @@ func (c *CLIDownloadSetup) reconcileCLIResources(ctx context.Context, operatorDe
if err := c.Client.Update(ctx, deployment); err != nil {
return fmt.Errorf("failed to update CLI server deployment: %w", err)
}
c.Log.Info("Updated CLI server deployment with readiness/liveness probes and/or service account")
c.Log.Info("Updated CLI server deployment with probes, service account, and/or automount setting")
}
}

Expand Down Expand Up @@ -424,6 +432,17 @@ func buildCLIServerDeployment(namespace, image string) *appsv1.Deployment {
},
ReadOnlyRootFilesystem: &readOnlyRootFilesystem,
},
StartupProbe: &corev1.Probe{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Path: "/",
Port: intstr.FromString("http"),
},
},
InitialDelaySeconds: 5,
PeriodSeconds: 5,
FailureThreshold: 12,
},
ReadinessProbe: &corev1.Probe{
ProbeHandler: corev1.ProbeHandler{
HTTPGet: &corev1.HTTPGetAction{
Expand Down Expand Up @@ -524,3 +543,16 @@ func buildCLIServerRoute(namespace string) *routev1.Route {
func int64Ptr(i int64) *int64 {
return &i
}

// findContainerIndexByName returns the index of the container with the given
// name, or -1 if no such container exists. Used to avoid assuming the target
// server container is always at index 0, which may not hold if a sidecar is
// injected or the container order changes.
func findContainerIndexByName(containers []corev1.Container, name string) int {
for i := range containers {
if containers[i].Name == name {
return i
}
}
return -1
}
Loading