1 package k8s
2
3 import (
4 l5dcrdclient "github.com/linkerd/linkerd2/controller/gen/client/clientset/versioned"
5 "github.com/linkerd/linkerd2/pkg/k8s"
6 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
7 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
8 "k8s.io/apimachinery/pkg/runtime"
9 "k8s.io/client-go/kubernetes"
10 clientsetscheme "k8s.io/client-go/kubernetes/scheme"
11 "k8s.io/client-go/metadata/fake"
12 "k8s.io/client-go/testing"
13 )
14
15
16 func NewFakeAPI(configs ...string) (*API, error) {
17 clientSet, _, _, spClientSet, err := k8s.NewFakeClientSets(configs...)
18 if err != nil {
19 return nil, err
20 }
21
22 return NewFakeClusterScopedAPI(clientSet, spClientSet), nil
23 }
24
25
26 func NewFakeAPIWithActions(configs ...string) (*API, func() []testing.Action, error) {
27 clientSet, _, _, spClientSet, err := k8s.NewFakeClientSets(configs...)
28 if err != nil {
29 return nil, nil, err
30 }
31
32 return NewFakeClusterScopedAPI(clientSet, spClientSet), clientSet.Actions, nil
33 }
34
35
36
37 func NewFakeAPIWithL5dClient(configs ...string) (*API, l5dcrdclient.Interface, error) {
38 clientSet, _, _, l5dClientSet, err := k8s.NewFakeClientSets(configs...)
39 if err != nil {
40 return nil, nil, err
41 }
42
43 return NewFakeClusterScopedAPI(clientSet, l5dClientSet), l5dClientSet, nil
44 }
45
46
47 func NewFakeClusterScopedAPI(clientSet kubernetes.Interface, l5dClientSet l5dcrdclient.Interface) *API {
48 return NewClusterScopedAPI(
49 clientSet,
50 nil,
51 l5dClientSet,
52 "fake",
53 CJ,
54 CM,
55 Deploy,
56 DS,
57 Endpoint,
58 Job,
59 MWC,
60 NS,
61 Pod,
62 ExtWorkload,
63 RC,
64 RS,
65 SP,
66 SS,
67 Svc,
68 Node,
69 ES,
70 Srv,
71 Secret,
72 ExtWorkload,
73 )
74 }
75
76
77 func NewFakeMetadataAPI(configs []string) (*MetadataAPI, error) {
78 sch := runtime.NewScheme()
79 metav1.AddMetaToScheme(sch)
80
81 var objs []runtime.Object
82 for _, config := range configs {
83 obj, err := k8s.ToRuntimeObject(config)
84 if err != nil {
85 return nil, err
86 }
87 objMeta, err := toPartialObjectMetadata(obj)
88 if err != nil {
89 return nil, err
90 }
91 objs = append(objs, objMeta)
92 }
93
94 metadataClient := fake.NewSimpleMetadataClient(sch, objs...)
95
96 return newClusterScopedMetadataAPI(
97 metadataClient,
98 "fake",
99 CJ,
100 CM,
101 Deploy,
102 DS,
103 Endpoint,
104 Job,
105 MWC,
106 NS,
107 Pod,
108 RC,
109 RS,
110 SP,
111 SS,
112 Svc,
113 Node,
114 ES,
115 Svc,
116 )
117 }
118
119 func toPartialObjectMetadata(obj runtime.Object) (*metav1.PartialObjectMetadata, error) {
120 u := &unstructured.Unstructured{}
121 err := clientsetscheme.Scheme.Convert(obj, u, nil)
122 if err != nil {
123 return nil, err
124 }
125
126 return &metav1.PartialObjectMetadata{
127 TypeMeta: metav1.TypeMeta{
128 APIVersion: u.GetAPIVersion(),
129 Kind: u.GetKind(),
130 },
131 ObjectMeta: metav1.ObjectMeta{
132 Namespace: u.GetNamespace(),
133 Name: u.GetName(),
134 Annotations: u.GetAnnotations(),
135 Labels: u.GetLabels(),
136 OwnerReferences: u.GetOwnerReferences(),
137 },
138 }, nil
139 }
140
View as plain text