diff --git a/src/KubernetesClient/KubernetesYaml.cs b/src/KubernetesClient/KubernetesYaml.cs index e7134daa..84feb358 100644 --- a/src/KubernetesClient/KubernetesYaml.cs +++ b/src/KubernetesClient/KubernetesYaml.cs @@ -78,7 +78,7 @@ public object ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeseria return null; } - return Encoding.UTF8.GetBytes(scalar.Value); + return Convert.FromBase64String(scalar.Value); } finally { @@ -91,19 +91,15 @@ public object ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeseria public void WriteYaml(IEmitter emitter, object value, Type type, ObjectSerializer serializer) { + if (value == null) + { + emitter.Emit(new Scalar(string.Empty)); + return; + } + var obj = (byte[])value; - 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)); + var encoded = Convert.ToBase64String(obj); + emitter.Emit(new Scalar(encoded)); } } diff --git a/tests/KubernetesClient.Tests/KubernetesYamlTests.cs b/tests/KubernetesClient.Tests/KubernetesYamlTests.cs index 29c3b0d5..19b03fda 100644 --- a/tests/KubernetesClient.Tests/KubernetesYamlTests.cs +++ b/tests/KubernetesClient.Tests/KubernetesYamlTests.cs @@ -804,12 +804,12 @@ public void LoadSecret() { var kManifest = @" apiVersion: v1 +data: + username: YlhrdFlYQnc= + password: TXprMU1qZ2tkbVJuTjBwaQ== kind: Secret metadata: name: test-secret -data: - username: bXktYXBw - password: Mzk1MjgkdmRnN0pi "; var result = KubernetesYaml.Deserialize(kManifest, true); @@ -823,13 +823,8 @@ public void WriteSecret() var kManifest = """ apiVersion: v1 data: - username: bXktYXBw - tls2.crt: | - -----BEGIN CERTIFICATE----- - FAKE CERT - FAKE CERT - FAKE CERT - -----END CERTIFICATE----- + username: YlhrdFlYQnc= + password: TXprMU1qZ2tkbVJuTjBwaQ== kind: Secret metadata: name: test-secret @@ -841,6 +836,45 @@ FAKE CERT Assert.Equal(kManifest, yaml); } + [Fact] + public void LoadConfigMap() + { + var kManifest = @" +apiVersion: v1 +binaryData: + username: YlhrdFlYQnc= +data: + password: Mzk1MjgkdmRnN0pi +kind: ConfigMap +metadata: + name: test-configmap +"; + + var result = KubernetesYaml.Deserialize(kManifest, true); + Assert.Equal("bXktYXBw", Encoding.UTF8.GetString(result.BinaryData["username"])); + Assert.Equal("Mzk1MjgkdmRnN0pi", result.Data["password"]); + } + + [Fact] + public void WriteConfigMap() + { + var kManifest = """ +apiVersion: v1 +binaryData: + username: YlhrdFlYQnc= +data: + password: Mzk1MjgkdmRnN0pi +kind: ConfigMap +metadata: + name: test-configmap +"""; + + var result = KubernetesYaml.Deserialize(kManifest, true); + var yaml = KubernetesYaml.Serialize(result); + + Assert.Equal(kManifest, yaml); + } + [Fact] public void DeserializeWithJsonPropertyName() {