69 lines
1.3 KiB
Go
69 lines
1.3 KiB
Go
package watch
|
|
|
|
import (
|
|
"github.com/rs/zerolog/log"
|
|
v1 "k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
)
|
|
|
|
func resourceDiff(l1, l2 v1.ResourceList) bool {
|
|
if l1.Cpu().Cmp(*l2.Cpu()) != 0 {
|
|
return true
|
|
}
|
|
if l1.Memory().Cmp(*l2.Memory()) != 0 {
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
// MetaFQN computes unique resource id based on metadata.
|
|
func MetaFQN(m metav1.ObjectMeta) string {
|
|
if m.Namespace == "" {
|
|
return m.Name
|
|
}
|
|
|
|
return m.Namespace + "/" + m.Name
|
|
}
|
|
|
|
// ToSelector converts a string selector into a map.
|
|
func toSelector(s string) map[string]string {
|
|
var m map[string]string
|
|
ls, err := metav1.ParseToLabelSelector(s)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("StringToSel")
|
|
return m
|
|
}
|
|
mSel, err := metav1.LabelSelectorAsMap(ls)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("SelToMap")
|
|
return m
|
|
}
|
|
|
|
return mSel
|
|
}
|
|
|
|
// MatchesNode checks if pod selector matches node name.
|
|
func matchesNode(name string, selector map[string]string) bool {
|
|
if len(selector) == 0 {
|
|
return true
|
|
}
|
|
|
|
return selector["spec.nodeName"] == name
|
|
}
|
|
|
|
// MatchesLabels check if pod labels matches a given selector.
|
|
func matchesLabels(labels, selector map[string]string) bool {
|
|
if len(selector) == 0 {
|
|
return true
|
|
}
|
|
for k, v := range selector {
|
|
la, ok := labels[k]
|
|
if !ok || la != v {
|
|
return false
|
|
}
|
|
}
|
|
|
|
return true
|
|
}
|