mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-01-04 23:17:50 +00:00
the garbage collector controller
This commit is contained in:
@@ -17,6 +17,11 @@ limitations under the License.
|
||||
package runtime
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/golang/glog"
|
||||
|
||||
"k8s.io/kubernetes/pkg/api/meta/metatypes"
|
||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||
"k8s.io/kubernetes/pkg/types"
|
||||
)
|
||||
@@ -196,6 +201,71 @@ func (u *Unstructured) setNestedMap(value map[string]string, fields ...string) {
|
||||
setNestedMap(u.Object, value, fields...)
|
||||
}
|
||||
|
||||
func extractOwnerReference(src interface{}) metatypes.OwnerReference {
|
||||
v := src.(map[string]interface{})
|
||||
return metatypes.OwnerReference{
|
||||
Kind: getNestedString(v, "kind"),
|
||||
Name: getNestedString(v, "name"),
|
||||
APIVersion: getNestedString(v, "apiVersion"),
|
||||
UID: (types.UID)(getNestedString(v, "uid")),
|
||||
}
|
||||
}
|
||||
|
||||
func setOwnerReference(src metatypes.OwnerReference) map[string]interface{} {
|
||||
ret := make(map[string]interface{})
|
||||
setNestedField(ret, src.Kind, "kind")
|
||||
setNestedField(ret, src.Name, "name")
|
||||
setNestedField(ret, src.APIVersion, "apiVersion")
|
||||
setNestedField(ret, string(src.UID), "uid")
|
||||
return ret
|
||||
}
|
||||
|
||||
func getOwnerReferences(object map[string]interface{}) ([]map[string]interface{}, error) {
|
||||
field := getNestedField(object, "metadata", "ownerReferences")
|
||||
if field == nil {
|
||||
return nil, fmt.Errorf("cannot find field metadata.ownerReferences in %v", object)
|
||||
}
|
||||
ownerReferences, ok := field.([]map[string]interface{})
|
||||
if ok {
|
||||
return ownerReferences, nil
|
||||
}
|
||||
// TODO: This is hacky...
|
||||
interfaces, ok := field.([]interface{})
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("expect metadata.ownerReferences to be a slice in %#v", object)
|
||||
}
|
||||
ownerReferences = make([]map[string]interface{}, 0, len(interfaces))
|
||||
for i := 0; i < len(interfaces); i++ {
|
||||
r, ok := interfaces[i].(map[string]interface{})
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("expect element metadata.ownerReferences to be a map[string]interface{} in %#v", object)
|
||||
}
|
||||
ownerReferences = append(ownerReferences, r)
|
||||
}
|
||||
return ownerReferences, nil
|
||||
}
|
||||
|
||||
func (u *Unstructured) GetOwnerReferences() []metatypes.OwnerReference {
|
||||
original, err := getOwnerReferences(u.Object)
|
||||
if err != nil {
|
||||
glog.V(6).Info(err)
|
||||
return nil
|
||||
}
|
||||
ret := make([]metatypes.OwnerReference, 0, len(original))
|
||||
for i := 0; i < len(original); i++ {
|
||||
ret = append(ret, extractOwnerReference(original[i]))
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func (u *Unstructured) SetOwnerReferences(references []metatypes.OwnerReference) {
|
||||
var newReferences = make([]map[string]interface{}, 0, len(references))
|
||||
for i := 0; i < len(references); i++ {
|
||||
newReferences = append(newReferences, setOwnerReference(references[i]))
|
||||
}
|
||||
u.setNestedField(newReferences, "metadata", "ownerReferences")
|
||||
}
|
||||
|
||||
func (u *Unstructured) GetAPIVersion() string {
|
||||
return getNestedString(u.Object, "apiVersion")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user