forked from projectsveltos/libsveltos
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlib.projectsveltos.io_classifiers.yaml
More file actions
417 lines (416 loc) · 21.1 KB
/
lib.projectsveltos.io_classifiers.yaml
File metadata and controls
417 lines (416 loc) · 21.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.20.1
name: classifiers.lib.projectsveltos.io
spec:
group: lib.projectsveltos.io
names:
kind: Classifier
listKind: ClassifierList
plural: classifiers
singular: classifier
scope: Cluster
versions:
- name: v1beta1
schema:
openAPIV3Schema:
description: Classifier is the Schema for the classifiers API
properties:
apiVersion:
description: |-
APIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string
kind:
description: |-
Kind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
metadata:
type: object
spec:
description: ClassifierSpec defines the desired state of Classifier
properties:
classifierLabels:
description: |-
ClassifierLabels is set of labels, key,value pair, that will be added to each
cluster matching Classifier instance
items:
properties:
key:
description: Key is the label key
type: string
value:
description: Value is the label value
type: string
required:
- key
- value
type: object
type: array
deployedResourceConstraint:
description: DeployedResourceConstraint allows to classify based on
current deployed resources
properties:
aggregatedClassification:
description: |-
AggregatedClassification is optional and can be used to specify a Lua function
that will be used to further detect whether the subset of the resources
selected using the ResourceSelector field are a match for this Classifier.
The function will receive the array of resources selected by ResourceSelectors.
If this field is not specified, a cluster is a match for Classifier instance,
if all ResourceSelectors returns at least one match.
This field allows to perform more complex evaluation on the resources, looking
at all resources together.
This can be useful for more sophisticated tasks, such as identifying resources
that are related to each other or that have similar properties.
The Lua function must return a struct with:
- "matching" field: boolean indicating whether cluster is a match;
- "message" field: (optional) message.
type: string
resourceSelectors:
description: |-
ResourceSelectors identifies what resources to select
If no AggregatedClassification is specified, a cluster is
a match for Classifier instance, if all ResourceSelectors returns at
least one match.
items:
description: ResourceSelector defines what resources are a match
properties:
evaluate:
description: |-
Evaluate contains a function "evaluate" in lua language.
The function will be passed one of the object selected based on
above criteria.
Must return struct with field "matching" representing whether
object is a match and an optional "message" field.
type: string
evaluateCEL:
description: |-
EvaluateCEL contains a list of named CEL (Common Expression Language) rules.
Each rule will be evaluated in order against each object selected based on
the criteria defined above. Each rule's expression must return a boolean value
indicating whether the object is a match.
Evaluation stops at the first rule that returns true; subsequent
rules will not be evaluated.
items:
description: CELRule defines a named CEL rule used in
EvaluateCEL.
properties:
name:
description: Name is a human-readable identifier for
the rule.
type: string
rule:
description: |-
Rule is the CEL (Common Expression Language) expression to evaluate.
It must return a bool
type: string
required:
- name
- rule
type: object
type: array
group:
description: Group of the resource deployed in the Cluster.
type: string
kind:
description: Kind of the resource deployed in the Cluster.
minLength: 1
type: string
labelFilters:
description: LabelFilters allows to filter resources based
on current labels.
items:
properties:
key:
description: Key is the label key
type: string
operation:
description: Operation is the comparison operation
enum:
- Equal
- Different
- Has
- DoesNotHave
type: string
value:
description: Value is the label value
type: string
required:
- key
- operation
type: object
type: array
name:
description: Name of the resource deployed in the Cluster.
type: string
namespace:
description: |-
Namespace of the resource deployed in the Cluster.
Empty for resources scoped at cluster level.
For namespaced resources, an empty string "" indicates all namespaces.
type: string
selector:
description: |-
Selector is a standard Kubernetes label selector. Resources are selected
if their labels match the selector. This field uses the standard
Kubernetes label matching syntax (e.g., {"environment": "production"}).
If both LabelFilters and Selector are specified, the requirements from
both are logically ANDed.
properties:
matchExpressions:
description: matchExpressions is a list of label selector
requirements. The requirements are ANDed.
items:
description: |-
A label selector requirement is a selector that contains values, a key, and an operator that
relates the key and values.
properties:
key:
description: key is the label key that the selector
applies to.
type: string
operator:
description: |-
operator represents a key's relationship to a set of values.
Valid operators are In, NotIn, Exists and DoesNotExist.
type: string
values:
description: |-
values is an array of string values. If the operator is In or NotIn,
the values array must be non-empty. If the operator is Exists or DoesNotExist,
the values array must be empty. This array is replaced during a strategic
merge patch.
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
description: |-
matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
map is equivalent to an element of matchExpressions, whose key field is "key", the
operator is "In", and the values array contains only "value". The requirements are ANDed.
type: object
type: object
x-kubernetes-map-type: atomic
version:
description: Version of the resource deployed in the Cluster.
type: string
required:
- group
- kind
- version
type: object
type: array
required:
- resourceSelectors
type: object
kubernetesVersionConstraints:
description: KubernetesVersionConstraints allows to classify based
on current kubernetes version
items:
properties:
comparison:
description: Comparison indicate how to compare cluster kubernetes
version with the specified version
enum:
- Equal
- NotEqual
- GreaterThan
- LessThan
- GreaterThanOrEqualTo
- LessThanOrEqualTo
type: string
version:
description: Version is the kubernetes version
type: string
required:
- comparison
- version
type: object
type: array
required:
- classifierLabels
type: object
status:
description: ClassifierStatus defines the observed state of Classifier
properties:
clusterInfo:
description: |-
ClusterInfo reference all the cluster-api Cluster where Classifier
has been/is being deployed
items:
properties:
cluster:
description: Cluster references the Cluster
properties:
apiVersion:
description: API version of the referent.
type: string
fieldPath:
description: |-
If referring to a piece of an object instead of an entire object, this string
should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
For example, if the object reference is to a container within a pod, this would take on a value like:
"spec.containers{name}" (where "name" refers to the name of the container that triggered
the event) or if no container name is specified "spec.containers[2]" (container with
index 2 in this pod). This syntax is chosen only to have some well-defined way of
referencing a part of an object.
type: string
kind:
description: |-
Kind of the referent.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
name:
description: |-
Name of the referent.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
type: string
namespace:
description: |-
Namespace of the referent.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
type: string
resourceVersion:
description: |-
Specific resourceVersion to which this reference is made, if any.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
type: string
uid:
description: |-
UID of the referent.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
type: string
type: object
x-kubernetes-map-type: atomic
failureMessage:
description: FailureMessage provides more information about
the error.
type: string
hash:
description: |-
Hash represents the hash of the Classifier currently deployed
in the Cluster
format: byte
type: string
status:
description: Status represents the state of the feature in the
workload cluster
enum:
- Provisioning
- Provisioned
- Failed
- FailedNonRetriable
- Removing
- Removed
type: string
required:
- cluster
- hash
type: object
type: array
machingClusterStatuses:
description: |-
MatchingClusterRefs reference all the cluster-api Cluster currently matching
Classifier
items:
properties:
clusterRef:
description: ClusterRef references the matching Cluster
properties:
apiVersion:
description: API version of the referent.
type: string
fieldPath:
description: |-
If referring to a piece of an object instead of an entire object, this string
should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
For example, if the object reference is to a container within a pod, this would take on a value like:
"spec.containers{name}" (where "name" refers to the name of the container that triggered
the event) or if no container name is specified "spec.containers[2]" (container with
index 2 in this pod). This syntax is chosen only to have some well-defined way of
referencing a part of an object.
type: string
kind:
description: |-
Kind of the referent.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
name:
description: |-
Name of the referent.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
type: string
namespace:
description: |-
Namespace of the referent.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
type: string
resourceVersion:
description: |-
Specific resourceVersion to which this reference is made, if any.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
type: string
uid:
description: |-
UID of the referent.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
type: string
type: object
x-kubernetes-map-type: atomic
managedLabels:
description: |-
ManagedLabels indicates the labels being managed on
the cluster by this Classifier instance
items:
type: string
type: array
unManagedLabels:
description: |-
UnManagedLabel indicates the labels this Classifier instance
would like to manage but cannot because different instance is
already managing it
items:
properties:
failureMessage:
description: |-
FailureMessage is a human consumable message explaining the
misconfiguration
type: string
key:
description: |-
Key represents a label Classifier would like to manage
but cannot because currently managed by different instance
type: string
required:
- key
type: object
type: array
required:
- clusterRef
type: object
type: array
type: object
type: object
served: true
storage: true
subresources:
status: {}