From 69afa4933792beb0cef43758a252534be6a89147 Mon Sep 17 00:00:00 2001 From: Ivan Josipovic <9521987+IvanJosipovic@users.noreply.github.com> Date: Wed, 27 Aug 2025 15:15:16 -0700 Subject: [PATCH] fix: yaml ByteArrayStringYamlConverter output new lines (#1651) * fix: yaml byte[] output * chore: fix styling * chore: fix logic for single line values and add test --- src/KubernetesClient/KubernetesYaml.cs | 13 +++++++++- .../KubernetesYamlTests.cs | 24 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/KubernetesClient/KubernetesYaml.cs b/src/KubernetesClient/KubernetesYaml.cs index 7f677a3f2..e7134daa5 100644 --- a/src/KubernetesClient/KubernetesYaml.cs +++ b/src/KubernetesClient/KubernetesYaml.cs @@ -92,7 +92,18 @@ public object ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeseria public void WriteYaml(IEmitter emitter, object value, Type type, ObjectSerializer serializer) { var obj = (byte[])value; - emitter?.Emit(new Scalar(Encoding.UTF8.GetString(obj))); + var strValue = Encoding.UTF8.GetString(obj); + + // Check if the string is multi-line by looking for a newline character. + var scalarStyle = strValue.Contains('\n') ? ScalarStyle.Literal : ScalarStyle.Any; + + emitter.Emit(new Scalar( + AnchorName.Empty, + TagName.Empty, + strValue, + scalarStyle, + true, + true)); } } diff --git a/tests/KubernetesClient.Tests/KubernetesYamlTests.cs b/tests/KubernetesClient.Tests/KubernetesYamlTests.cs index 9f14f73af..29c3b0d53 100644 --- a/tests/KubernetesClient.Tests/KubernetesYamlTests.cs +++ b/tests/KubernetesClient.Tests/KubernetesYamlTests.cs @@ -817,6 +817,30 @@ public void LoadSecret() Assert.Equal("Mzk1MjgkdmRnN0pi", Encoding.UTF8.GetString(result.Data["password"])); } + [Fact] + public void WriteSecret() + { + var kManifest = """ +apiVersion: v1 +data: + username: bXktYXBw + tls2.crt: | + -----BEGIN CERTIFICATE----- + FAKE CERT + FAKE CERT + FAKE CERT + -----END CERTIFICATE----- +kind: Secret +metadata: + name: test-secret +"""; + + var result = KubernetesYaml.Deserialize(kManifest, true); + var yaml = KubernetesYaml.Serialize(result); + + Assert.Equal(kManifest, yaml); + } + [Fact] public void DeserializeWithJsonPropertyName() {