public async Task <IPodInfo> CreatePodInfoAsync(OwnerReferencesResolve resolve) { using (var httpClient = CreateHttpClient()) { // Endpoints: // /api/v1/namespaces/<Namespace>/pods/<PodName> // /apis/apps/v1/namespaces/<Namespace>/replicasets/<ReplicaSetName> // /apis/apps/v1/namespaces/<Namespace>/deployments/<DeploymentName> var podNamespace = Namespace; var podHostName = HostName; var reader = await GetJsonAsync(httpClient, $"/api/v1/namespaces/{podNamespace}/pods/{podHostName}"); var pod = new Internal.Kubernetes.Pod(ref reader); var podInfo = new PodInfo(pod); if (resolve == OwnerReferencesResolve.All) { await ResolveOwnerReferencesAsync(httpClient, podInfo, pod.Metadata.OwnerReferences); } return(podInfo); } }
/// <summary> /// Gets Pod information explicitly and initialize it. /// </summary> /// <param name="resolve"></param> /// <param name="throwOnFail"></param> public static void Initialize(OwnerReferencesResolve resolve = OwnerReferencesResolve.All, bool throwOnFail = false) { lock (_syncObject) { if (_current != null) { return; } if (!_serviceProvider.IsRunningOnKubernetes) { _current = new PseudoPodInfo(); return; } try { _current = _serviceProvider.CreatePodInfoAsync(resolve).GetAwaiter().GetResult(); } catch (Exception) { if (throwOnFail) { throw; } else { _current = new PseudoPodInfo(); } } } }