in internal/kubectl.go [359:399]
func (c Kubectl) Logs(namespace string, selector string, filters internal_filters.Filters, out func(string) (io.Writer, error)) error {
builder := c.factory.NewBuilder().
WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...).
NamespaceParam(namespace).
SingleResourceType().ResourceTypes("pods")
if selector != "" {
builder.LabelSelector(selector)
} else {
builder.SelectAllParam(true)
}
infos, err := builder.Do().Infos()
if err != nil {
return err
}
for i := range infos {
obj := infos[i].Object
switch t := obj.(type) {
case *corev1.PodList:
for _, p := range t.Items {
// ignore pod when filters are being applied, and the pod doesn't match the filters.
if !filters.Matches(p.Labels) {
continue
}
if err := c.requestLogs(p, out); err != nil {
return err
}
}
case *corev1.Pod:
// ignore pod when filters are being applied, and the pod doesn't match the filters.
if !filters.Matches(t.Labels) {
continue
}
if err := c.requestLogs(*t, out); err != nil {
return err
}
}
}
return nil
}