package gencontroller import ( "github.com/minio/minio/pkg/wildcard" v1alpha1 "github.com/nirmata/kyverno/pkg/apis/policy/v1alpha1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" ) const ( wqNamespace string = "namespace" workerCount int = 1 wqRetryLimit int = 5 policyKind string = "Policy" ) func namespaceMeetsRuleDescription(ns *corev1.Namespace, resourceDescription v1alpha1.ResourceDescription) bool { //REWORK Not needed but verify the 'Namespace' is defined in the list of supported kinds if !findKind(resourceDescription.Kinds, "Namespace") { return false } if resourceDescription.Name != nil { if !wildcard.Match(*resourceDescription.Name, ns.Name) { return false } } if resourceDescription.Selector != nil { selector, err := metav1.LabelSelectorAsSelector(resourceDescription.Selector) if err != nil { return false } labelSet := convertLabelsToLabelSet(ns.Labels) // labels if !selector.Matches(labelSet) { return false } } return true } func convertLabelsToLabelSet(labelMap map[string]string) labels.Set { labelSet := make(labels.Set, len(labelMap)) // REWORK: check if the below works // if x, ok := labelMap.(labels.Set); !ok { // } for k, v := range labelMap { labelSet[k] = v } return labelSet } func findKind(kinds []string, kindGVK string) bool { for _, kind := range kinds { if kind == kindGVK { return true } } return false }