Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions src/KubernetesClient.Kubectl/Beta/AsyncKubectl.Get.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,32 @@ public async Task<T> GetAsync<T>(string name, string? @namespace = null, Cancell
? await genericClient.ReadNamespacedAsync<T>(@namespace, name, cancellationToken).ConfigureAwait(false)
: await genericClient.ReadAsync<T>(name, cancellationToken).ConfigureAwait(false);
}

/// <summary>
/// List Kubernetes resources of a specific type.
/// </summary>
/// <typeparam name="T">The type of Kubernetes resource list to get (e.g., V1PodList).</typeparam>
/// <param name="namespace">The namespace to list resources from. If null, lists cluster-scoped resources or resources across all namespaces for namespaced resources.</param>
/// <param name="labelSelector">A selector to restrict the list of returned objects by their labels. Defaults to everything.</param>
/// <param name="fieldSelector">A selector to restrict the list of returned objects by their fields. Defaults to everything.</param>
/// <param name="limit">Maximum number of responses to return for a list call.</param>
/// <param name="continueToken">The continue option should be set when retrieving more results from the server.</param>
/// <param name="cancellationToken">Cancellation token.</param>
/// <returns>The list of requested resources.</returns>
public async Task<T> ListAsync<T>(
string? @namespace = null,
string? labelSelector = null,
string? fieldSelector = null,
int? limit = null,
string? continueToken = null,
CancellationToken cancellationToken = default)
where T : IKubernetesObject
{
var metadata = typeof(T).GetKubernetesTypeMetadata();
using var genericClient = new GenericClient(client, metadata.Group, metadata.ApiVersion, metadata.PluralName, disposeClient: false);

return @namespace != null
? await genericClient.ListNamespacedAsync<T>(@namespace, labelSelector, fieldSelector, limit, continueToken, cancellationToken).ConfigureAwait(false)
: await genericClient.ListAsync<T>(labelSelector, fieldSelector, limit, continueToken, cancellationToken).ConfigureAwait(false);
}
}
21 changes: 21 additions & 0 deletions src/KubernetesClient.Kubectl/Beta/Kubectl.Get.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,25 @@ public T Get<T>(string name, string? @namespace = null)
{
return client.GetAsync<T>(name, @namespace).GetAwaiter().GetResult();
}

/// <summary>
/// List Kubernetes resources of a specific type.
/// </summary>
/// <typeparam name="T">The type of Kubernetes resource list to get (e.g., V1PodList).</typeparam>
/// <param name="namespace">The namespace to list resources from. If null, lists cluster-scoped resources or resources across all namespaces for namespaced resources.</param>
/// <param name="labelSelector">A selector to restrict the list of returned objects by their labels. Defaults to everything.</param>
/// <param name="fieldSelector">A selector to restrict the list of returned objects by their fields. Defaults to everything.</param>
/// <param name="limit">Maximum number of responses to return for a list call.</param>
/// <param name="continueToken">The continue option should be set when retrieving more results from the server.</param>
/// <returns>The list of requested resources.</returns>
public T List<T>(
string? @namespace = null,
string? labelSelector = null,
string? fieldSelector = null,
int? limit = null,
string? continueToken = null)
where T : IKubernetesObject
{
return client.ListAsync<T>(@namespace, labelSelector, fieldSelector, limit, continueToken).GetAwaiter().GetResult();
}
}
8 changes: 4 additions & 4 deletions src/KubernetesClient/GenericClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,17 +42,17 @@ public async Task<T> CreateNamespacedAsync<T>(T obj, string ns, CancellationToke
return resp.Body;
}

public async Task<T> ListAsync<T>(CancellationToken cancel = default)
public async Task<T> ListAsync<T>(string labelSelector = null, string fieldSelector = null, int? limit = null, string continueToken = null, CancellationToken cancel = default)
where T : IKubernetesObject
{
var resp = await kubernetes.CustomObjects.ListClusterCustomObjectWithHttpMessagesAsync<T>(group, version, plural, cancellationToken: cancel).ConfigureAwait(false);
var resp = await kubernetes.CustomObjects.ListClusterCustomObjectWithHttpMessagesAsync<T>(group, version, plural, labelSelector: labelSelector, fieldSelector: fieldSelector, limit: limit, continueParameter: continueToken, cancellationToken: cancel).ConfigureAwait(false);
return resp.Body;
}

public async Task<T> ListNamespacedAsync<T>(string ns, CancellationToken cancel = default)
public async Task<T> ListNamespacedAsync<T>(string ns, string labelSelector = null, string fieldSelector = null, int? limit = null, string continueToken = null, CancellationToken cancel = default)
where T : IKubernetesObject
{
var resp = await kubernetes.CustomObjects.ListNamespacedCustomObjectWithHttpMessagesAsync<T>(group, version, ns, plural, cancellationToken: cancel).ConfigureAwait(false);
var resp = await kubernetes.CustomObjects.ListNamespacedCustomObjectWithHttpMessagesAsync<T>(group, version, ns, plural, labelSelector: labelSelector, fieldSelector: fieldSelector, limit: limit, continueParameter: continueToken, cancellationToken: cancel).ConfigureAwait(false);
return resp.Body;
}

Expand Down
Loading
Loading