/
delete.go
74 lines (69 loc) · 1.9 KB
/
delete.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
package kube
import (
"bytes"
"context"
"encoding/json"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/cli-runtime/pkg/resource"
"k8s.io/client-go/dynamic"
"k8s.io/kubectl/pkg/cmd/delete"
"k8s.io/kubectl/pkg/cmd/util"
)
type DeleteOpts struct {
Force bool
WaitForDeletion bool
IgnoreNotFound bool
GracePeriod int
}
func (k *Kubectl) DeleteResource(ctx context.Context, obj *unstructured.Unstructured, deleteOpts DeleteOpts) (string, error) {
objBytes, err := json.Marshal(obj)
if err != nil {
return "", err
}
ioStreams := genericclioptions.IOStreams{
In: &bytes.Buffer{},
Out: &bytes.Buffer{},
ErrOut: &bytes.Buffer{},
}
path, err := writeFile(objBytes)
if err != nil {
return "", err
}
defer deleteFile(path)
dcmd := delete.NewCmdDelete(k.fact, ioStreams)
kubeDeleteOpts, err := k.newDeleteOptions(ioStreams, obj, path, deleteOpts)
if err != nil {
return "", err
}
err = kubeDeleteOpts.Complete(k.fact,[]string{}, dcmd)
if err != nil {
return "", err
}
err = kubeDeleteOpts.RunDelete(k.fact)
if err != nil {
return "", err
}
return "", nil
}
func (k *Kubectl) newDeleteOptions(ioStreams genericclioptions.IOStreams, obj *unstructured.Unstructured, path string, deleteOpts DeleteOpts) (*delete.DeleteOptions, error){
o := &delete.DeleteOptions{
FilenameOptions: resource.FilenameOptions{
Filenames: []string{path},
},
IgnoreNotFound: deleteOpts.IgnoreNotFound,
WaitForDeletion: deleteOpts.WaitForDeletion,
GracePeriod: deleteOpts.GracePeriod,
Output: "name",
IOStreams: ioStreams,
CascadingStrategy: metav1.DeletePropagationBackground,
}
dynamicClient, err := dynamic.NewForConfig(k.config)
if err != nil {
return nil, err
}
o.DynamicClient = dynamicClient
o.DryRunStrategy = util.DryRunNone
return o,nil
}