master
go 82 lines 1.74 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package k8s_state
4
5 import (
6 "fmt"
7
8 appsv1 "k8s.io/api/apps/v1"
9 batchv1 "k8s.io/api/batch/v1"
10 corev1 "k8s.io/api/core/v1"
11 )
12
13 type resource interface {
14 source() string
15 kind() kubeResourceKind
16 value() any
17 }
18
19 type kubeResourceKind uint8
20
21 const (
22 kubeResourceNode kubeResourceKind = iota + 1
23 kubeResourcePod
24 kubeResourceDeployment
25 kubeResourceCronJob
26 kubeResourceJob
27 )
28
29 func toNode(i any) (*corev1.Node, error) {
30 switch v := i.(type) {
31 case *corev1.Node:
32 return v, nil
33 case resource:
34 return toNode(v.value())
35 default:
36 return nil, fmt.Errorf("unexpected type: %T (expected %T or %T)", v, &corev1.Node{}, resource(nil))
37 }
38 }
39
40 func toPod(i any) (*corev1.Pod, error) {
41 switch v := i.(type) {
42 case *corev1.Pod:
43 return v, nil
44 case resource:
45 return toPod(v.value())
46 default:
47 return nil, fmt.Errorf("unexpected type: %T (expected %T or %T)", v, &corev1.Pod{}, resource(nil))
48 }
49 }
50
51 func toDeployment(i any) (*appsv1.Deployment, error) {
52 switch v := i.(type) {
53 case *appsv1.Deployment:
54 return v, nil
55 case resource:
56 return toDeployment(v.value())
57 default:
58 return nil, fmt.Errorf("unexpected type: %T (expected %T or %T)", v, &appsv1.Deployment{}, resource(nil))
59 }
60 }
61
62 func toCronJob(i any) (*batchv1.CronJob, error) {
63 switch v := i.(type) {
64 case *batchv1.CronJob:
65 return v, nil
66 case resource:
67 return toCronJob(v.value())
68 default:
69 return nil, fmt.Errorf("unexpected type: %T (expected %T or %T)", v, &batchv1.CronJob{}, resource(nil))
70 }
71 }
72
73 func toJob(i any) (*batchv1.Job, error) {
74 switch v := i.(type) {
75 case *batchv1.Job:
76 return v, nil
77 case resource:
78 return toJob(v.value())
79 default:
80 return nil, fmt.Errorf("unexpected type: %T (expected %T or %T)", v, &batchv1.Job{}, resource(nil))
81 }
82 }