internal static IDictionary InitializeBuiltInEnvironments()

in src/Authentication.Abstractions/AzureEnvironment.cs [39:106]


        internal static IDictionary<string, AzureEnvironment> InitializeBuiltInEnvironments(string armMetadataRequestUri, Action<string> debugLogger = null, Action<string> warningLogger = null, IHttpOperations httpOperations = null)
        {
            IDictionary<string, AzureEnvironment> armAzureEnvironments = new Dictionary<string, AzureEnvironment>(StringComparer.InvariantCultureIgnoreCase);
            try
            {
                if (string.IsNullOrEmpty(armMetadataRequestUri))
                {
                    armMetadataRequestUri = Environment.GetEnvironmentVariable(ArmMetadataEnvVariable);
                    if (string.IsNullOrEmpty(armMetadataRequestUri))
                    {
                        armMetadataRequestUri = DefaultArmMetaDataEndpoint;
                    }
                    else
                    {
                        debugLogger?.Invoke($"Get {armMetadataRequestUri} from environment variable {ArmMetadataEnvVariable}");
                    }
                }
                if (DisableArmMetaDataEndpoint.Equals(armMetadataRequestUri?.Trim().ToUpper()))
                {
                    warningLogger?.Invoke($"Discover feature is disabled.");
                    armMetadataRequestUri = null;
                }
                if (!string.IsNullOrEmpty(armMetadataRequestUri))
                {
                    debugLogger?.Invoke($"Discover environments via {armMetadataRequestUri}");
                    try
                    {
                        var list = InitializeEnvironmentsFromArm(armMetadataRequestUri, httpOperations).ConfigureAwait(false).GetAwaiter().GetResult();
                        foreach (var metadata in list)
                        {
                            var env = MapArmToAzureEnvironment(metadata);
                            env.Type = TypeDiscovered;
                            armAzureEnvironments[env.Name] = env;
                            debugLogger?.Invoke($"Added discovered environment {env.Name}");
                        }
                    }
                    catch (Exception e)
                    {
                        warningLogger?.Invoke($"Cannot discover environments from ARM with URI {armMetadataRequestUri}. Falling back to built-in environments.");
                        debugLogger?.Invoke(e.StackTrace);
                    }
                }
            }
            catch (Exception e)
            {
                warningLogger?.Invoke("Cannot discover environments with error");
                warningLogger?.Invoke(e.StackTrace);
            }

            debugLogger?.Invoke($"Load built-in environments");

            if (!armAzureEnvironments.ContainsKey(EnvironmentName.AzureCloud))
            {
                armAzureEnvironments[EnvironmentName.AzureCloud] = GetBuiltInAzureCloud();
            }
            if (!armAzureEnvironments.ContainsKey(EnvironmentName.AzureChinaCloud))
            {
                armAzureEnvironments[EnvironmentName.AzureChinaCloud] = GetBuiltInChinaAzureCloud();
            }
            if (!armAzureEnvironments.ContainsKey(EnvironmentName.AzureUSGovernment))
            {
                armAzureEnvironments[EnvironmentName.AzureUSGovernment] = GetBuiltInUSGovernmentCloud();
            }

            SetExtendedProperties(armAzureEnvironments);

            return armAzureEnvironments;
        }