From 4d4022f66e166967140cb2ec581f671735c97965 Mon Sep 17 00:00:00 2001 From: Chris Randles Date: Fri, 3 Nov 2023 14:00:00 -0700 Subject: [PATCH] add support for weighted manifests --- pkg/releaseutil/kind_sorter.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/pkg/releaseutil/kind_sorter.go b/pkg/releaseutil/kind_sorter.go index b5d75b88b..842d7e157 100644 --- a/pkg/releaseutil/kind_sorter.go +++ b/pkg/releaseutil/kind_sorter.go @@ -18,6 +18,7 @@ package releaseutil import ( "sort" + "strconv" "helm.sh/helm/v3/pkg/release" ) @@ -109,11 +110,29 @@ var UninstallOrder KindSortOrder = []string{ "PriorityClass", } +// OrderWeightAnnotation is the label name for configuring the sorted weight of a manifest +const OrderWeightAnnotation = "helm.sh/order-weight" + // sort manifests by kind. // // Results are sorted by 'ordering', keeping order of items with equal kind/priority +// if a manifest defines a `helm.sh/order-weight` annotation, i func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifest { sort.SliceStable(manifests, func(i, j int) bool { + iPriority, err := strconv.Atoi(manifests[i].Head.Metadata.Annotations[OrderWeightAnnotation]) + if err != nil { + iPriority = 0 + } + jPriority, err := strconv.Atoi(manifests[j].Head.Metadata.Annotations[OrderWeightAnnotation]) + if err != nil { + jPriority = 0 + } + if iPriority < jPriority { + return true + } else if iPriority > jPriority { + return false + } + // if the resolved priorities match, default to the legacy lessByKind logic for final sorting return lessByKind(manifests[i], manifests[j], manifests[i].Head.Kind, manifests[j].Head.Kind, ordering) })