func getOperatorLabel()

in internal/diag.go [265:286]


func getOperatorLabel(kc *Kubectl, ns string) (labels.Set, error) {
	// try the most common case first pure YAML and OLM installations will have this label
	pods, err := kc.Clientset.CoreV1().Pods(ns).List(context.Background(), v1.ListOptions{LabelSelector: "control-plane=elastic-operator"})
	if err == nil && len(pods.Items) > 0 {
		return labels.Set{"control-plane": "elastic-operator"}, nil
	}
	// for Helm use the service account to be independent of Deployment or StatefulSet (even though all Helm installs should use a StatefulSet)
	saList, err := kc.Clientset.CoreV1().ServiceAccounts(ns).List(context.Background(), v1.ListOptions{})
	if err != nil {
		return nil, fmt.Errorf("while retrieving list of serviceaccounts in ns '%s': %w", ns, err)
	}
	for _, sa := range saList.Items {
		for k, v := range sa.Labels {
			if k == "helm.sh/chart" && strings.Contains(v, "eck-operator") {
				// The helm.sh/chart=eck-operator-* label isn't propagated down to sub-resources
				// so use the app.kubernetes.io/name label, which is propagated.
				return labels.Set{"app.kubernetes.io/name": sa.Labels["app.kubernetes.io/name"]}, nil
			}
		}
	}
	return nil, fmt.Errorf("unable to find any resources belonging to the eck operator")
}