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  }