mirror of https://github.com/k3s-io/k3s
67 lines
1.6 KiB
Go
67 lines
1.6 KiB
Go
package apply
|
|
|
|
import (
|
|
"bytes"
|
|
|
|
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
"k8s.io/apimachinery/pkg/util/json"
|
|
"k8s.io/client-go/dynamic"
|
|
)
|
|
|
|
var (
|
|
deletePolicy = v1.DeletePropagationBackground
|
|
)
|
|
|
|
func (o *desiredSet) toUnstructured(obj runtime.Object) (*unstructured.Unstructured, error) {
|
|
unstruct, ok := obj.(*unstructured.Unstructured)
|
|
if ok {
|
|
return unstruct, nil
|
|
}
|
|
|
|
buf := &bytes.Buffer{}
|
|
if err := json.NewEncoder(buf).Encode(obj); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
unstruct = &unstructured.Unstructured{
|
|
Object: map[string]interface{}{},
|
|
}
|
|
|
|
return unstruct, json.Unmarshal(buf.Bytes(), &unstruct.Object)
|
|
}
|
|
|
|
func (o *desiredSet) create(nsed bool, namespace string, client dynamic.NamespaceableResourceInterface, obj runtime.Object) (runtime.Object, error) {
|
|
unstr, err := o.toUnstructured(obj)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if nsed {
|
|
return client.Namespace(namespace).Create(unstr, v1.CreateOptions{})
|
|
}
|
|
return client.Create(unstr, v1.CreateOptions{})
|
|
}
|
|
|
|
func (o *desiredSet) get(nsed bool, namespace, name string, client dynamic.NamespaceableResourceInterface) (runtime.Object, error) {
|
|
if nsed {
|
|
return client.Namespace(namespace).Get(name, v1.GetOptions{})
|
|
}
|
|
return client.Get(name, v1.GetOptions{})
|
|
}
|
|
|
|
func (o *desiredSet) delete(nsed bool, namespace, name string, client dynamic.NamespaceableResourceInterface) error {
|
|
if o.noDelete {
|
|
return nil
|
|
}
|
|
opts := &v1.DeleteOptions{
|
|
PropagationPolicy: &deletePolicy,
|
|
}
|
|
if nsed {
|
|
return client.Namespace(namespace).Delete(name, opts)
|
|
}
|
|
|
|
return client.Delete(name, opts)
|
|
}
|