public StandardPodUtilities(KubernetesApplicationOptions kubernetesApplicationOptions, ILogger logger = null, IKubernetes kubernetes = null)
        {
            if (kubernetesApplicationOptions is null)
            {
                throw new ArgumentNullException(nameof(kubernetesApplicationOptions));
            }

            _applicationOptions = kubernetesApplicationOptions;
            _logger             = logger;
            _kubernetes         = kubernetes ?? KubernetesClientHelpers.GetKubernetesClient(_applicationOptions);
        }
        /// <summary>
        /// Add configuration providers for ConfigMaps and Secrets
        /// </summary>
        /// <param name="configurationBuilder"><see cref="IConfigurationBuilder"/></param>
        /// <param name="kubernetesClientConfiguration">Kubernetes client configuration customization</param>
        /// <param name="loggerFactory"><see cref="ILoggerFactory"/> for logging within config providers</param>
        public static IConfigurationBuilder AddKubernetes(this IConfigurationBuilder configurationBuilder, Action <KubernetesClientConfiguration> kubernetesClientConfiguration = null, ILoggerFactory loggerFactory = null)
        {
            if (configurationBuilder == null)
            {
                throw new ArgumentNullException(nameof(configurationBuilder));
            }

            var logger = loggerFactory?.CreateLogger("Steeltoe.Extensions.Configuration.Kubernetes");

            var appInfo = new KubernetesApplicationOptions(configurationBuilder.Build());

            if (appInfo.Enabled && (appInfo.Config.Enabled || appInfo.Secrets.Enabled))
            {
                logger?.LogTrace("Steeltoe Kubernetes is enabled");

                var lowercaseAppName    = appInfo.Name.ToLowerInvariant();
                var lowercaseAppEnvName = (appInfo.Name + appInfo.NameEnvironmentSeparator + appInfo.EnvironmentName).ToLowerInvariant();

                var k8sClient = KubernetesClientHelpers.GetKubernetesClient(appInfo, kubernetesClientConfiguration, logger);

                if (appInfo.Config.Enabled)
                {
                    var configMapProviderLogger = loggerFactory?.CreateLogger <KubernetesConfigMapProvider>();

                    configurationBuilder
                    .Add(new KubernetesConfigMapSource(k8sClient, new KubernetesConfigSourceSettings(appInfo.NameSpace, lowercaseAppName, appInfo.Reload, configMapProviderLogger)))
                    .Add(new KubernetesConfigMapSource(k8sClient, new KubernetesConfigSourceSettings(appInfo.NameSpace, lowercaseAppEnvName, appInfo.Reload, configMapProviderLogger)));

                    foreach (var configmap in appInfo.Config.Sources)
                    {
                        configurationBuilder.Add(new KubernetesConfigMapSource(k8sClient, new KubernetesConfigSourceSettings(configmap.Namespace, configmap.Name, appInfo.Reload, configMapProviderLogger)));
                    }
                }

                if (appInfo.Secrets.Enabled)
                {
                    var secretProviderLogger = loggerFactory?.CreateLogger <KubernetesSecretProvider>();

                    configurationBuilder
                    .Add(new KubernetesSecretSource(k8sClient, new KubernetesConfigSourceSettings(appInfo.NameSpace, lowercaseAppName, appInfo.Reload, secretProviderLogger)))
                    .Add(new KubernetesSecretSource(k8sClient, new KubernetesConfigSourceSettings(appInfo.NameSpace, lowercaseAppEnvName, appInfo.Reload, secretProviderLogger)));
                    foreach (var secret in appInfo.Secrets.Sources)
                    {
                        configurationBuilder.Add(new KubernetesSecretSource(k8sClient, new KubernetesConfigSourceSettings(secret.Namespace, secret.Name, appInfo.Reload, secretProviderLogger)));
                    }
                }
            }

            return(configurationBuilder);
        }