private async Task OnWatcherStateChanged <TResource, TResourceList>( ManagedWatcher <TResource, TResourceList, WatcherEvent <TResource> > sender, ManagedWatcherStateUpdate update) where TResource : class, IKubernetesObject { var tag = sender.Tag ?? string.Empty; switch (update.State) { case ManagedWatcherState.Closed: _logger.LogDebug("{type} watcher {tag} {state}", typeof(TResource).Name, tag, update.State); await _secretsWatcher.Stop(); foreach (var certificatesWatcher in _certificatesWatchers.Values) { await certificatesWatcher.Stop(); } await _eventQueue.WaitAndClear(); await _secretsWatcher.Start(); foreach (var certificatesWatcher in _certificatesWatchers.Values) { await certificatesWatcher.Start(); } break; case ManagedWatcherState.Faulted: _logger.LogError(update.Exception, "{type} watcher {tag} {state}", typeof(TResource).Name, tag, update.State); break; default: _logger.LogDebug("{type} watcher {tag} {state}", typeof(TResource).Name, tag, update.State); break; } }
public async Task StartAsync(CancellationToken cancellationToken) { try { await _apiClient.ListCustomResourceDefinitionAsync(cancellationToken : cancellationToken); await _crdV1Watcher.Start(); } catch (HttpOperationException exception) when(exception.Response.StatusCode == HttpStatusCode.NotFound) { _logger.LogWarning( "Current kubernetes version does not support {type} apiVersion {version}.", V1CustomResourceDefinition.KubeKind, V1CustomResourceDefinition.KubeApiVersion); Onv1Beta1CrdRefresh(); _v1Beta1CrdMonitorTimer.Start(); } }
private async Task OnCrdWatcherStateChanged <TResource, TResourceList>( ManagedWatcher <TResource, TResourceList, WatcherEvent <TResource> > sender, ManagedWatcherStateUpdate update) where TResource : class, IKubernetesObject { switch (update.State) { case ManagedWatcherState.Closed: _logger.LogDebug("{type} watcher {state}", typeof(TResource).Name, update.State); await sender.Start(); break; case ManagedWatcherState.Faulted: _logger.LogError(update.Exception, "{type} watcher {state}", typeof(TResource).Name, update.State); break; default: _logger.LogDebug("{type} watcher {state}", typeof(TResource).Name, update.State); break; } }
public async Task StartAsync(CancellationToken cancellationToken) { await _secretsWatcher.Start(); }
protected async Task WatchersStart() { await _resourceWatcher.Start(); await _namespaceWatcher.Start(); }
private async Task OnCertManagerDiscovery() { _logger.LogTrace("Searching for cert-manager CRDs"); //Get all CRDs in order to check for cert-manager specific CRDs var customResourceDefinitions = await _apiClient.ListCustomResourceDefinitionAsync(); //Find the `Certificate` CRD (if installed) var certCrd = customResourceDefinitions.Items.FirstOrDefault(s => s.Spec?.Names != null && s.Spec.Group == CertManagerConstants.CrdGroup && s.Spec.Names.Kind == CertManagerConstants.CertificateKind); var versions = new List <string>(); //Get Certificate CRD versions if (!(certCrd is null)) { versions = certCrd.Spec.Versions.Select(s => s.Name).ToList(); } _logger.LogTrace("Cert-manager CRDs versions found: `{versions}`", versions); //Check if at least one Certificate exists (regardless of version) so we can start monitoring var version = versions.OrderBy(s => s, KubernetesVersionComparer.Instance).LastOrDefault(); var certificatesExit = false; if (version != null) { var certList = ((JObject)await _apiClient.ListClusterCustomObjectAsync(CertManagerConstants.CrdGroup, version, CertManagerConstants.CertificatePlural)).ToObject <KubernetesList <Certificate> >(); certificatesExit = certList.Items.Any(); } //If no certificate exists, stop everything. Timer will periodically check again if (!certificatesExit) { await _certificateWatcher.Stop(); await _secretsWatcher.Stop(); _version = null; _logger.LogTrace("No {kind} found.", CertManagerConstants.CertificateKind); return; } if (_version != version) { _logger.LogDebug("{kind} version is {version}", CertManagerConstants.CertificateKind, version); await _certificateWatcher.Stop(); await _secretsWatcher.Stop(); _version = version; if (_version != null) { await _certificateWatcher.Start(); await _secretsWatcher.Start(); } } }