func getLabelsFromPod()

in event-exporter/kubernetes/podlabels/cache_collector.go [122:160]


func getLabelsFromPod(pod *corev1.Pod) map[string]string {
	transformedLabels := map[string]string{}
	for _, owner := range pod.GetObjectMeta().GetOwnerReferences() {
		switch owner.Kind {
		case "DaemonSet":
			transformedLabels[ownerTypeKeyName] = "DaemonSet"
			transformedLabels[ownerNameKeyName] = owner.Name
		case "StatefulSet":
			transformedLabels[ownerTypeKeyName] = "StatefulSet"
			transformedLabels[ownerNameKeyName] = owner.Name
		case "ReplicaSet":
			// Pod that is eventually owned by Deployment has pod name:
			// <DeploymentName>-<PodTemplateHash>-<RandomString>
			// and owner replicaset name: <DeploymentName>-<PodTemplateHash>
			if templateHashSuffix := "-" + pod.GetObjectMeta().GetLabels()["pod-template-hash"]; len(templateHashSuffix) > 1 {
				if ownerName, ok := strings.CutSuffix(owner.Name, templateHashSuffix); ok {
					transformedLabels[ownerTypeKeyName] = "Deployment"
					transformedLabels[ownerNameKeyName] = ownerName
				}
			}
		case "Job":
			if ownerName, ok := stripUnixTimeSuffix(owner.Name); ok {
				// Pod that is eventually owned by a CronJob has pod name:
				// <CronJobName>-<UnixTimeInMin>-<RandomString>
				// and owner job name: <CronJobName>-<UnixTimeInMin>
				transformedLabels[ownerTypeKeyName] = "CronJob"
				transformedLabels[ownerNameKeyName] = ownerName
			} else if jobsetName := pod.GetObjectMeta().GetLabels()[jobSetNameLabelKey]; jobsetName != "" {
				// Pod that is eventually owned by a JobSet has the jobset name label set.
				transformedLabels[ownerTypeKeyName] = "JobSet"
				transformedLabels[ownerNameKeyName] = jobsetName
			} else {
				transformedLabels[ownerTypeKeyName] = "Job"
				transformedLabels[ownerNameKeyName] = owner.Name
			}
		}
	}
	return transformedLabels
}