func()

in kubernetes/metadata/resource.go [101:174]


func (r *Resource) GenerateK8s(kind string, obj kubernetes.Resource, options ...FieldOptions) mapstr.M {
	accessor, err := meta.Accessor(obj)
	if err != nil {
		return nil
	}

	var labelMap mapstr.M
	if len(r.config.IncludeLabels) == 0 {
		labelMap = GenerateMap(accessor.GetLabels(), r.config.LabelsDedot)
	} else {
		labelMap = generateMapSubset(accessor.GetLabels(), r.config.IncludeLabels, r.config.LabelsDedot, r.config.UseRegexInclude)
	}

	var labelMaptoExclude mapstr.M
	if len(r.config.ExcludeLabels) != 0 {
		labelMaptoExclude = generateMapSubset(accessor.GetLabels(), r.config.ExcludeLabels, r.config.LabelsDedot, r.config.UseRegexExclude)
	}

	// Exclude any labels that are present in the exclude_labels config
	for label := range labelMaptoExclude {
		_ = labelMap.Delete(label)
	}

	annotationsMap := generateMapSubset(accessor.GetAnnotations(), r.config.IncludeAnnotations, r.config.AnnotationsDedot, r.config.UseRegexInclude)

	meta := mapstr.M{
		strings.ToLower(kind): mapstr.M{
			"name": accessor.GetName(),
			"uid":  string(accessor.GetUID()),
		},
	}

	namespaceName := accessor.GetNamespace()
	if namespaceName != "" {
		_ = safemapstr.Put(meta, "namespace", namespaceName)

		if r.namespace != nil {
			nsMeta := r.namespace.GenerateFromName(namespaceName)
			if nsMeta != nil {
				meta.DeepUpdate(nsMeta)
			}
		}
	}

	// Add controller metadata if present
	for _, ref := range accessor.GetOwnerReferences() {
		if ref.Controller != nil && *ref.Controller {
			switch ref.Kind {
			// grow this list as we keep adding more `state_*` metricsets
			case deploymentType,
				"ReplicaSet",
				"StatefulSet",
				"DaemonSet",
				"Job",
				"CronJob":
				_ = safemapstr.Put(meta, strings.ToLower(ref.Kind)+".name", ref.Name)
			}
		}
	}

	if len(labelMap) != 0 {
		_ = safemapstr.Put(meta, "labels", labelMap)
	}

	if len(annotationsMap) != 0 {
		_ = safemapstr.Put(meta, "annotations", annotationsMap)
	}

	for _, option := range options {
		option(meta)
	}

	return meta
}