private async Task <string> GetRegionAsync(ICoreLogger logger) { if (!Environment.GetEnvironmentVariable(RegionName).IsNullOrEmpty()) { logger.Info($"[Region discovery] Region: {Environment.GetEnvironmentVariable(RegionName)}"); return(Environment.GetEnvironmentVariable(RegionName)); } try { HttpResponse response = await _httpManager.SendGetAsync(_ImdsUri, Headers, logger).ConfigureAwait(false); if (response.StatusCode != HttpStatusCode.OK) { throw new MsalClientException( MsalError.RegionDiscoveryFailed, MsalErrorMessage.RegionDiscoveryFailed); } LocalImdsResponse localImdsResponse = JsonHelper.DeserializeFromJson <LocalImdsResponse>(response.Body); logger.Info($"[Region discovery] Call to local IMDS returned region: {localImdsResponse.location}"); return(localImdsResponse.location); } catch (Exception e) { logger.Info("[Region discovery] Call to local imds failed." + e.Message); throw; } }
private async Task <string> GetRegionAsync(RequestContext requestContext) { ICoreLogger logger = requestContext.Logger; string region = Environment.GetEnvironmentVariable(RegionName); if (!string.IsNullOrEmpty(region)) { logger.Info($"[Region discovery] Region found in environment variable: {region}."); LogTelemetryData(region, RegionSource.EnvVariable, requestContext); return(region); } try { var headers = new Dictionary <string, string> { { "Metadata", "true" } }; HttpResponse response = await _httpManager.SendGetAsync(BuildImdsUri(DefaultApiVersion), headers, logger).ConfigureAwait(false); // A bad request occurs when the version in the IMDS call is no longer supported. if (response.StatusCode == HttpStatusCode.BadRequest) { string apiVersion = await GetImdsUriApiVersionAsync(logger, headers).ConfigureAwait(false); // Get the latest version response = await _httpManager.SendGetAsync(BuildImdsUri(apiVersion), headers, logger).ConfigureAwait(false); // Call again with updated version } if (response.StatusCode == HttpStatusCode.OK && !response.Body.IsNullOrEmpty()) { LocalImdsResponse localImdsResponse = JsonHelper.DeserializeFromJson <LocalImdsResponse>(response.Body); if (localImdsResponse != null && !localImdsResponse.location.IsNullOrEmpty()) { logger.Info($"[Region discovery] Call to local IMDS returned region: {localImdsResponse.location}"); LogTelemetryData(localImdsResponse.location, RegionSource.Imds, requestContext); return(localImdsResponse.location); } } logger.Info($"[Region discovery] Call to local IMDS failed with status code: {response.StatusCode} or an empty response."); throw MsalServiceExceptionFactory.FromImdsResponse( MsalError.RegionDiscoveryFailed, MsalErrorMessage.RegionDiscoveryFailed, response); } catch (MsalServiceException) { throw; } catch (Exception e) { logger.Info("[Region discovery] Call to local imds failed." + e.Message); throw new MsalServiceException(MsalError.RegionDiscoveryFailed, MsalErrorMessage.RegionDiscoveryFailed); } }