-
Notifications
You must be signed in to change notification settings - Fork 213
/
patch_collector.go
82 lines (72 loc) · 3.12 KB
/
patch_collector.go
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
package object_patch
import (
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
)
type PatchCollector struct {
patchOperations []Operation
}
// NewPatchCollector creates Operation collector to use within Go hooks.
func NewPatchCollector() *PatchCollector {
return &PatchCollector{
patchOperations: make([]Operation, 0),
}
}
// Create or update an object.
//
// Options:
// - WithSubresource - create a specified subresource
// - IgnoreIfExists - do not return error if the specified object exists
// - UpdateIfExists - call Update if the specified object exists
func (dop *PatchCollector) Create(object interface{}, options ...CreateOption) {
dop.add(NewCreateOperation(object, options...))
}
// Delete uses apiVersion, kind, namespace and name to delete object from cluster.
//
// Options:
// - WithSubresource - delete a specified subresource
// - InForeground - remove object when all dependants are removed (default)
// - InBackground - remove object immediately, dependants remove in background
// - NonCascading - remove object, dependants become orphan
//
// Missing object is ignored by default.
func (dop *PatchCollector) Delete(apiVersion, kind, namespace, name string, options ...DeleteOption) {
dop.add(NewDeleteOperation(apiVersion, kind, namespace, name, options...))
}
// MergePatch applies a merge patch to the specified object using API call Patch.
//
// Options:
// - WithSubresource — a subresource argument for Patch call.
// - IgnoreMissingObject — do not return error if the specified object is missing.
func (dop *PatchCollector) MergePatch(mergePatch interface{}, apiVersion, kind, namespace, name string, options ...PatchOption) {
dop.add(NewMergePatchOperation(mergePatch, apiVersion, kind, namespace, name, options...))
}
// JSONPatch applies a json patch to the specified object using API call Patch.
//
// Options:
// - WithSubresource — a subresource argument for Patch call.
// - IgnoreMissingObject — do not return error if the specified object is missing.
func (dop *PatchCollector) JSONPatch(jsonPatch interface{}, apiVersion, kind, namespace, name string, options ...PatchOption) {
dop.add(NewJSONPatchOperation(jsonPatch, apiVersion, kind, namespace, name, options...))
}
// Filter retrieves a specified object, modified it with
// filterFunc and calls update.
//
// Options:
// - WithSubresource — a subresource argument for Patch call.
// - IgnoreMissingObject — do not return error if the specified object is missing.
//
// Note: do not modify and return argument in filterFunc,
// use FromUnstructured to instantiate a concrete type or modify after DeepCopy.
func (dop *PatchCollector) Filter(
filterFunc func(*unstructured.Unstructured) (*unstructured.Unstructured, error),
apiVersion, kind, namespace, name string, options ...FilterOption,
) {
dop.add(NewFilterPatchOperation(filterFunc, apiVersion, kind, namespace, name, options...))
}
// Operations returns all collected operations
func (dop *PatchCollector) Operations() []Operation {
return dop.patchOperations
}
func (dop *PatchCollector) add(operation Operation) {
dop.patchOperations = append(dop.patchOperations, operation)
}