// getDeploymentForPod returns the deployment managing the given Pod. func (dc *DeploymentController) getDeploymentForPod(pod *v1.Pod) *extensions.Deployment { // Find the owning replica set var rs *extensions.ReplicaSet var err error // Look at the owner reference controllerRef := controller.GetControllerOf(&pod.ObjectMeta) if controllerRef != nil { // Not a pod owned by a replica set. if controllerRef.Kind != extensions.SchemeGroupVersion.WithKind("ReplicaSet").Kind { return nil } rs, err = dc.rsLister.ReplicaSets(pod.Namespace).Get(controllerRef.Name) if err != nil { glog.V(4).Infof("Cannot get replicaset %q for pod %q: %v", controllerRef.Name, pod.Name, err) return nil } } else { // Fallback to listing replica sets. rss, err := dc.rsLister.GetPodReplicaSets(pod) if err != nil { glog.V(4).Infof("Cannot list replica sets for pod %q: %v", pod.Name, err) return nil } // TODO: Handle multiple replica sets gracefully // For now we return the oldest replica set. if len(rss) > 1 { utilruntime.HandleError(fmt.Errorf("more than one ReplicaSet is selecting pod %q with labels: %+v", pod.Name, pod.Labels)) sort.Sort(controller.ReplicaSetsByCreationTimestamp(rss)) } rs = rss[0] } return dc.getDeploymentForReplicaSet(rs) }
}) if err != nil { err = fmt.Errorf("Failed to wait to see if the garbage collecter mistakenly deletes the rs: %v", err) remainingRSs, err := rsClient.List(v1.ListOptions{}) if err != nil { framework.Failf("failed to list RSs post mortem: %v", err) } else { framework.Failf("remaining rs post mortem: %#v", remainingRSs) } remainingDSs, err := deployClient.List(v1.ListOptions{}) if err != nil { framework.Failf("failed to list Deployments post mortem: %v", err) } else { framework.Failf("remaining deployment's post mortem: %#v", remainingDSs) } } rs, err := clientSet.Extensions().ReplicaSets(f.Namespace.Name).List(v1.ListOptions{}) if err != nil { framework.Failf("Failed to list ReplicaSet %v", err) } for _, replicaSet := range rs.Items { if controller.GetControllerOf(&replicaSet.ObjectMeta) != nil { framework.Failf("Found ReplicaSet with non nil ownerRef %v", replicaSet) } } gatherMetrics(f) }) })