diff --git a/pkg/controller/replication_controller.go b/pkg/controller/replication_controller.go index c6d6cc77f5c..0fc6c2aad46 100644 --- a/pkg/controller/replication_controller.go +++ b/pkg/controller/replication_controller.go @@ -17,6 +17,7 @@ limitations under the License. package controller import ( + "encoding/json" "fmt" "sort" "sync" @@ -62,6 +63,7 @@ type RealPodControl struct { // Time period of main replication controller sync loop const DefaultSyncPeriod = 5 * time.Second +const CreatedByAnnotation = "kubernetes.io/created-by" func (r RealPodControl) createReplica(namespace string, controller api.ReplicationController) { desiredLabels := make(labels.Set) @@ -73,6 +75,20 @@ func (r RealPodControl) createReplica(namespace string, controller api.Replicati desiredAnnotations[k] = v } + createdByRef, err := api.GetReference(&controller) + if err != nil { + util.HandleError(fmt.Errorf("unable to get controller reference: %v", err)) + return + } + + createdByRefJson, err := json.Marshal(createdByRef) + if err != nil { + util.HandleError(fmt.Errorf("unable to serialize controller reference: %v", err)) + return + } + + desiredAnnotations[CreatedByAnnotation] = string(createdByRefJson) + // use the dash (if the name isn't too long) to make the pod name a bit prettier prefix := fmt.Sprintf("%s-", controller.Name) if ok, _ := validation.ValidatePodName(prefix, true); !ok { diff --git a/pkg/controller/replication_controller_test.go b/pkg/controller/replication_controller_test.go index ddfcbf6c93e..f6e6cc9cbb5 100644 --- a/pkg/controller/replication_controller_test.go +++ b/pkg/controller/replication_controller_test.go @@ -43,6 +43,10 @@ type FakePodControl struct { lock sync.Mutex } +func init() { + api.ForTesting_ReferencesAllowBlankSelfLinks = true +} + func (f *FakePodControl) createReplica(namespace string, spec api.ReplicationController) { f.lock.Lock() defer f.lock.Unlock()