Module: OCI::Regions
- Defined in:
- lib/oci/regions.rb,
 lib/oci/regions_definitions.rb
Overview
Module defining available regions
Constant Summary collapse
- SERVICE_ENDPOINT_PREFIX_MAPPING =
          — Start of service prefixes — 
- { AnnouncementClient: 'announcements', AuditClient: 'audit', Auth: 'auth', AutoScalingClient: 'autoscaling', BlockstorageClient: 'iaas', BudgetClient: 'usage', ComputeClient: 'iaas', ComputeManagementClient: 'iaas', ContainerEngineClient: 'containerengine', DatabaseClient: 'database', DnsClient: 'dns', EmailClient: 'email', FileStorageClient: 'filestorage', HealthChecksClient: 'healthchecks', IdentityClient: 'identity', KmsVaultClient: 'kms', LoadBalancerClient: 'iaas', MonitoringClient: 'telemetry', NotificationControlPlaneClient: 'notification', NotificationDataPlaneClient: 'notification', ObjectStorageClient: 'objectstorage', ResourceManagerClient: 'resourcemanager', ResourceSearchClient: 'query', StreamAdminClient: 'streams', StreamClient: 'streams', VirtualNetworkClient: 'iaas', WaasClient: 'waas' }.freeze 
- REGION_METADATA_KEYS =
          Region Metadata schema keys 
- %w[realmKey realmDomainComponent regionKey regionIdentifier].freeze 
- OCI_REGION_METADATA_VAR_NAME =
          Region metadata environment variable name 
- 'OCI_REGION_METADATA'.freeze 
- REGION_METADATA_CFG_FILE_LOCATION =
          Region Metadata Configuration File location 
- "#{Dir.home}/.oci/regions-config.json".freeze 
- DEFAULT_REALM_ENV_VAR =
          Default Realm environment variable name 
- 'OCI_DEFAULT_REALM'.freeze 
- REGION_ENUM =
- [ REGION_AP_CHUNCHEON_1 = 'ap-chuncheon-1'.freeze, REGION_AP_HYDERABAD_1 = 'ap-hyderabad-1'.freeze, REGION_AP_MELBOURNE_1 = 'ap-melbourne-1'.freeze, REGION_AP_MUMBAI_1 = 'ap-mumbai-1'.freeze, REGION_AP_OSAKA_1 = 'ap-osaka-1'.freeze, REGION_AP_SEOUL_1 = 'ap-seoul-1'.freeze, REGION_AP_SYDNEY_1 = 'ap-sydney-1'.freeze, REGION_AP_TOKYO_1 = 'ap-tokyo-1'.freeze, REGION_CA_MONTREAL_1 = 'ca-montreal-1'.freeze, REGION_CA_TORONTO_1 = 'ca-toronto-1'.freeze, REGION_EU_AMSTERDAM_1 = 'eu-amsterdam-1'.freeze, REGION_EU_FRANKFURT_1 = 'eu-frankfurt-1'.freeze, REGION_EU_ZURICH_1 = 'eu-zurich-1'.freeze, REGION_ME_JEDDAH_1 = 'me-jeddah-1'.freeze, REGION_ME_DUBAI_1 = 'me-dubai-1'.freeze, REGION_SA_SAOPAULO_1 = 'sa-saopaulo-1'.freeze, REGION_UK_CARDIFF_1 = 'uk-cardiff-1'.freeze, REGION_UK_LONDON_1 = 'uk-london-1'.freeze, REGION_US_ASHBURN_1 = 'us-ashburn-1'.freeze, REGION_US_PHOENIX_1 = 'us-phoenix-1'.freeze, REGION_US_SANJOSE_1 = 'us-sanjose-1'.freeze, REGION_SA_VINHEDO_1 = 'sa-vinhedo-1'.freeze, REGION_SA_SANTIAGO_1 = 'sa-santiago-1'.freeze, REGION_IL_JERUSALEM_1 = 'il-jerusalem-1'.freeze, REGION_EU_MARSEILLE_1 = 'eu-marseille-1'.freeze, REGION_AP_SINGAPORE_1 = 'ap-singapore-1'.freeze, REGION_ME_ABUDHABI_1 = 'me-abudhabi-1'.freeze, REGION_EU_MILAN_1 = 'eu-milan-1'.freeze, REGION_EU_STOCKHOLM_1 = 'eu-stockholm-1'.freeze, REGION_AF_JOHANNESBURG_1 = 'af-johannesburg-1'.freeze, REGION_EU_PARIS_1 = 'eu-paris-1'.freeze, REGION_MX_QUERETARO_1 = 'mx-queretaro-1'.freeze, REGION_EU_MADRID_1 = 'eu-madrid-1'.freeze, REGION_US_CHICAGO_1 = 'us-chicago-1'.freeze, REGION_MX_MONTERREY_1 = 'mx-monterrey-1'.freeze, REGION_US_SALTLAKE_2 = 'us-saltlake-2'.freeze, REGION_SA_BOGOTA_1 = 'sa-bogota-1'.freeze, REGION_SA_VALPARAISO_1 = 'sa-valparaiso-1'.freeze, REGION_US_LANGLEY_1 = 'us-langley-1'.freeze, REGION_US_LUKE_1 = 'us-luke-1'.freeze, REGION_US_GOV_ASHBURN_1 = 'us-gov-ashburn-1'.freeze, REGION_US_GOV_CHICAGO_1 = 'us-gov-chicago-1'.freeze, REGION_US_GOV_PHOENIX_1 = 'us-gov-phoenix-1'.freeze, REGION_UK_GOV_LONDON_1 = 'uk-gov-london-1'.freeze, REGION_UK_GOV_CARDIFF_1 = 'uk-gov-cardiff-1'.freeze, REGION_AP_CHIYODA_1 = 'ap-chiyoda-1'.freeze, REGION_AP_IBARAKI_1 = 'ap-ibaraki-1'.freeze, REGION_ME_DCC_MUSCAT_1 = 'me-dcc-muscat-1'.freeze, REGION_AP_DCC_CANBERRA_1 = 'ap-dcc-canberra-1'.freeze, REGION_EU_DCC_MILAN_1 = 'eu-dcc-milan-1'.freeze, REGION_EU_DCC_MILAN_2 = 'eu-dcc-milan-2'.freeze, REGION_EU_DCC_DUBLIN_2 = 'eu-dcc-dublin-2'.freeze, REGION_EU_DCC_RATING_2 = 'eu-dcc-rating-2'.freeze, REGION_EU_DCC_RATING_1 = 'eu-dcc-rating-1'.freeze, REGION_EU_DCC_DUBLIN_1 = 'eu-dcc-dublin-1'.freeze, REGION_AP_DCC_GAZIPUR_1 = 'ap-dcc-gazipur-1'.freeze, REGION_EU_MADRID_2 = 'eu-madrid-2'.freeze, REGION_EU_FRANKFURT_2 = 'eu-frankfurt-2'.freeze, REGION_EU_JOVANOVAC_1 = 'eu-jovanovac-1'.freeze, REGION_ME_DCC_DOHA_1 = 'me-dcc-doha-1'.freeze, REGION_EU_DCC_ZURICH_1 = 'eu-dcc-zurich-1'.freeze, REGION_ME_ABUDHABI_3 = 'me-abudhabi-3'.freeze ] 
- REGION_SHORT_NAMES_TO_LONG_NAMES =
- { 'yny': REGION_AP_CHUNCHEON_1, 'hyd': REGION_AP_HYDERABAD_1, 'mel': REGION_AP_MELBOURNE_1, 'bom': REGION_AP_MUMBAI_1, 'kix': REGION_AP_OSAKA_1, 'icn': REGION_AP_SEOUL_1, 'syd': REGION_AP_SYDNEY_1, 'nrt': REGION_AP_TOKYO_1, 'yul': REGION_CA_MONTREAL_1, 'yyz': REGION_CA_TORONTO_1, 'ams': REGION_EU_AMSTERDAM_1, 'fra': REGION_EU_FRANKFURT_1, 'zrh': REGION_EU_ZURICH_1, 'jed': REGION_ME_JEDDAH_1, 'dxb': REGION_ME_DUBAI_1, 'gru': REGION_SA_SAOPAULO_1, 'cwl': REGION_UK_CARDIFF_1, 'lhr': REGION_UK_LONDON_1, 'iad': REGION_US_ASHBURN_1, 'phx': REGION_US_PHOENIX_1, 'sjc': REGION_US_SANJOSE_1, 'vcp': REGION_SA_VINHEDO_1, 'scl': REGION_SA_SANTIAGO_1, 'mtz': REGION_IL_JERUSALEM_1, 'mrs': REGION_EU_MARSEILLE_1, 'sin': REGION_AP_SINGAPORE_1, 'auh': REGION_ME_ABUDHABI_1, 'lin': REGION_EU_MILAN_1, 'arn': REGION_EU_STOCKHOLM_1, 'jnb': REGION_AF_JOHANNESBURG_1, 'cdg': REGION_EU_PARIS_1, 'qro': REGION_MX_QUERETARO_1, 'mad': REGION_EU_MADRID_1, 'ord': REGION_US_CHICAGO_1, 'mty': REGION_MX_MONTERREY_1, 'aga': REGION_US_SALTLAKE_2, 'bog': REGION_SA_BOGOTA_1, 'vap': REGION_SA_VALPARAISO_1, 'lfi': REGION_US_LANGLEY_1, 'luf': REGION_US_LUKE_1, 'ric': REGION_US_GOV_ASHBURN_1, 'pia': REGION_US_GOV_CHICAGO_1, 'tus': REGION_US_GOV_PHOENIX_1, 'ltn': REGION_UK_GOV_LONDON_1, 'brs': REGION_UK_GOV_CARDIFF_1, 'nja': REGION_AP_CHIYODA_1, 'ukb': REGION_AP_IBARAKI_1, 'mct': REGION_ME_DCC_MUSCAT_1, 'wga': REGION_AP_DCC_CANBERRA_1, 'bgy': REGION_EU_DCC_MILAN_1, 'mxp': REGION_EU_DCC_MILAN_2, 'snn': REGION_EU_DCC_DUBLIN_2, 'dtm': REGION_EU_DCC_RATING_2, 'dus': REGION_EU_DCC_RATING_1, 'ork': REGION_EU_DCC_DUBLIN_1, 'dac': REGION_AP_DCC_GAZIPUR_1, 'vll': REGION_EU_MADRID_2, 'str': REGION_EU_FRANKFURT_2, 'beg': REGION_EU_JOVANOVAC_1, 'doh': REGION_ME_DCC_DOHA_1, 'avz': REGION_EU_DCC_ZURICH_1, 'ahu': REGION_ME_ABUDHABI_3 } 
- REGION_REALM_MAPPING =
          — Start of region realm mapping — 
- { 'ap-chuncheon-1': 'oc1'.freeze, 'ap-hyderabad-1': 'oc1'.freeze, 'ap-melbourne-1': 'oc1'.freeze, 'ap-mumbai-1': 'oc1'.freeze, 'ap-osaka-1': 'oc1'.freeze, 'ap-seoul-1': 'oc1'.freeze, 'ap-sydney-1': 'oc1'.freeze, 'ap-tokyo-1': 'oc1'.freeze, 'ca-montreal-1': 'oc1'.freeze, 'ca-toronto-1': 'oc1'.freeze, 'eu-amsterdam-1': 'oc1'.freeze, 'eu-frankfurt-1': 'oc1'.freeze, 'eu-zurich-1': 'oc1'.freeze, 'me-jeddah-1': 'oc1'.freeze, 'me-dubai-1': 'oc1'.freeze, 'sa-saopaulo-1': 'oc1'.freeze, 'uk-cardiff-1': 'oc1'.freeze, 'uk-london-1': 'oc1'.freeze, 'us-ashburn-1': 'oc1'.freeze, 'us-phoenix-1': 'oc1'.freeze, 'us-sanjose-1': 'oc1'.freeze, 'sa-vinhedo-1': 'oc1'.freeze, 'sa-santiago-1': 'oc1'.freeze, 'il-jerusalem-1': 'oc1'.freeze, 'eu-marseille-1': 'oc1'.freeze, 'ap-singapore-1': 'oc1'.freeze, 'me-abudhabi-1': 'oc1'.freeze, 'eu-milan-1': 'oc1'.freeze, 'eu-stockholm-1': 'oc1'.freeze, 'af-johannesburg-1': 'oc1'.freeze, 'eu-paris-1': 'oc1'.freeze, 'mx-queretaro-1': 'oc1'.freeze, 'eu-madrid-1': 'oc1'.freeze, 'us-chicago-1': 'oc1'.freeze, 'mx-monterrey-1': 'oc1'.freeze, 'us-saltlake-2': 'oc1'.freeze, 'sa-bogota-1': 'oc1'.freeze, 'sa-valparaiso-1': 'oc1'.freeze, 'us-langley-1': 'oc2'.freeze, 'us-luke-1': 'oc2'.freeze, 'us-gov-ashburn-1': 'oc3'.freeze, 'us-gov-chicago-1': 'oc3'.freeze, 'us-gov-phoenix-1': 'oc3'.freeze, 'uk-gov-london-1': 'oc4'.freeze, 'uk-gov-cardiff-1': 'oc4'.freeze, 'ap-chiyoda-1': 'oc8'.freeze, 'ap-ibaraki-1': 'oc8'.freeze, 'me-dcc-muscat-1': 'oc9'.freeze, 'ap-dcc-canberra-1': 'oc10'.freeze, 'eu-dcc-milan-1': 'oc14'.freeze, 'eu-dcc-milan-2': 'oc14'.freeze, 'eu-dcc-dublin-2': 'oc14'.freeze, 'eu-dcc-rating-2': 'oc14'.freeze, 'eu-dcc-rating-1': 'oc14'.freeze, 'eu-dcc-dublin-1': 'oc14'.freeze, 'ap-dcc-gazipur-1': 'oc15'.freeze, 'eu-madrid-2': 'oc19'.freeze, 'eu-frankfurt-2': 'oc19'.freeze, 'eu-jovanovac-1': 'oc20'.freeze, 'me-dcc-doha-1': 'oc21'.freeze, 'eu-dcc-zurich-1': 'oc24'.freeze, 'me-abudhabi-3': 'oc26'.freeze } 
- REALM_DOMAIN_MAPPING =
          — Start of realm domain mapping — 
- { 'oc1': 'oraclecloud.com'.freeze, 'oc2': 'oraclegovcloud.com'.freeze, 'oc3': 'oraclegovcloud.com'.freeze, 'oc4': 'oraclegovcloud.uk'.freeze, 'oc8': 'oraclecloud8.com'.freeze, 'oc9': 'oraclecloud9.com'.freeze, 'oc10': 'oraclecloud10.com'.freeze, 'oc14': 'oraclecloud14.com'.freeze, 'oc15': 'oraclecloud15.com'.freeze, 'oc19': 'oraclecloud.eu'.freeze, 'oc20': 'oraclecloud20.com'.freeze, 'oc21': 'oraclecloud21.com'.freeze, 'oc24': 'oraclecloud24.com'.freeze, 'oc26': 'oraclecloud26.com'.freeze } 
Class Method Summary collapse
- 
  
    
      .check_and_add_region_metadata(region)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    If the region information is not available in the existing maps, following sources are checked in order: 1. 
- .check_valid_schema(region_metadata) ⇒ Object
- .enable_instance_metadata_service ⇒ Object
- .format_endpoint(prefix, region) ⇒ Object
- 
  
    
      .get_second_level_domain(region)  ⇒ String 
    
    
  
  
  
  
  
  
  
  
  
    Returns a second level domain for the given region. 
- 
  
    
      .get_service_endpoint(region, service)  ⇒ String 
    
    
  
  
  
  
  
  
  
  
  
    Returns an endpoint for the given region and service. 
- 
  
    
      .get_service_endpoint_for_template(region, endpoint_template)  ⇒ String 
    
    
  
  
  
  
  
  
  
  
  
    Returns an endpoint for the given region and service endpoint template. 
- .read_metadata(metadata_env) ⇒ Object
- 
  
    
      .region_from_instance_metadata_service(region)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Read region from instance metadata service. 
- 
  
    
      .region_metadata_from_cfg_file(region)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Read region from metadata config file. 
- 
  
    
      .region_metadata_from_env_var(region)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    This method adds Region metadata info from OCI_REGION_METADATA environment variable to list of existing regions if the region does not exists already. 
- .reset_imds_settings ⇒ Object
- .update_regions_map(metadata, region) ⇒ Object
- .valid_region?(region) ⇒ Boolean
Class Method Details
.check_and_add_region_metadata(region) ⇒ Object
If the region information is not available in the existing maps, following sources are checked in order: 1. Regions Configuration File at ~/.oci/regions-config.json 2. Region Metadata Environment variable 3. Instance Metadata Service
The region metadata schema is: { “realmKey” : string, “realmDomainComponent” : string, “regionKey” : string, “regionIdentifier” : string }
If the region still cannot be resolved, we fall back to OC1 realm
| 151 152 153 154 155 156 157 | # File 'lib/oci/regions.rb', line 151 def self.(region) # Follow the hierarchy of sources return if valid_region?(region) return if !@has_read_cfg_file && (region) return if !@has_read_env_var && (region) return if @opt_in_for_imds && !@has_read_imds && (region) end | 
.check_valid_schema(region_metadata) ⇒ Object
| 246 247 248 249 250 251 252 253 254 255 256 257 258 259 | # File 'lib/oci/regions.rb', line 246 def self.check_valid_schema() REGION_METADATA_KEYS.each do |key| unless .key? key OCI.logger.debug("Key #{key} not found in region metadata") if OCI.logger return false end if [key].nil? || [key].empty? OCI.logger.debug("Value for key #{key} in region metadata is empty") if OCI.logger return false end end true end | 
.enable_instance_metadata_service ⇒ Object
| 276 277 278 | # File 'lib/oci/regions.rb', line 276 def self. @opt_in_for_imds = true end | 
.format_endpoint(prefix, region) ⇒ Object
| 109 110 111 112 | # File 'lib/oci/regions.rb', line 109 def self.format_endpoint(prefix, region) second_level_domain = get_second_level_domain(region) "https://#{prefix}.#{region}.#{second_level_domain}" end | 
.get_second_level_domain(region) ⇒ String
Returns a second level domain for the given region.
| 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | # File 'lib/oci/regions.rb', line 120 def self.get_second_level_domain(region) symbolised_region = region.to_sym # get realm from region, default to oc1 if REGION_REALM_MAPPING.key?(symbolised_region) realm = REGION_REALM_MAPPING[symbolised_region] # return second level domain if exists symbolised_realm = realm.to_sym return REALM_DOMAIN_MAPPING[symbolised_realm] if REALM_DOMAIN_MAPPING.key?(symbolised_realm) end # check if Default Realm exists in environment env, otherwise return oc1 domain by default return ENV[DEFAULT_REALM_ENV_VAR] if ENV.key?(DEFAULT_REALM_ENV_VAR) REALM_DOMAIN_MAPPING[:oc1] end | 
.get_service_endpoint(region, service) ⇒ String
Returns an endpoint for the given region and service.
| 72 73 74 75 76 77 78 79 80 | # File 'lib/oci/regions.rb', line 72 def self.get_service_endpoint(region, service) # check if the region exists in config file, environment variable or region meta_data_service # and add it to the existing map of regions. (region) prefix = SERVICE_ENDPOINT_PREFIX_MAPPING[service] raise "Service '#{service}' is not supported." unless prefix format_endpoint(prefix, region) end | 
.get_service_endpoint_for_template(region, endpoint_template) ⇒ String
Returns an endpoint for the given region and service endpoint template.
| 89 90 91 92 93 94 95 96 97 98 99 100 101 | # File 'lib/oci/regions.rb', line 89 def self.get_service_endpoint_for_template(region, endpoint_template) # check if the region exists in config file, environment variable or region meta_data_service # and add it to the existing map of regions. (region) endpoint = endpoint_template.clone # replace the token inside service_endpoint_template if exists [ ['{region}', region], ['{secondLevelDomain}', get_second_level_domain(region).to_s] ].each { |k, v| endpoint.sub!(k, v) } endpoint end | 
.read_metadata(metadata_env) ⇒ Object
| 242 243 244 | # File 'lib/oci/regions.rb', line 242 def self.() JSON.parse() end | 
.region_from_instance_metadata_service(region) ⇒ Object
Read region from instance metadata service
| 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 | # File 'lib/oci/regions.rb', line 189 def self.(region) @has_read_imds = true region_info = {} begin url = OCI::Auth::Signers::InstancePrincipalsSecurityTokenSigner::GET_REGION_INFO_URL uri_region_info = URI(url) region_info_client = Net::HTTP.new(uri_region_info.hostname, uri_region_info.port) # region_info_client.max_retries = 0 region_info_client.open_timeout = 10 region_info_client.read_timeout = 60 region_info_client.request(OCI::Auth::Util.(url, 'get')) do |response| return false unless response.is_a? Net::HTTPSuccess region_info = (response.body) end rescue JSON::ParserError OCI.logger.debug('Failed to parse json from regionInfo endpoint') if OCI.logger return false end if check_valid_schema(region_info) region_info.each { |_k, v| v.downcase! } return update_regions_map(region_info, region) end false end | 
.region_metadata_from_cfg_file(region) ⇒ Object
Read region from metadata config file
| 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 | # File 'lib/oci/regions.rb', line 160 def self.(region) @has_read_cfg_file = true config_file_location = File.(REGION_METADATA_CFG_FILE_LOCATION) unless File.file?(config_file_location) OCI.logger.debug('Config file does not exist.') if OCI.logger return false end begin file_hash = File.read(config_file_location) = (file_hash) rescue JSON::ParserError OCI.logger.debug('Failed to parse json file ' + config_file_location) if OCI.logger return false end # boolean flag to confirm if the region is found in the metadata array has_found_region = false .each do || next unless check_valid_schema() .each { |_k, v| v.downcase! } has_region = update_regions_map(, region) has_found_region ||= has_region end has_found_region end | 
.region_metadata_from_env_var(region) ⇒ Object
This method adds Region metadata info from OCI_REGION_METADATA environment variable to list of existing regions if the region does not exists already.
| 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 | # File 'lib/oci/regions.rb', line 220 def self.(region) begin @has_read_env_var = true = ENV[OCI_REGION_METADATA_VAR_NAME] # Empty value for environment variable OCI_REGION_METADATA return false if .nil? || .empty? = () rescue JSON::ParserError OCI.logger.debug('Failed to parse json from environment variable ' + OCI_REGION_METADATA_VAR_NAME) if OCI.logger return false end if check_valid_schema() .each { |_k, v| v.downcase! } return update_regions_map(, region) end false end | 
.reset_imds_settings ⇒ Object
| 280 281 282 283 | # File 'lib/oci/regions.rb', line 280 def self.reset_imds_settings @opt_in_for_imds = false @has_read_imds = false end | 
.update_regions_map(metadata, region) ⇒ Object
| 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | # File 'lib/oci/regions.rb', line 261 def self.update_regions_map(, region) region_identifier = ['regionIdentifier'] realm_key = ['realmKey'] region_key = ['regionKey'] realm_domain_component = ['realmDomainComponent'] # Add region REGION_ENUM.push(region_identifier) unless REGION_ENUM.include?(region_identifier) REGION_SHORT_NAMES_TO_LONG_NAMES[region_key.to_sym] ||= region_identifier REALM_DOMAIN_MAPPING[realm_key.to_sym] ||= realm_domain_component REGION_REALM_MAPPING[region_identifier.to_sym] ||= realm_key REGION_ENUM.include? region end | 
.valid_region?(region) ⇒ Boolean
| 105 106 107 | # File 'lib/oci/regions.rb', line 105 def self.valid_region?(region) REGION_ENUM.include? region end |