diff --git a/pkg/collect/configmap.go b/pkg/collect/configmap.go index 1161ce8f..20e6e7ff 100644 --- a/pkg/collect/configmap.go +++ b/pkg/collect/configmap.go @@ -10,11 +10,13 @@ import ( "github.com/pkg/errors" troubleshootv1beta2 "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta2" + "github.com/replicatedhq/troubleshoot/pkg/k8sutil" corev1 "k8s.io/api/core/v1" kuberneteserrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" + "k8s.io/klog/v2" ) type ConfigMapOutput struct { @@ -49,8 +51,20 @@ func (c *CollectConfigMap) Collect(progressChan chan<- interface{}) (CollectorRe output := NewResult() configMaps := []corev1.ConfigMap{} + namespace := c.Collector.Namespace + if c.Collector.Name != "" { - configMap, err := c.Client.CoreV1().ConfigMaps(c.Collector.Namespace).Get(c.Context, c.Collector.Name, metav1.GetOptions{}) + if namespace == "" { + kubeconfig := k8sutil.GetKubeconfig() + ns, _, err := kubeconfig.Namespace() + klog.V(2).Infof("no namespace was set for configmap '%s': using namespace '%s' from current kubeconfig context", c.Collector.Name, ns) + if err != nil { + return nil, errors.Wrapf(err, "a namespace was not specified for configmap '%s' and could not be discovered from kubeconfig", c.Collector.Name) + } + namespace = ns + } + klog.V(1).Infof("looking for configmap '%s' in namespace '%s'", c.Collector.Name, namespace) + configMap, err := c.Client.CoreV1().ConfigMaps(namespace).Get(c.Context, c.Collector.Name, metav1.GetOptions{}) if err != nil { if kuberneteserrors.IsNotFound(err) { filePath, encoded, err := configMapToOutput(c.Collector, nil, c.Collector.Name) diff --git a/testdata/supportbundle/configmaps.yaml b/testdata/supportbundle/configmaps.yaml new file mode 100644 index 00000000..fb8e09d9 --- /dev/null +++ b/testdata/supportbundle/configmaps.yaml @@ -0,0 +1,21 @@ +apiVersion: troubleshoot.sh/v1beta2 +kind: SupportBundle +metadata: + name: example-collect-all-configmap-data +spec: + collectors: + - configMap: + name: kube-root-ca.crt + # expected in default namespace + - configMap: + name: cluster-info + # missing namespace parameter + - configMap: + name: does-not-exist + - configMap: + selector: + - app=kube-proxy + # only selector set + - configMap: + name: coredns + namespace: kube-system