2022-09-29 10:02:39 -07:00
|
|
|
using k8s.Models;
|
2020-11-23 02:59:34 -08:00
|
|
|
using System.Threading;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace k8s
|
|
|
|
|
{
|
|
|
|
|
public class GenericClient : IDisposable
|
|
|
|
|
{
|
2021-04-08 21:21:11 +03:00
|
|
|
private readonly IKubernetes kubernetes;
|
|
|
|
|
private readonly string group;
|
|
|
|
|
private readonly string version;
|
|
|
|
|
private readonly string plural;
|
2023-04-23 17:45:12 -07:00
|
|
|
private readonly bool disposeClient;
|
2020-11-23 02:59:34 -08:00
|
|
|
|
2021-09-17 08:23:01 -07:00
|
|
|
[Obsolete]
|
2020-11-23 02:59:34 -08:00
|
|
|
public GenericClient(KubernetesClientConfiguration config, string group, string version, string plural)
|
2021-09-17 08:23:01 -07:00
|
|
|
: this(new Kubernetes(config), group, version, plural)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2023-04-23 17:45:12 -07:00
|
|
|
public GenericClient(IKubernetes kubernetes, string version, string plural, bool disposeClient = true)
|
|
|
|
|
: this(kubernetes, "", version, plural, disposeClient)
|
2021-09-17 08:23:01 -07:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2023-04-23 17:45:12 -07:00
|
|
|
public GenericClient(IKubernetes kubernetes, string group, string version, string plural, bool disposeClient = true)
|
2020-11-23 02:59:34 -08:00
|
|
|
{
|
|
|
|
|
this.group = group;
|
|
|
|
|
this.version = version;
|
|
|
|
|
this.plural = plural;
|
2021-09-17 08:23:01 -07:00
|
|
|
this.kubernetes = kubernetes;
|
2023-04-23 17:45:12 -07:00
|
|
|
this.disposeClient = disposeClient;
|
2020-11-23 02:59:34 -08:00
|
|
|
}
|
|
|
|
|
|
2021-11-12 12:06:28 -08:00
|
|
|
public async Task<T> CreateAsync<T>(T obj, CancellationToken cancel = default)
|
2020-11-23 02:59:34 -08:00
|
|
|
where T : IKubernetesObject
|
|
|
|
|
{
|
2022-05-07 13:05:17 -07:00
|
|
|
var resp = await kubernetes.CustomObjects.CreateClusterCustomObjectWithHttpMessagesAsync(obj, group, version, plural, cancellationToken: cancel).ConfigureAwait(false);
|
2021-12-13 07:31:59 -08:00
|
|
|
return KubernetesJson.Deserialize<T>(resp.Body.ToString());
|
2020-11-23 02:59:34 -08:00
|
|
|
}
|
|
|
|
|
|
2021-11-12 12:06:28 -08:00
|
|
|
public async Task<T> CreateNamespacedAsync<T>(T obj, string ns, CancellationToken cancel = default)
|
2020-11-23 02:59:34 -08:00
|
|
|
where T : IKubernetesObject
|
|
|
|
|
{
|
2022-05-07 13:05:17 -07:00
|
|
|
var resp = await kubernetes.CustomObjects.CreateNamespacedCustomObjectWithHttpMessagesAsync(obj, group, version, ns, plural, cancellationToken: cancel).ConfigureAwait(false);
|
2021-12-13 07:31:59 -08:00
|
|
|
return KubernetesJson.Deserialize<T>(resp.Body.ToString());
|
2020-11-23 02:59:34 -08:00
|
|
|
}
|
|
|
|
|
|
2021-11-12 12:06:28 -08:00
|
|
|
public async Task<T> ListAsync<T>(CancellationToken cancel = default)
|
2020-11-23 02:59:34 -08:00
|
|
|
where T : IKubernetesObject
|
|
|
|
|
{
|
2022-05-07 13:05:17 -07:00
|
|
|
var resp = await kubernetes.CustomObjects.ListClusterCustomObjectWithHttpMessagesAsync(group, version, plural, cancellationToken: cancel).ConfigureAwait(false);
|
2021-12-13 07:31:59 -08:00
|
|
|
return KubernetesJson.Deserialize<T>(resp.Body.ToString());
|
2020-11-23 02:59:34 -08:00
|
|
|
}
|
|
|
|
|
|
2021-11-12 12:06:28 -08:00
|
|
|
public async Task<T> ListNamespacedAsync<T>(string ns, CancellationToken cancel = default)
|
2020-11-23 02:59:34 -08:00
|
|
|
where T : IKubernetesObject
|
|
|
|
|
{
|
2022-05-07 13:05:17 -07:00
|
|
|
var resp = await kubernetes.CustomObjects.ListNamespacedCustomObjectWithHttpMessagesAsync(group, version, ns, plural, cancellationToken: cancel).ConfigureAwait(false);
|
2021-12-13 07:31:59 -08:00
|
|
|
return KubernetesJson.Deserialize<T>(resp.Body.ToString());
|
2020-11-23 02:59:34 -08:00
|
|
|
}
|
|
|
|
|
|
2021-11-12 12:06:28 -08:00
|
|
|
public async Task<T> ReadNamespacedAsync<T>(string ns, string name, CancellationToken cancel = default)
|
2020-11-23 02:59:34 -08:00
|
|
|
where T : IKubernetesObject
|
|
|
|
|
{
|
2022-05-07 13:05:17 -07:00
|
|
|
var resp = await kubernetes.CustomObjects.GetNamespacedCustomObjectWithHttpMessagesAsync(group, version, ns, plural, name, cancellationToken: cancel).ConfigureAwait(false);
|
2021-12-13 07:31:59 -08:00
|
|
|
return KubernetesJson.Deserialize<T>(resp.Body.ToString());
|
2020-11-23 02:59:34 -08:00
|
|
|
}
|
|
|
|
|
|
2021-11-12 12:06:28 -08:00
|
|
|
public async Task<T> ReadAsync<T>(string name, CancellationToken cancel = default)
|
2020-11-23 02:59:34 -08:00
|
|
|
where T : IKubernetesObject
|
|
|
|
|
{
|
2022-05-07 13:05:17 -07:00
|
|
|
var resp = await kubernetes.CustomObjects.GetClusterCustomObjectWithHttpMessagesAsync(group, version, plural, name, cancellationToken: cancel).ConfigureAwait(false);
|
2021-12-13 07:31:59 -08:00
|
|
|
return KubernetesJson.Deserialize<T>(resp.Body.ToString());
|
2021-11-12 12:06:28 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async Task<T> DeleteAsync<T>(string name, CancellationToken cancel = default)
|
|
|
|
|
where T : IKubernetesObject
|
|
|
|
|
{
|
2022-05-07 13:05:17 -07:00
|
|
|
var resp = await kubernetes.CustomObjects.DeleteClusterCustomObjectWithHttpMessagesAsync(group, version, plural, name, cancellationToken: cancel).ConfigureAwait(false);
|
2021-12-13 07:31:59 -08:00
|
|
|
return KubernetesJson.Deserialize<T>(resp.Body.ToString());
|
2021-11-12 12:06:28 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async Task<T> DeleteNamespacedAsync<T>(string ns, string name, CancellationToken cancel = default)
|
|
|
|
|
where T : IKubernetesObject
|
|
|
|
|
{
|
2022-05-07 13:05:17 -07:00
|
|
|
var resp = await kubernetes.CustomObjects.DeleteNamespacedCustomObjectWithHttpMessagesAsync(group, version, ns, plural, name, cancellationToken: cancel).ConfigureAwait(false);
|
2021-12-13 07:31:59 -08:00
|
|
|
return KubernetesJson.Deserialize<T>(resp.Body.ToString());
|
2020-11-23 02:59:34 -08:00
|
|
|
}
|
|
|
|
|
|
2022-09-29 10:02:39 -07:00
|
|
|
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());
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-03 15:37:32 -08:00
|
|
|
public IAsyncEnumerable<(WatchEventType, T)> WatchAsync<T>(Action<Exception> onError = null, CancellationToken cancel = default)
|
|
|
|
|
where T : IKubernetesObject
|
|
|
|
|
{
|
|
|
|
|
var respTask = kubernetes.CustomObjects.ListClusterCustomObjectWithHttpMessagesAsync(group, version, plural, watch: true, cancellationToken: cancel);
|
|
|
|
|
return respTask.WatchAsync<T, object>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IAsyncEnumerable<(WatchEventType, T)> WatchNamespacedAsync<T>(string ns, Action<Exception> onError = null, CancellationToken cancel = default)
|
|
|
|
|
where T : IKubernetesObject
|
|
|
|
|
{
|
|
|
|
|
var respTask = kubernetes.CustomObjects.ListNamespacedCustomObjectWithHttpMessagesAsync(group, version, ns, plural, watch: true, cancellationToken: cancel);
|
|
|
|
|
return respTask.WatchAsync<T, object>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Watcher<T> Watch<T>(Action<WatchEventType, T> onEvent, Action<Exception> onError = null, Action onClosed = null)
|
|
|
|
|
where T : IKubernetesObject
|
|
|
|
|
{
|
|
|
|
|
var respTask = kubernetes.CustomObjects.ListClusterCustomObjectWithHttpMessagesAsync(group, version, plural, watch: true);
|
|
|
|
|
return respTask.Watch(onEvent, onError, onClosed);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Watcher<T> WatchNamespaced<T>(string ns, Action<WatchEventType, T> onEvent, Action<Exception> onError = null, Action onClosed = null)
|
|
|
|
|
where T : IKubernetesObject
|
|
|
|
|
{
|
|
|
|
|
var respTask = kubernetes.CustomObjects.ListNamespacedCustomObjectWithHttpMessagesAsync(group, version, ns, plural, watch: true);
|
|
|
|
|
return respTask.Watch(onEvent, onError, onClosed);
|
|
|
|
|
}
|
|
|
|
|
|
2020-11-23 02:59:34 -08:00
|
|
|
public void Dispose()
|
|
|
|
|
{
|
|
|
|
|
Dispose(true);
|
|
|
|
|
GC.SuppressFinalize(this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected virtual void Dispose(bool disposing)
|
|
|
|
|
{
|
2023-04-23 17:45:12 -07:00
|
|
|
if (disposeClient)
|
|
|
|
|
{
|
|
|
|
|
kubernetes.Dispose();
|
|
|
|
|
}
|
2020-11-23 02:59:34 -08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|