diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 8d1b00b099cb..deef20980b58 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -185,6 +185,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Omit full index template from errors that occur while loading the template. {pull}25743[25743] - In the script processor, the `decode_xml` and `decode_xml_wineventlog` processors are now available as `DecodeXML` and `DecodeXMLWineventlog` respectively. - Fix encoding errors when using the disk queue on nested data with multi-byte characters {pull}26484[26484] +- Preserve annotations in a kubernetes namespace metadata {pull}27045[27045] *Auditbeat* diff --git a/libbeat/common/kubernetes/metadata/namespace.go b/libbeat/common/kubernetes/metadata/namespace.go index fd707a4ed819..697f6b599f83 100644 --- a/libbeat/common/kubernetes/metadata/namespace.go +++ b/libbeat/common/kubernetes/metadata/namespace.go @@ -114,15 +114,17 @@ func flattenMetadata(in common.MapStr) common.MapStr { } } - rawLabels, err := in.GetValue("labels") - if err != nil { - return out - } - labels, ok := rawLabels.(common.MapStr) - if !ok { - return out + populateFromKeys := []string{"labels", "annotations"} + for _, key := range populateFromKeys { + rawValues, err := in.GetValue(key) + if err != nil { + continue + } + values, ok := rawValues.(common.MapStr) + if ok { + out[resource+"_"+key] = values + } } - out[resource+"_labels"] = labels return out } diff --git a/libbeat/common/kubernetes/metadata/namespace_test.go b/libbeat/common/kubernetes/metadata/namespace_test.go index 3e009359eb87..50b52f086d14 100644 --- a/libbeat/common/kubernetes/metadata/namespace_test.go +++ b/libbeat/common/kubernetes/metadata/namespace_test.go @@ -52,7 +52,9 @@ func TestNamespace_Generate(t *testing.T) { Labels: map[string]string{ "foo": "bar", }, - Annotations: map[string]string{}, + Annotations: map[string]string{ + "spam": "baz", + }, }, TypeMeta: metav1.TypeMeta{ Kind: "Namespace", @@ -78,11 +80,20 @@ func TestNamespace_Generate(t *testing.T) { "namespace_labels": common.MapStr{ "foo": "bar", }, + "namespace_annotations": common.MapStr{ + "spam": "baz", + }, }}, }, } - cfg := common.NewConfig() + cfg, err := common.NewConfigFrom(Config{ + IncludeAnnotations: []string{"spam"}, + }) + if err != nil { + t.Fatalf("Could not merge configs") + } + metagen := NewNamespaceMetadataGenerator(cfg, nil, client) for _, test := range tests { t.Run(test.name, func(t *testing.T) { @@ -109,7 +120,9 @@ func TestNamespace_GenerateFromName(t *testing.T) { Labels: map[string]string{ "foo": "bar", }, - Annotations: map[string]string{}, + Annotations: map[string]string{ + "spam": "baz", + }, }, TypeMeta: metav1.TypeMeta{ Kind: "Namespace", @@ -133,12 +146,21 @@ func TestNamespace_GenerateFromName(t *testing.T) { "namespace_labels": common.MapStr{ "foo": "bar", }, + "namespace_annotations": common.MapStr{ + "spam": "baz", + }, }, }, } for _, test := range tests { - cfg := common.NewConfig() + cfg, err := common.NewConfigFrom(Config{ + IncludeAnnotations: []string{"spam"}, + }) + if err != nil { + t.Fatalf("Could not merge configs") + } + namespaces := cache.NewStore(cache.MetaNamespaceKeyFunc) namespaces.Add(test.input) metagen := NewNamespaceMetadataGenerator(cfg, namespaces, client)