Skip to content

Commit

Permalink
fix: change deployment image reconciling (#348)
Browse files Browse the repository at this point in the history
* fix: change deployment image reconciling

Signed-off-by: ultram4rine <ultramarine730@gmail.com>

* improve image reconciling

Signed-off-by: ultram4rine <ultramarine730@gmail.com>

---------

Signed-off-by: ultram4rine <ultramarine730@gmail.com>
Co-authored-by: Aris Boutselis <arisboutselis08@gmail.com>
  • Loading branch information
ultram4rine and arbreezy committed Apr 22, 2024
1 parent 2eae459 commit 6633529
Showing 1 changed file with 45 additions and 7 deletions.
52 changes: 45 additions & 7 deletions controllers/k8sgpt_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,18 +179,18 @@ func (r *K8sGPTReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctr

if deployment.Status.ReadyReplicas > 0 {

// Check the version of the deployment image matches the version set in the K8sGPT CR
// Check the repo and version of the deployment image matches the repo and version set in the K8sGPT CR
imageURI := deployment.Spec.Template.Spec.Containers[0].Image

image := strings.Split(imageURI, ":")
imageRepository := image[0]
imageVersion := image[1]
imageRepository, imageVersion := parseImageURI(imageURI)

// if one of repository or tag is changed, we need to update the deployment
if imageRepository != k8sgptConfig.Spec.Repository || imageVersion != k8sgptConfig.Spec.Version {
// Update the deployment image
deployment.Spec.Template.Spec.Containers[0].Image = fmt.Sprintf("%s:%s",
imageRepository, k8sgptConfig.Spec.Version)
deployment.Spec.Template.Spec.Containers[0].Image = fmt.Sprintf(
"%s:%s",
k8sgptConfig.Spec.Repository,
k8sgptConfig.Spec.Version,
)
err = r.Update(ctx, &deployment)
if err != nil {
k8sgptReconcileErrorCount.With(prometheus.Labels{
Expand Down Expand Up @@ -451,3 +451,41 @@ func (r *K8sGPTReconciler) finishReconcile(err error, requeueImmediate bool) (ct
fmt.Println("Finished Reconciling k8sGPT")
return ctrl.Result{Requeue: true, RequeueAfter: interval}, nil
}

// https://kubernetes.io/docs/concepts/containers/images/#image-names
func parseImageURI(uri string) (string, string) {
// We have possible image variants:
// - pause
// - pause:v1.0.0
// With registry
// - fictional.registry.example/imagename
// - fictional.registry.example:10443/imagename
// - fictional.registry.example/imagename:v1.0.0
// - fictional.registry.example:10443/imagename:v1.0.0

var (
repository string
version string
)

if strings.Contains(uri, "/") {
parts := strings.SplitN(uri, "/", 2)
registry := parts[0]
name := parts[1]
if strings.Contains(name, ":") {
nameParts := strings.SplitN(name, ":", 2)
repository = registry + "/" + nameParts[0]
version = nameParts[1]
} else {
repository = registry + "/" + name
}
} else if strings.Contains(uri, ":") {
imageParts := strings.SplitN(uri, ":", 2)
repository = imageParts[0]
version = imageParts[1]
} else {
repository = uri
}

return repository, version
}

0 comments on commit 6633529

Please sign in to comment.