diff --git a/changelog.d/20682_consistent_annotation_suppression.fix.md b/changelog.d/20682_consistent_annotation_suppression.fix.md new file mode 100644 index 0000000000000..2fe545e56991a --- /dev/null +++ b/changelog.d/20682_consistent_annotation_suppression.fix.md @@ -0,0 +1,3 @@ +Fixes an issue where annotation suppression failed when `log_namespace` was set to `true` in kubernetes_logs. + +authors: ifuryst diff --git a/lib/vector-core/src/config/mod.rs b/lib/vector-core/src/config/mod.rs index 985f994c1813a..ce4bf6f237702 100644 --- a/lib/vector-core/src/config/mod.rs +++ b/lib/vector-core/src/config/mod.rs @@ -427,11 +427,14 @@ impl LogNamespace { value: impl Into, ) { match self { - LogNamespace::Vector => { - log.metadata_mut() - .value_mut() - .insert(path!(source_name).concat(metadata_key), value); - } + LogNamespace::Vector => match legacy_key { + None => { /* don't insert */ } + _ => { + log.metadata_mut() + .value_mut() + .insert(path!(source_name).concat(metadata_key), value); + } + }, LogNamespace::Legacy => match legacy_key { None => { /* don't insert */ } Some(LegacyKey::Overwrite(key)) => { diff --git a/src/sources/kubernetes_logs/pod_metadata_annotator.rs b/src/sources/kubernetes_logs/pod_metadata_annotator.rs index 1cb8ca5728b40..05df9b3a044b7 100644 --- a/src/sources/kubernetes_logs/pod_metadata_annotator.rs +++ b/src/sources/kubernetes_logs/pod_metadata_annotator.rs @@ -990,6 +990,64 @@ mod tests { } } + #[test] + fn test_suppress_annotation_fields() { + let cases = vec![ + ( + FieldsSpec { + container_id: OptionalTargetPath::none(), + ..FieldsSpec::default() + }, + ContainerStatus { + container_id: Some("container_id_foo".to_owned()), + image_id: "test_image_id".to_owned(), + ..ContainerStatus::default() + }, + { + let mut log = LogEvent::default(); + log.insert( + event_path!("kubernetes", "container_image_id"), + "test_image_id", + ); + log + }, + LogNamespace::Legacy, + ), + ( + FieldsSpec { + container_id: OptionalTargetPath::none(), + ..FieldsSpec::default() + }, + ContainerStatus { + container_id: Some("container_id_foo".to_owned()), + image_id: "test_image_id".to_owned(), + ..ContainerStatus::default() + }, + { + let mut log = LogEvent::default(); + log.insert( + metadata_path!("kubernetes_logs", "container_image_id"), + "test_image_id", + ); + log + }, + LogNamespace::Vector, + ), + ]; + for (fields_spec, container_status, expected, log_namespace) in cases.into_iter() { + let mut log = LogEvent::default(); + annotate_from_container_status( + &mut log, + &fields_spec, + &container_status, + log_namespace, + ); + println!("{:?}", log); + println!("{:?}", expected); + assert_eq!(log, expected); + } + } + #[test] fn test_annotate_from_container() { let cases = vec![