using k8s.Models;
using Microsoft.AspNetCore.WebUtilities;
using Microsoft.Rest;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
namespace k8s
{
public partial class Kubernetes
{
///
public Task> WatchNamespacedConfigMapAsync(string name, string @namespace, string @continue = null, string fieldSelector = null, bool? includeUninitialized = null, string labelSelector = null, int? limit = null, bool? pretty = null, int? timeoutSeconds = null, int? resourceVersion = null, Dictionary> customHeaders = null, Action onEvent = null, Action onError = null, CancellationToken cancellationToken = default(CancellationToken))
{
return WatchNamespacedObjectAsync("configmaps", name, @namespace, @continue, fieldSelector, includeUninitialized, labelSelector, limit, pretty, timeoutSeconds, resourceVersion, customHeaders, onEvent, onError, cancellationToken);
}
///
public Task> WatchNamespacedEndpointAsync(string name, string @namespace, string @continue = null, string fieldSelector = null, bool? includeUninitialized = null, string labelSelector = null, int? limit = null, bool? pretty = null, int? timeoutSeconds = null, int? resourceVersion = null, Dictionary> customHeaders = null, Action onEvent = null, Action onError = null, CancellationToken cancellationToken = default(CancellationToken))
{
return WatchNamespacedObjectAsync("endpoints", name, @namespace, @continue, fieldSelector, includeUninitialized, labelSelector, limit, pretty, timeoutSeconds, resourceVersion, customHeaders, onEvent, onError, cancellationToken);
}
///
public Task> WatchNamespacedEventAsync(string name, string @namespace, string @continue = null, string fieldSelector = null, bool? includeUninitialized = null, string labelSelector = null, int? limit = null, bool? pretty = null, int? timeoutSeconds = null, int? resourceVersion = null, Dictionary> customHeaders = null, Action onEvent = null, Action onError = null, CancellationToken cancellationToken = default(CancellationToken))
{
return WatchNamespacedObjectAsync("events", name, @namespace, @continue, fieldSelector, includeUninitialized, labelSelector, limit, pretty, timeoutSeconds, resourceVersion, customHeaders, onEvent, onError, cancellationToken);
}
///
public Task> WatchNamespacedLimitRangeAsync(string name, string @namespace, string @continue = null, string fieldSelector = null, bool? includeUninitialized = null, string labelSelector = null, int? limit = null, bool? pretty = null, int? timeoutSeconds = null, int? resourceVersion = null, Dictionary> customHeaders = null, Action onEvent = null, Action onError = null, CancellationToken cancellationToken = default(CancellationToken))
{
return WatchNamespacedObjectAsync("limitranges", name, @namespace, @continue, fieldSelector, includeUninitialized, labelSelector, limit, pretty, timeoutSeconds, resourceVersion, customHeaders, onEvent, onError, cancellationToken);
}
///
public Task> WatchNamespaceAsync(string name, string @namespace, string @continue = null, string fieldSelector = null, bool? includeUninitialized = null, string labelSelector = null, int? limit = null, bool? pretty = null, int? timeoutSeconds = null, int? resourceVersion = null, Dictionary> customHeaders = null, Action onEvent = null, Action onError = null, CancellationToken cancellationToken = default(CancellationToken))
{
return WatchObjectAsync("namespaces", name, @namespace, @continue, fieldSelector, includeUninitialized, labelSelector, limit, pretty, timeoutSeconds, resourceVersion, customHeaders, onEvent, onError, cancellationToken);
}
///
public Task> WatchNodeAsync(string name, string @namespace, string @continue = null, string fieldSelector = null, bool? includeUninitialized = null, string labelSelector = null, int? limit = null, bool? pretty = null, int? timeoutSeconds = null, int? resourceVersion = null, Dictionary> customHeaders = null, Action onEvent = null, Action onError = null, CancellationToken cancellationToken = default(CancellationToken))
{
return WatchObjectAsync("nodes", name, @namespace, @continue, fieldSelector, includeUninitialized, labelSelector, limit, pretty, timeoutSeconds, resourceVersion, customHeaders, onEvent, onError, cancellationToken);
}
///
public Task> WatchNamespacedPersistentVolumeClaimAsync(string name, string @namespace, string @continue = null, string fieldSelector = null, bool? includeUninitialized = null, string labelSelector = null, int? limit = null, bool? pretty = null, int? timeoutSeconds = null, int? resourceVersion = null, Dictionary> customHeaders = null, Action onEvent = null, Action onError = null, CancellationToken cancellationToken = default(CancellationToken))
{
return WatchNamespacedObjectAsync("persistentvolumeclaims", name, @namespace, @continue, fieldSelector, includeUninitialized, labelSelector, limit, pretty, timeoutSeconds, resourceVersion, customHeaders, onEvent, onError, cancellationToken);
}
///
public Task> WatchPersistentVolumeAsync(string name, string @namespace, string @continue = null, string fieldSelector = null, bool? includeUninitialized = null, string labelSelector = null, int? limit = null, bool? pretty = null, int? timeoutSeconds = null, int? resourceVersion = null, Dictionary> customHeaders = null, Action onEvent = null, Action onError = null, CancellationToken cancellationToken = default(CancellationToken))
{
return WatchObjectAsync("persistentvolumes", name, @namespace, @continue, fieldSelector, includeUninitialized, labelSelector, limit, pretty, timeoutSeconds, resourceVersion, customHeaders, onEvent, onError, cancellationToken);
}
///
public Task> WatchNamespacedPodAsync(string name, string @namespace, string @continue = null, string fieldSelector = null, bool? includeUninitialized = null, string labelSelector = null, int? limit = null, bool? pretty = null, int? timeoutSeconds = null, int? resourceVersion = null, Dictionary> customHeaders = null, Action onEvent = null, Action onError = null, CancellationToken cancellationToken = default(CancellationToken))
{
return WatchNamespacedObjectAsync("pods", name, @namespace, @continue, fieldSelector, includeUninitialized, labelSelector, limit, pretty, timeoutSeconds, resourceVersion, customHeaders, onEvent, onError, cancellationToken);
}
///
public Task> WatchNamespacedPodTemplateAsync(string name, string @namespace, string @continue = null, string fieldSelector = null, bool? includeUninitialized = null, string labelSelector = null, int? limit = null, bool? pretty = null, int? timeoutSeconds = null, int? resourceVersion = null, Dictionary> customHeaders = null, Action onEvent = null, Action onError = null, CancellationToken cancellationToken = default(CancellationToken))
{
return WatchNamespacedObjectAsync("podtemplates", name, @namespace, @continue, fieldSelector, includeUninitialized, labelSelector, limit, pretty, timeoutSeconds, resourceVersion, customHeaders, onEvent, onError, cancellationToken);
}
///
public Task> WatchNamespacedReplicationControllerAsync(string name, string @namespace, string @continue = null, string fieldSelector = null, bool? includeUninitialized = null, string labelSelector = null, int? limit = null, bool? pretty = null, int? timeoutSeconds = null, int? resourceVersion = null, Dictionary> customHeaders = null, Action onEvent = null, Action onError = null, CancellationToken cancellationToken = default(CancellationToken))
{
return WatchNamespacedObjectAsync("replicationcontrollers", name, @namespace, @continue, fieldSelector, includeUninitialized, labelSelector, limit, pretty, timeoutSeconds, resourceVersion, customHeaders, onEvent, onError, cancellationToken);
}
public Task> WatchNamespacedObjectAsync(string resourceType, string name, string @namespace, string @continue = null, string fieldSelector = null, bool? includeUninitialized = null, string labelSelector = null, int? limit = null, bool? pretty = null, int? timeoutSeconds = null, int? resourceVersion = null, Dictionary> customHeaders = null, Action onEvent = null, Action onError = null, CancellationToken cancellationToken = default(CancellationToken))
{
if (@namespace == null)
{
throw new ArgumentNullException(nameof(@namespace));
}
return WatchObjectAsync(resourceType, name, @namespace, @continue, fieldSelector, includeUninitialized, labelSelector, limit, pretty, timeoutSeconds, resourceVersion, customHeaders, onEvent, onError, cancellationToken);
}
public async Task> WatchObjectAsync(string resourceType, string name, string @namespace, string @continue = null, string fieldSelector = null, bool? includeUninitialized = null, string labelSelector = null, int? limit = null, bool? pretty = null, int? timeoutSeconds = null, int? resourceVersion = null, Dictionary> customHeaders = null, Action onEvent = null, Action onError = null, CancellationToken cancellationToken = default(CancellationToken))
{
// Tracing
bool _shouldTrace = ServiceClientTracing.IsEnabled;
string _invocationId = null;
if (_shouldTrace)
{
_invocationId = ServiceClientTracing.NextInvocationId.ToString();
Dictionary tracingParameters = new Dictionary();
tracingParameters.Add("name", name);
tracingParameters.Add("namespace", @namespace);
tracingParameters.Add("continue", @continue);
tracingParameters.Add("fieldSelector", fieldSelector);
tracingParameters.Add("includeUninitialized", includeUninitialized);
tracingParameters.Add("labelSelector", labelSelector);
tracingParameters.Add("limit", limit);
tracingParameters.Add("pretty", pretty);
tracingParameters.Add("timeoutSeconds", timeoutSeconds);
tracingParameters.Add("resourceVersion", resourceVersion);
ServiceClientTracing.Enter(_invocationId, this, nameof(WatchNamespacedPodAsync), tracingParameters);
}
// Construct URL
var uriBuilder = new UriBuilder(this.BaseUri);
if (!uriBuilder.Path.EndsWith("/"))
{
uriBuilder.Path += "/";
}
uriBuilder.Path += "api/v1/watch";
if (@namespace != null)
{
uriBuilder.Path += $"/namespaces/{@namespace}";
}
uriBuilder.Path += $"/{resourceType}/{name}";
var query = string.Empty;
// Don't sent watch, because setting that value will cause the WatcherDelegatingHandler to kick in. That class
// "eats" the first line, which is something we don't want.
// query = QueryHelpers.AddQueryString(query, "watch", "true");
if (@continue != null)
{
query = QueryHelpers.AddQueryString(query, "continue", Uri.EscapeDataString(@continue));
}
if (fieldSelector != null)
{
query = QueryHelpers.AddQueryString(query, "fieldSelector", Uri.EscapeDataString(fieldSelector));
}
if (includeUninitialized != null)
{
query = QueryHelpers.AddQueryString(query, "includeUninitialized", includeUninitialized.Value ? "true" : "false");
}
if (labelSelector != null)
{
query = QueryHelpers.AddQueryString(query, "labelSelector", Uri.EscapeDataString(labelSelector));
}
if (limit != null)
{
query = QueryHelpers.AddQueryString(query, "limit", limit.Value.ToString());
}
if (pretty != null)
{
query = QueryHelpers.AddQueryString(query, "pretty", pretty.Value ? "true" : "false");
}
if (timeoutSeconds != null)
{
query = QueryHelpers.AddQueryString(query, "timeoutSeconds", timeoutSeconds.Value.ToString());
}
if (resourceVersion != null)
{
query = QueryHelpers.AddQueryString(query, "resourceVersion", resourceVersion.Value.ToString());
}
uriBuilder.Query = query;
// Create HTTP transport objects
var httpRequest = new HttpRequestMessage(HttpMethod.Get, uriBuilder.ToString());
// Set Credentials
if (this.Credentials != null)
{
cancellationToken.ThrowIfCancellationRequested();
await this.Credentials.ProcessHttpRequestAsync(httpRequest, cancellationToken).ConfigureAwait(false);
}
// Set Headers
if (customHeaders != null)
{
foreach (var header in customHeaders)
{
if (httpRequest.Headers.Contains(header.Key))
{
httpRequest.Headers.Remove(header.Key);
}
httpRequest.Headers.TryAddWithoutValidation(header.Key, header.Value);
}
}
// Send Request
if (_shouldTrace)
{
ServiceClientTracing.SendRequest(_invocationId, httpRequest);
}
cancellationToken.ThrowIfCancellationRequested();
var httpResponse = await HttpClient.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
if (_shouldTrace)
{
ServiceClientTracing.ReceiveResponse(_invocationId, httpResponse);
}
cancellationToken.ThrowIfCancellationRequested();
if (httpResponse.StatusCode != HttpStatusCode.OK)
{
string responseContent = string.Empty;
var ex = new HttpOperationException(string.Format("Operation returned an invalid status code '{0}'", httpResponse.StatusCode));
if (httpResponse.Content != null)
{
responseContent = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
}
ex.Request = new HttpRequestMessageWrapper(httpRequest, responseContent);
ex.Response = new HttpResponseMessageWrapper(httpResponse, string.Empty);
httpRequest.Dispose();
httpResponse?.Dispose();
throw ex;
}
var stream = await httpResponse.Content.ReadAsStreamAsync().ConfigureAwait(false);
StreamReader reader = new StreamReader(stream);
return new Watcher(reader, onEvent, onError);
}
}
}