2020-02-10 12:44:20 -08:00
|
|
|
package generate
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
2020-03-17 16:25:34 -07:00
|
|
|
"sigs.k8s.io/controller-runtime/pkg/log"
|
2020-02-10 12:44:20 -08:00
|
|
|
)
|
|
|
|
|
|
|
|
func manageLabels(unstr *unstructured.Unstructured, triggerResource unstructured.Unstructured) {
|
|
|
|
// add managedBY label if not defined
|
|
|
|
labels := unstr.GetLabels()
|
|
|
|
if labels == nil {
|
|
|
|
labels = map[string]string{}
|
|
|
|
}
|
|
|
|
|
|
|
|
// handle managedBy label
|
|
|
|
managedBy(labels)
|
|
|
|
// handle generatedBy label
|
|
|
|
generatedBy(labels, triggerResource)
|
|
|
|
|
|
|
|
// update the labels
|
|
|
|
unstr.SetLabels(labels)
|
|
|
|
}
|
|
|
|
|
|
|
|
func managedBy(labels map[string]string) {
|
|
|
|
// ManagedBy label
|
|
|
|
key := "app.kubernetes.io/managed-by"
|
|
|
|
value := "kyverno"
|
|
|
|
val, ok := labels[key]
|
|
|
|
if ok {
|
|
|
|
if val != value {
|
2020-03-17 11:05:20 -07:00
|
|
|
log.Log.Info(fmt.Sprintf("resource managed by %s, kyverno wont over-ride the label", val))
|
2020-02-10 12:44:20 -08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if !ok {
|
|
|
|
// add label
|
|
|
|
labels[key] = value
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func generatedBy(labels map[string]string, triggerResource unstructured.Unstructured) {
|
|
|
|
key := "kyverno.io/generated-by"
|
|
|
|
value := fmt.Sprintf("%s-%s-%s", triggerResource.GetKind(), triggerResource.GetNamespace(), triggerResource.GetName())
|
|
|
|
val, ok := labels[key]
|
|
|
|
if ok {
|
|
|
|
if val != value {
|
2020-03-17 11:05:20 -07:00
|
|
|
log.Log.Info(fmt.Sprintf("resource generated by %s, kyverno wont over-ride the label", val))
|
2020-02-10 12:44:20 -08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if !ok {
|
|
|
|
// add label
|
|
|
|
labels[key] = value
|
|
|
|
}
|
|
|
|
}
|