mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 13:37:30 +00:00
Merge pull request #62214 from soltysh/remove_factory_duplication
Automatic merge from submit-queue (batch tested with PRs 62208, 62114, 62144, 60460, 62214). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Get namespace and selectors for attach and logs in a common function **Special notes for your reviewer**: I've squashed the two places we need to update to be able to get selector and namespace for resource when getting logs or attaching to it. /assign @juanvallejo @deads2k **Release note**: ```release-note NONE ```
This commit is contained in:
commit
ee8c6d99b6
@ -224,55 +224,15 @@ func (f *ring1Factory) LogsForObject(object, options runtime.Object, timeout tim
|
|||||||
return nil, errors.New("provided options object is not a PodLogOptions")
|
return nil, errors.New("provided options object is not a PodLogOptions")
|
||||||
}
|
}
|
||||||
|
|
||||||
var selector labels.Selector
|
|
||||||
var namespace string
|
|
||||||
switch t := object.(type) {
|
switch t := object.(type) {
|
||||||
case *api.Pod:
|
case *api.Pod:
|
||||||
return clientset.Core().Pods(t.Namespace).GetLogs(t.Name, opts), nil
|
return clientset.Core().Pods(t.Namespace).GetLogs(t.Name, opts), nil
|
||||||
|
}
|
||||||
|
|
||||||
case *api.ReplicationController:
|
namespace, selector, err := selectorsForObject(object)
|
||||||
namespace = t.Namespace
|
|
||||||
selector = labels.SelectorFromSet(t.Spec.Selector)
|
|
||||||
|
|
||||||
case *extensions.ReplicaSet:
|
|
||||||
namespace = t.Namespace
|
|
||||||
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("invalid label selector: %v", err)
|
return nil, fmt.Errorf("cannot get the logs from %T: %v", object, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
case *extensions.Deployment:
|
|
||||||
namespace = t.Namespace
|
|
||||||
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("invalid label selector: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
case *extensions.DaemonSet:
|
|
||||||
namespace = t.Namespace
|
|
||||||
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("invalid label selector: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
case *batch.Job:
|
|
||||||
namespace = t.Namespace
|
|
||||||
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("invalid label selector: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
case *apps.StatefulSet:
|
|
||||||
namespace = t.Namespace
|
|
||||||
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("invalid label selector: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
return nil, fmt.Errorf("cannot get the logs from %T", object)
|
|
||||||
}
|
|
||||||
|
|
||||||
sortBy := func(pods []*v1.Pod) sort.Interface { return controller.ByLogging(pods) }
|
sortBy := func(pods []*v1.Pod) sort.Interface { return controller.ByLogging(pods) }
|
||||||
pod, numPods, err := GetFirstPod(clientset.Core(), namespace, selector.String(), timeout, sortBy)
|
pod, numPods, err := GetFirstPod(clientset.Core(), namespace, selector.String(), timeout, sortBy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -284,6 +244,61 @@ func (f *ring1Factory) LogsForObject(object, options runtime.Object, timeout tim
|
|||||||
return clientset.Core().Pods(pod.Namespace).GetLogs(pod.Name, opts), nil
|
return clientset.Core().Pods(pod.Namespace).GetLogs(pod.Name, opts), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func selectorsForObject(object runtime.Object) (namespace string, selector labels.Selector, err error) {
|
||||||
|
switch t := object.(type) {
|
||||||
|
case *extensions.ReplicaSet:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
case *api.ReplicationController:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector = labels.SelectorFromSet(t.Spec.Selector)
|
||||||
|
|
||||||
|
case *apps.StatefulSet:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
case *extensions.DaemonSet:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
case *extensions.Deployment:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
case *batch.Job:
|
||||||
|
namespace = t.Namespace
|
||||||
|
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("invalid label selector: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
case *api.Service:
|
||||||
|
namespace = t.Namespace
|
||||||
|
if t.Spec.Selector == nil || len(t.Spec.Selector) == 0 {
|
||||||
|
return "", nil, fmt.Errorf("invalid service '%s': Service is defined without a selector", t.Name)
|
||||||
|
}
|
||||||
|
selector = labels.SelectorFromSet(t.Spec.Selector)
|
||||||
|
|
||||||
|
default:
|
||||||
|
return "", nil, fmt.Errorf("selector for %T not implemented", object)
|
||||||
|
}
|
||||||
|
|
||||||
|
return namespace, selector, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (f *ring1Factory) HistoryViewer(mapping *meta.RESTMapping) (kubectl.HistoryViewer, error) {
|
func (f *ring1Factory) HistoryViewer(mapping *meta.RESTMapping) (kubectl.HistoryViewer, error) {
|
||||||
external, err := f.clientAccessFactory.KubernetesClientSet()
|
external, err := f.clientAccessFactory.KubernetesClientSet()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -335,58 +350,16 @@ func (f *ring1Factory) AttachablePodForObject(object runtime.Object, timeout tim
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var selector labels.Selector
|
|
||||||
var namespace string
|
|
||||||
switch t := object.(type) {
|
switch t := object.(type) {
|
||||||
case *extensions.ReplicaSet:
|
|
||||||
namespace = t.Namespace
|
|
||||||
selector = labels.SelectorFromSet(t.Spec.Selector.MatchLabels)
|
|
||||||
|
|
||||||
case *api.ReplicationController:
|
|
||||||
namespace = t.Namespace
|
|
||||||
selector = labels.SelectorFromSet(t.Spec.Selector)
|
|
||||||
|
|
||||||
case *apps.StatefulSet:
|
|
||||||
namespace = t.Namespace
|
|
||||||
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("invalid label selector: %v", err)
|
|
||||||
}
|
|
||||||
case *extensions.DaemonSet:
|
|
||||||
namespace = t.Namespace
|
|
||||||
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("invalid label selector: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
case *extensions.Deployment:
|
|
||||||
namespace = t.Namespace
|
|
||||||
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("invalid label selector: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
case *batch.Job:
|
|
||||||
namespace = t.Namespace
|
|
||||||
selector, err = metav1.LabelSelectorAsSelector(t.Spec.Selector)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("invalid label selector: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
case *api.Service:
|
|
||||||
namespace = t.Namespace
|
|
||||||
if t.Spec.Selector == nil || len(t.Spec.Selector) == 0 {
|
|
||||||
return nil, fmt.Errorf("invalid service '%s': Service is defined without a selector", t.Name)
|
|
||||||
}
|
|
||||||
selector = labels.SelectorFromSet(t.Spec.Selector)
|
|
||||||
|
|
||||||
case *api.Pod:
|
case *api.Pod:
|
||||||
return t, nil
|
return t, nil
|
||||||
|
|
||||||
default:
|
|
||||||
return nil, fmt.Errorf("cannot attach to %T: not implemented", object)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace, selector, err := selectorsForObject(object)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("cannot attach to %T: %v", object, err)
|
||||||
|
}
|
||||||
sortBy := func(pods []*v1.Pod) sort.Interface { return sort.Reverse(controller.ActivePods(pods)) }
|
sortBy := func(pods []*v1.Pod) sort.Interface { return sort.Reverse(controller.ActivePods(pods)) }
|
||||||
pod, _, err := GetFirstPod(clientset.Core(), namespace, selector.String(), timeout, sortBy)
|
pod, _, err := GetFirstPod(clientset.Core(), namespace, selector.String(), timeout, sortBy)
|
||||||
return pod, err
|
return pod, err
|
||||||
|
Loading…
Reference in New Issue
Block a user