public static RegionEndpoint GetRegion( this IAWSRegionArguments self, bool useSDKFallback, SessionState sessionState) { if (!TryGetRegion(self, useSDKFallback, out var region, out var source, sessionState)) { region = null; } return(region); }
public static bool TryGetRegion( this IAWSRegionArguments self, bool useInstanceMetadata, out RegionEndpoint region, out RegionSource source, SessionState sessionState) { if (self == null) { throw new ArgumentNullException("self"); } region = null; source = RegionSource.Unknown; // user gave a command-level region parameter override? if (self.Region != null) { var regionSysName = string.Empty; if (self.Region is PSObject) { var paramObject = self.Region as PSObject; if (paramObject.BaseObject is AWSRegion) { regionSysName = (paramObject.BaseObject as AWSRegion).Region.SystemName; } else { regionSysName = paramObject.BaseObject as string; } } else if (self.Region is string) { regionSysName = self.Region as string; } if (string.IsNullOrEmpty(regionSysName)) { throw new ArgumentException( "Unsupported parameter type; Region must be a string containing the system name for a region, or an AWSRegion instance"); } try { region = RegionEndpoint.GetBySystemName(regionSysName); source = RegionSource.String; } catch (Exception) { // be nice and informative :-) var sb = new StringBuilder("Unsupported Region value. Supported values: "); var regions = RegionEndpoint.EnumerableAllRegions; for (var i = 0; i < regions.Count(); i++) { if (i > 0) { sb.Append(","); } sb.Append(regions.ElementAt(i).SystemName); } throw new ArgumentOutOfRangeException(sb.ToString()); } } // user pushed default shell variable? (this allows override of machine-wide environment setting) if (region == null && sessionState != null) { var variableValue = sessionState.PSVariable.GetValue(SessionKeys.AWSRegionVariableName); if (variableValue is string) { region = RegionEndpoint.GetBySystemName(variableValue as string); source = RegionSource.Session; } } // region set in profile store (including legacy key name)? if (region == null) { if (!TryLoad(SettingsStore.PSDefaultSettingName, self.ProfileLocation, ref region, ref source)) { TryLoad(SettingsStore.PSLegacyDefaultSettingName, self.ProfileLocation, ref region, ref source); } } // region set in environment variables? if (region == null) { try { var environmentRegion = new EnvironmentVariableAWSRegion(); region = environmentRegion.Region; source = RegionSource.Environment; } catch { } } // last chance, attempt load from EC2 instance metadata if allowed if (region == null && useInstanceMetadata) { try { region = EC2InstanceMetadata.Region; if (region != null) { source = RegionSource.InstanceMetadata; } } catch { } } return(region != null && source != RegionSource.Unknown); }