mirror of
https://github.com/argoproj/argo-cd
synced 2026-05-02 14:27:19 +00:00
56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
package resource
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
// AnnotationGetter defines the operations required to inspect if a resource
|
|
// has annotations
|
|
type AnnotationGetter interface {
|
|
GetAnnotations() map[string]string
|
|
}
|
|
|
|
// GetAnnotationCSVs will return the value of the annotation identified by
|
|
// the given key. If the annotation has comma separated values, the returned
|
|
// list will contain all deduped values.
|
|
func GetAnnotationCSVs(obj AnnotationGetter, key string) []string {
|
|
// map for de-duping
|
|
seen := make(map[string]bool)
|
|
var values []string
|
|
for _, item := range strings.Split(obj.GetAnnotations()[key], ",") {
|
|
val := strings.TrimSpace(item)
|
|
if val == "" {
|
|
continue
|
|
}
|
|
if seen[val] {
|
|
continue
|
|
}
|
|
seen[val] = true
|
|
values = append(values, val)
|
|
}
|
|
return values
|
|
}
|
|
|
|
// HasAnnotationOption will return if the given obj has an annotation defined
|
|
// as the given key and has in its values, the occurrence of val.
|
|
func HasAnnotationOption(obj AnnotationGetter, key, val string) bool {
|
|
for _, item := range GetAnnotationCSVs(obj, key) {
|
|
if item == val {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// GetAnnotationOptionValue will return the value of an option inside the
|
|
// annotation defined as the given key.
|
|
// This function only support options that are defined as key=value and not standalone.
|
|
func GetAnnotationOptionValue(obj AnnotationGetter, annotation, optionKey string) *string {
|
|
prefix := optionKey + "="
|
|
for _, item := range GetAnnotationCSVs(obj, annotation) {
|
|
if val, found := strings.CutPrefix(item, prefix); found {
|
|
return new(val)
|
|
}
|
|
}
|
|
return nil
|
|
}
|