diff --git a/src/KubernetesClient/KubernetesYaml.cs b/src/KubernetesClient/KubernetesYaml.cs index 7f677a3f..e7134daa 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 9f14f73a..29c3b0d5 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() {