From c3b3a08b316e46b93be016da4e17dbde99e5d64b Mon Sep 17 00:00:00 2001 From: Hugo Woodiwiss Date: Tue, 5 Nov 2024 05:51:29 +0000 Subject: [PATCH] Enable JSON Patch in AOT (#1588) * Special case serialization of V1Patch * Add AOT JSON Patch Example --- examples/patch-aot/Program.cs | 32 ++++++++++++++++++++++ examples/patch-aot/patch-aot.csproj | 11 ++++++++ src/KubernetesClient.Aot/KubernetesJson.cs | 5 ++++ 3 files changed, 48 insertions(+) create mode 100644 examples/patch-aot/Program.cs create mode 100644 examples/patch-aot/patch-aot.csproj diff --git a/examples/patch-aot/Program.cs b/examples/patch-aot/Program.cs new file mode 100644 index 0000000..06a693d --- /dev/null +++ b/examples/patch-aot/Program.cs @@ -0,0 +1,32 @@ +using k8s; +using k8s.Models; + +var config = KubernetesClientConfiguration.BuildConfigFromConfigFile(); +IKubernetes client = new Kubernetes(config); +Console.WriteLine("Starting Request!"); + +var pod = client.CoreV1.ListNamespacedPod("default").Items.First(); +var name = pod.Metadata.Name; +PrintLabels(pod); + +var patchStr = @" +{ + ""metadata"": { + ""labels"": { + ""test"": ""test"" + } + } +}"; + +client.CoreV1.PatchNamespacedPod(new V1Patch(patchStr, V1Patch.PatchType.MergePatch), name, "default"); +PrintLabels(client.CoreV1.ReadNamespacedPod(name, "default")); + +static void PrintLabels(V1Pod pod) +{ + Console.WriteLine($"Labels: for {pod.Metadata.Name}"); + foreach (var (k, v) in pod.Metadata.Labels) + { + Console.WriteLine($"{k} : {v}"); + } + Console.WriteLine("=-=-=-=-=-=-=-=-=-=-="); +} diff --git a/examples/patch-aot/patch-aot.csproj b/examples/patch-aot/patch-aot.csproj new file mode 100644 index 0000000..c2c8062 --- /dev/null +++ b/examples/patch-aot/patch-aot.csproj @@ -0,0 +1,11 @@ + + + Exe + enable + enable + true + + + + + diff --git a/src/KubernetesClient.Aot/KubernetesJson.cs b/src/KubernetesClient.Aot/KubernetesJson.cs index cfa69ec..f6285cc 100644 --- a/src/KubernetesClient.Aot/KubernetesJson.cs +++ b/src/KubernetesClient.Aot/KubernetesJson.cs @@ -91,6 +91,11 @@ namespace k8s public static string Serialize(object value, JsonSerializerOptions jsonSerializerOptions = null) { + if (value is V1Patch { Content: string jsonValue }) + { + return jsonValue; + } + var info = SourceGenerationContext.Default.GetTypeInfo(value.GetType()); return JsonSerializer.Serialize(value, info); }