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); } } }