add patch and replace to generic (#1040)
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
using k8s.Models;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
@@ -86,6 +87,34 @@ namespace k8s
|
|||||||
return KubernetesJson.Deserialize<T>(resp.Body.ToString());
|
return KubernetesJson.Deserialize<T>(resp.Body.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<T> PatchAsync<T>(V1Patch patch, string name, CancellationToken cancel = default)
|
||||||
|
where T : IKubernetesObject
|
||||||
|
{
|
||||||
|
var resp = await kubernetes.CustomObjects.PatchClusterCustomObjectWithHttpMessagesAsync(patch, group, version, plural, name, cancellationToken: cancel).ConfigureAwait(false);
|
||||||
|
return KubernetesJson.Deserialize<T>(resp.Body.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<T> PatchNamespacedAsync<T>(V1Patch patch, string ns, string name, CancellationToken cancel = default)
|
||||||
|
where T : IKubernetesObject
|
||||||
|
{
|
||||||
|
var resp = await kubernetes.CustomObjects.PatchNamespacedCustomObjectWithHttpMessagesAsync(patch, group, version, ns, plural, name, cancellationToken: cancel).ConfigureAwait(false);
|
||||||
|
return KubernetesJson.Deserialize<T>(resp.Body.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<T> ReplaceAsync<T>(T obj, string name, CancellationToken cancel = default)
|
||||||
|
where T : IKubernetesObject
|
||||||
|
{
|
||||||
|
var resp = await kubernetes.CustomObjects.ReplaceClusterCustomObjectWithHttpMessagesAsync(obj, group, version, plural, name, cancellationToken: cancel).ConfigureAwait(false);
|
||||||
|
return KubernetesJson.Deserialize<T>(resp.Body.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<T> ReplaceNamespacedAsync<T>(T obj, string ns, string name, CancellationToken cancel = default)
|
||||||
|
where T : IKubernetesObject
|
||||||
|
{
|
||||||
|
var resp = await kubernetes.CustomObjects.ReplaceNamespacedCustomObjectWithHttpMessagesAsync(obj, group, version, ns, plural, name, cancellationToken: cancel).ConfigureAwait(false);
|
||||||
|
return KubernetesJson.Deserialize<T>(resp.Body.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
Dispose(true);
|
Dispose(true);
|
||||||
|
|||||||
@@ -504,10 +504,12 @@ namespace k8s.E2E
|
|||||||
{
|
{
|
||||||
Cleanup();
|
Cleanup();
|
||||||
|
|
||||||
|
// create + list
|
||||||
|
{
|
||||||
await genericPods.CreateNamespacedAsync(
|
await genericPods.CreateNamespacedAsync(
|
||||||
new V1Pod()
|
new V1Pod()
|
||||||
{
|
{
|
||||||
Metadata = new V1ObjectMeta { Name = podName, },
|
Metadata = new V1ObjectMeta { Name = podName, Labels = new Dictionary<string, string> { { "place", "holder" }, }, },
|
||||||
Spec = new V1PodSpec
|
Spec = new V1PodSpec
|
||||||
{
|
{
|
||||||
Containers = new[] { new V1Container() { Name = "k8scsharp-e2e", Image = "nginx", }, },
|
Containers = new[] { new V1Container() { Name = "k8scsharp-e2e", Image = "nginx", }, },
|
||||||
@@ -517,7 +519,37 @@ namespace k8s.E2E
|
|||||||
|
|
||||||
var pods = await genericPods.ListNamespacedAsync<V1PodList>(namespaceParameter).ConfigureAwait(false);
|
var pods = await genericPods.ListNamespacedAsync<V1PodList>(namespaceParameter).ConfigureAwait(false);
|
||||||
Assert.Contains(pods.Items, p => p.Metadata.Name == podName);
|
Assert.Contains(pods.Items, p => p.Metadata.Name == podName);
|
||||||
|
}
|
||||||
|
|
||||||
|
// replace + get
|
||||||
|
{
|
||||||
|
var pod = await genericPods.ReadNamespacedAsync<V1Pod>(namespaceParameter, podName).ConfigureAwait(false);
|
||||||
|
var old = JsonSerializer.SerializeToDocument(pod);
|
||||||
|
|
||||||
|
var newlabels = new Dictionary<string, string>(pod.Metadata.Labels) { ["test"] = "generic-test-jsonpatch" };
|
||||||
|
pod.Metadata.Labels = newlabels;
|
||||||
|
|
||||||
|
var expected = JsonSerializer.SerializeToDocument(pod);
|
||||||
|
var patch = old.CreatePatch(expected);
|
||||||
|
|
||||||
|
await genericPods.PatchNamespacedAsync<V1Pod>(new V1Patch(patch, V1Patch.PatchType.JsonPatch), namespaceParameter, podName).ConfigureAwait(false);
|
||||||
|
var pods = await genericPods.ListNamespacedAsync<V1PodList>(namespaceParameter).ConfigureAwait(false);
|
||||||
|
Assert.Contains(pods.Items, p => p.Labels().Contains(new KeyValuePair<string, string>("test", "generic-test-jsonpatch")));
|
||||||
|
}
|
||||||
|
|
||||||
|
// replace + get
|
||||||
|
{
|
||||||
|
var pod = await genericPods.ReadNamespacedAsync<V1Pod>(namespaceParameter, podName).ConfigureAwait(false);
|
||||||
|
pod.Spec.Containers[0].Image = "httpd";
|
||||||
|
await genericPods.ReplaceNamespacedAsync(pod, namespaceParameter, podName).ConfigureAwait(false);
|
||||||
|
|
||||||
|
pod = await genericPods.ReadNamespacedAsync<V1Pod>(namespaceParameter, podName).ConfigureAwait(false);
|
||||||
|
Assert.Equal("httpd", pod.Spec.Containers[0].Image);
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete + list
|
||||||
|
{
|
||||||
|
V1PodList pods = new V1PodList();
|
||||||
int retry = 5;
|
int retry = 5;
|
||||||
while (retry-- > 0)
|
while (retry-- > 0)
|
||||||
{
|
{
|
||||||
@@ -544,6 +576,7 @@ namespace k8s.E2E
|
|||||||
|
|
||||||
Assert.DoesNotContain(pods.Items, p => p.Metadata.Name == podName);
|
Assert.DoesNotContain(pods.Items, p => p.Metadata.Name == podName);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
Cleanup();
|
Cleanup();
|
||||||
|
|||||||
Reference in New Issue
Block a user