github.com/netdata/go.d.plugin@v0.58.1/modules/k8s_state/resource.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package k8s_state 4 5 import ( 6 "fmt" 7 8 corev1 "k8s.io/api/core/v1" 9 ) 10 11 type resource interface { 12 source() string 13 kind() kubeResourceKind 14 value() interface{} 15 } 16 17 type kubeResourceKind uint8 18 19 const ( 20 kubeResourceNode kubeResourceKind = iota + 1 21 kubeResourcePod 22 ) 23 24 func toNode(i interface{}) (*corev1.Node, error) { 25 switch v := i.(type) { 26 case *corev1.Node: 27 return v, nil 28 case resource: 29 return toNode(v.value()) 30 default: 31 return nil, fmt.Errorf("unexpected type: %T (expected %T or %T)", v, &corev1.Node{}, resource(nil)) 32 } 33 } 34 35 func toPod(i interface{}) (*corev1.Pod, error) { 36 switch v := i.(type) { 37 case *corev1.Pod: 38 return v, nil 39 case resource: 40 return toPod(v.value()) 41 default: 42 return nil, fmt.Errorf("unexpected type: %T (expected %T or %T)", v, &corev1.Pod{}, resource(nil)) 43 } 44 }