Exemple #1
0
        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);
            }
        }
Exemple #2
0
        /// <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();
                    }
                }
            }
        }