From 778b1df717215f0e0a03a83b467be7f7d0e02367 Mon Sep 17 00:00:00 2001 From: gmarek Date: Fri, 20 May 2016 14:38:19 +0200 Subject: [PATCH] Add Controller to api/meta --- .../rbac.authorization.k8s.io_v1alpha1.json | 6 +++++- .../autoscaling/v1/definitions.html | 2 +- docs/api-reference/batch/v1/definitions.html | 2 +- .../extensions/v1beta1/definitions.html | 2 +- docs/api-reference/v1/definitions.html | 2 +- pkg/api/meta.go | 8 ++++++++ pkg/api/meta/meta.go | 14 ++++++++++++++ pkg/api/meta/meta_test.go | 1 + pkg/api/meta/metatypes/deep_copy_generated.go | 4 ++++ pkg/api/meta/metatypes/types.go | 1 + pkg/api/meta_test.go | 1 + pkg/api/v1/conversion_generated.go | 16 ++-------------- pkg/runtime/types.go | 16 ++++++++++++++++ pkg/runtime/unstructured_test.go | 4 ++++ 14 files changed, 60 insertions(+), 19 deletions(-) diff --git a/api/swagger-spec/rbac.authorization.k8s.io_v1alpha1.json b/api/swagger-spec/rbac.authorization.k8s.io_v1alpha1.json index 3d1aeea5582..efe783ae4a0 100644 --- a/api/swagger-spec/rbac.authorization.k8s.io_v1alpha1.json +++ b/api/swagger-spec/rbac.authorization.k8s.io_v1alpha1.json @@ -2773,7 +2773,7 @@ "items": { "$ref": "v1.OwnerReference" }, - "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected." + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller." }, "finalizers": { "type": "array", @@ -2809,6 +2809,10 @@ "uid": { "type": "string", "description": "UID of the referent. More info: http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#uids" + }, + "controller": { + "type": "boolean", + "description": "If true, this reference points to the managing controller." } } }, diff --git a/docs/api-reference/autoscaling/v1/definitions.html b/docs/api-reference/autoscaling/v1/definitions.html index a916e3749a8..733b1bc67d6 100755 --- a/docs/api-reference/autoscaling/v1/definitions.html +++ b/docs/api-reference/autoscaling/v1/definitions.html @@ -1331,4 +1331,4 @@ Last updated 2016-05-23 07:07:20 UTC - + \ No newline at end of file diff --git a/docs/api-reference/batch/v1/definitions.html b/docs/api-reference/batch/v1/definitions.html index d3f902cd8f0..18754573de4 100755 --- a/docs/api-reference/batch/v1/definitions.html +++ b/docs/api-reference/batch/v1/definitions.html @@ -4107,4 +4107,4 @@ Last updated 2016-05-24 11:53:33 UTC - + \ No newline at end of file diff --git a/docs/api-reference/extensions/v1beta1/definitions.html b/docs/api-reference/extensions/v1beta1/definitions.html index 3117e055a62..a38cf74d7ea 100755 --- a/docs/api-reference/extensions/v1beta1/definitions.html +++ b/docs/api-reference/extensions/v1beta1/definitions.html @@ -6097,4 +6097,4 @@ Last updated 2016-05-24 11:53:27 UTC - + \ No newline at end of file diff --git a/docs/api-reference/v1/definitions.html b/docs/api-reference/v1/definitions.html index bb04e148819..0974c68f55f 100755 --- a/docs/api-reference/v1/definitions.html +++ b/docs/api-reference/v1/definitions.html @@ -8002,4 +8002,4 @@ Last updated 2016-05-26 18:58:49 UTC - + \ No newline at end of file diff --git a/pkg/api/meta.go b/pkg/api/meta.go index f3f84063dd8..d715d58a116 100644 --- a/pkg/api/meta.go +++ b/pkg/api/meta.go @@ -100,6 +100,10 @@ func (meta *ObjectMeta) GetOwnerReferences() []metatypes.OwnerReference { ret[i].Name = meta.OwnerReferences[i].Name ret[i].UID = meta.OwnerReferences[i].UID ret[i].APIVersion = meta.OwnerReferences[i].APIVersion + if meta.OwnerReferences[i].Controller != nil { + value := *meta.OwnerReferences[i].Controller + ret[i].Controller = &value + } } return ret } @@ -111,6 +115,10 @@ func (meta *ObjectMeta) SetOwnerReferences(references []metatypes.OwnerReference newReferences[i].Name = references[i].Name newReferences[i].UID = references[i].UID newReferences[i].APIVersion = references[i].APIVersion + if references[i].Controller != nil { + value := *references[i].Controller + newReferences[i].Controller = &value + } } meta.OwnerReferences = newReferences } diff --git a/pkg/api/meta/meta.go b/pkg/api/meta/meta.go index b9c8d69d02c..3a3d1fc73d8 100644 --- a/pkg/api/meta/meta.go +++ b/pkg/api/meta/meta.go @@ -359,6 +359,14 @@ func extractFromOwnerReference(v reflect.Value, o *metatypes.OwnerReference) err if err := runtime.Field(v, "UID", &o.UID); err != nil { return err } + var controllerPtr *bool + if err := runtime.Field(v, "Controller", &controllerPtr); err != nil { + return err + } + if controllerPtr != nil { + controller := *controllerPtr + o.Controller = &controller + } return nil } @@ -376,6 +384,12 @@ func setOwnerReference(v reflect.Value, o *metatypes.OwnerReference) error { if err := runtime.SetField(o.UID, v, "UID"); err != nil { return err } + if o.Controller != nil { + controller := *(o.Controller) + if err := runtime.SetField(&controller, v, "Controller"); err != nil { + return err + } + } return nil } diff --git a/pkg/api/meta/meta_test.go b/pkg/api/meta/meta_test.go index 73eeffb98e2..cfcd724107f 100644 --- a/pkg/api/meta/meta_test.go +++ b/pkg/api/meta/meta_test.go @@ -781,6 +781,7 @@ func getObjectMetaAndOwnerRefereneces() (myAPIObject2 MyAPIObject2, metaOwnerRef Name: references[i].Name, UID: references[i].UID, APIVersion: references[i].APIVersion, + Controller: references[i].Controller, }) } if len(references) == 0 { diff --git a/pkg/api/meta/metatypes/deep_copy_generated.go b/pkg/api/meta/metatypes/deep_copy_generated.go index f06a194e54a..5033d2494cc 100644 --- a/pkg/api/meta/metatypes/deep_copy_generated.go +++ b/pkg/api/meta/metatypes/deep_copy_generated.go @@ -29,5 +29,9 @@ func DeepCopy_metatypes_OwnerReference(in OwnerReference, out *OwnerReference, c out.Kind = in.Kind out.UID = in.UID out.Name = in.Name + if in.Controller != nil { + value := *in.Controller + out.Controller = &value + } return nil } diff --git a/pkg/api/meta/metatypes/types.go b/pkg/api/meta/metatypes/types.go index ca4edf72e28..e7ac3e08d7f 100644 --- a/pkg/api/meta/metatypes/types.go +++ b/pkg/api/meta/metatypes/types.go @@ -26,4 +26,5 @@ type OwnerReference struct { Kind string UID types.UID Name string + Controller *bool } diff --git a/pkg/api/meta_test.go b/pkg/api/meta_test.go index cbac57e88ce..689e760e536 100644 --- a/pkg/api/meta_test.go +++ b/pkg/api/meta_test.go @@ -64,6 +64,7 @@ func getObjectMetaAndOwnerReferences() (objectMeta api.ObjectMeta, metaOwnerRefe Name: references[i].Name, UID: references[i].UID, APIVersion: references[i].APIVersion, + Controller: references[i].Controller, }) } if len(references) == 0 { diff --git a/pkg/api/v1/conversion_generated.go b/pkg/api/v1/conversion_generated.go index 6299f97eef3..9640a5edc39 100644 --- a/pkg/api/v1/conversion_generated.go +++ b/pkg/api/v1/conversion_generated.go @@ -3629,13 +3629,7 @@ func autoConvert_v1_OwnerReference_To_api_OwnerReference(in *OwnerReference, out out.Kind = in.Kind out.Name = in.Name out.UID = in.UID - if in.Controller != nil { - in, out := &in.Controller, &out.Controller - *out = new(bool) - **out = **in - } else { - out.Controller = nil - } + out.Controller = in.Controller return nil } @@ -3648,13 +3642,7 @@ func autoConvert_api_OwnerReference_To_v1_OwnerReference(in *api.OwnerReference, out.Kind = in.Kind out.Name = in.Name out.UID = in.UID - if in.Controller != nil { - in, out := &in.Controller, &out.Controller - *out = new(bool) - **out = **in - } else { - out.Controller = nil - } + out.Controller = in.Controller return nil } diff --git a/pkg/runtime/types.go b/pkg/runtime/types.go index 0c6d48afc4a..33f7c3630fa 100644 --- a/pkg/runtime/types.go +++ b/pkg/runtime/types.go @@ -231,20 +231,36 @@ func (u *Unstructured) setNestedMap(value map[string]string, fields ...string) { func extractOwnerReference(src interface{}) metatypes.OwnerReference { v := src.(map[string]interface{}) + controllerPtr, ok := (getNestedField(v, "controller")).(*bool) + if !ok { + controllerPtr = nil + } else { + if controllerPtr != nil { + controller := *controllerPtr + controllerPtr = &controller + } + } return metatypes.OwnerReference{ Kind: getNestedString(v, "kind"), Name: getNestedString(v, "name"), APIVersion: getNestedString(v, "apiVersion"), UID: (types.UID)(getNestedString(v, "uid")), + Controller: controllerPtr, } } func setOwnerReference(src metatypes.OwnerReference) map[string]interface{} { ret := make(map[string]interface{}) + controllerPtr := src.Controller + if controllerPtr != nil { + controller := *controllerPtr + controllerPtr = &controller + } setNestedField(ret, src.Kind, "kind") setNestedField(ret, src.Name, "name") setNestedField(ret, src.APIVersion, "apiVersion") setNestedField(ret, string(src.UID), "uid") + setNestedField(ret, controllerPtr, "controller") return ret } diff --git a/pkg/runtime/unstructured_test.go b/pkg/runtime/unstructured_test.go index db87f78420b..cf808185c63 100644 --- a/pkg/runtime/unstructured_test.go +++ b/pkg/runtime/unstructured_test.go @@ -236,6 +236,7 @@ func TestUnstructuredGetters(t *testing.T) { func TestUnstructuredSetters(t *testing.T) { unstruct := runtime.Unstructured{} + trueVar := true want := runtime.Unstructured{ Object: map[string]interface{}{ @@ -262,12 +263,14 @@ func TestUnstructuredSetters(t *testing.T) { "name": "poda", "apiVersion": "v1", "uid": "1", + "controller": (*bool)(nil), }, { "kind": "Pod", "name": "podb", "apiVersion": "v1", "uid": "2", + "controller": &trueVar, }, }, "finalizers": []interface{}{ @@ -303,6 +306,7 @@ func TestUnstructuredSetters(t *testing.T) { Name: "podb", APIVersion: "v1", UID: "2", + Controller: &trueVar, }, } unstruct.SetOwnerReferences(newOwnerReferences)