a MfC@sddlmZddlZddlZddlZddlmZddlmZddlm Z ddl m Z ddl m Z dd l mZmZmZdd lmZdd lmZejZejZejZejZe jZd ed <dZdZdZdZdZdZeeeefZ dZ!d"e!Z#ddiZ$ej%&dddZ'edgdZ(dZ)da*e(j+de(j,de(j-d e(j.diZ/e0e1Z2d!d"Z3d#d$Z4d%d&Z5d'd(Z6dGd)d*Z7d+d,Z8d-d.Z9dHd/d0Z:d1d2Z;d3d4Zd9d:Z?d;d<Z@d=d>ZAdId?d@ZBdJdAdBZCdCdDZDdKdEdFZEdS)L)absolute_importN)Enum)regions_definitions)service_endpoints)six)requests) HTTPErrorConnectionError RetryError) HTTPAdapter)Retryzhttps://auth.{domain}authz{region}.{secondLevelDomain}OCI_REGION_METADATArealmKeyrealmDomainComponent regionKeyregionIdentifierzhttp://169.254.169.254/opc/v2z{}/instance/regionInfo Authorizationz Bearer Oracle~z.ocizregions-config.jsonExternalSources)REGIONS_CFG_FILEENV_VARIMDSSECOND_LEVEL_DOMAIN_FALLBACKOCI_DEFAULT_REALMFTcCs(|}|tvrdS|tvr$t|SdS)NFTlowerREGIONS_SHORT_NAMESREGIONS_check_and_add_region_metadata) region_nameregionr$o/sparta/input/_build_configuration/image_build+validate/lib/bmcenv/lib64/python3.9/site-packages/oci/regions.py is_regionGs r&cCs8|}|tvrdS|tvr dSt|r4|tvr4dSdS)NTFrr#r$r$r%is_region_short_nameQsr(cCs&|}t|std|St|S)NzBCould not find region information in lookups and any other sources)rr(loggerdebugrr'r$r$r%get_region_from_short_namebs  r+cCs2|}t|}t|s&tddSt|SdS)NzTCannot find region information in lookups and other sources, defaulting to OC1 realmoc1)rr+r&r)r* REGION_REALMSr'r$r$r%get_realm_from_regionls  r.cCsP|s|std|r"t||||S|}|tvsB|tvsBt|t||||S)a Returns the base URl for a service, either in the given region or at the specified endpoint. If endpoint and region are provided, endpoint is used. 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 Lookup from Instance Metadata Service is disabled by default. To enable, call enable_instance_metadata_service() The region metadata schema is: { "realmKey" : string, "realmDomainComponent" : string, "regionKey" : string, "regionIdentifier" : string } For example, for the Sydney OC1 region, the schema would be filled out as follows: { "realmKey" : "OC1", "realmDomainComponent" : "oraclecloud.com", "regionKey" : "SYD", "regionIdentifier" : "ap-sydney-1" } If the region still cannot be resolved, we fall back to OC1 realm z+Must supply either a region or an endpoint.) ValueError_format_endpointrr rr! _endpoint_for)servicer#endpointservice_endpoint_templateendpoint_service_namer$r$r% endpoint_forxsr6cCstdttjdS)Nz*Disabling region metadata lookup from IMDSr)r*_set_source_has_been_readrrr$r$r$r%skip_instance_metadata_services r9cCstdttjddS)Nz)Enabling region metadata lookup from IMDSFr7r$r$r$r% enable_instance_metadata_services r:cCs |t|<dSN_has_been_read_external_sources)sourcevaluer$r$r%r8sr8cCst|Sr;r<)r>r$r$r%_get_source_has_been_readsr@cCsttjs tjtattjt |r.)FzFUnknown regionId '{}', default realm is defined, will fallback to '{}'z4Unknown regionId '{}', will assume it's in Realm OC1)r@rrosenvirongetDEFAULT_REALM_ENV_VARNAMEsecond_level_domain_fallbackr8"_set_region_metadata_from_cfg_filer)r*format!_set_region_metadata_from_env_var*_set_region_from_instance_metadata_servicer'r$r$r%r!s(   r!c CsPttjrdSttjtjt}tj|rLt dz6t |d}| }Wdn1sf0YWn:t tfy}zt d|WYd}~dSd}~00zddlm}Wntyt}Yn0zt|}Wn8|y}zt d|WYd}~dSd}~00d}|D] }t|r&t||r&d}q&|SdS) NFz Regions configuration file foundrz>Reading regions configuration file failed because of error: {}rJSONDecodeErrorzODecoding JSON array from regions configuration file failed because of error: {}T)r@rrr8rBpath expanduserREGIONS_CONFIG_FILE_PATHisfiler)r*openreadOSErrorIOErrorrH json.decoderrM ImportErrorr/jsonloads_check_valid_schema!_add_region_information_to_lookup) r#expanded_file_locationregions_config_fileregions_metadata_rawerMregions_metadata_arrayaddedregion_metadatar$r$r%rGs8     *    rGc CsttjrdSttjtjtrzddlm }Wnt yJt }Yn0zt tjt}Wn6|y}ztd|WYd}~dSd}~00t|rt||SdS)NFrrLzCDecoding JSON from environment variable failed because of error: {})r@rrr8rBrCrD OCI_REGION_METADATA_ENV_VAR_NAMErVrMrWr/rXrYr)r*rHrZr[)r#rMrbr_r$r$r%rIs       rIc Cs`ttjrdSttjzZtdgddddd}t}|tt |d|j tdt d}|j }t d |Wn<tttfy}zt d |WYd}~dSd}~00|jd krt d t|j|j dSzdd lm}Wntyt}Yn0zt|}Wn8|yF}zt d|WYd}~dSd}~00t|r\t||SdS)NF)iiiiir)totalstatus_forcelistrSconnectstatus) max_retries) <)timeoutheadersz%Region metadata blob from IMDS is: {}z0Failed to call IMDS service because of error: {}z1HTTP Get Failed: URL: {}, Status: {}, Message: {}rLz4Decoding JSON from IMDS service because of error: {})r@rrr8r rSessionmountGET_REGION_URLr rDMETADATA_AUTH_HEADERStextr)r*rHr r r status_coderVrMrWr/rXrYrZr[)r#retry_strategysresponseregion_metadata_rawr_rMrbr$r$r%rJsD      rJcCsNtD]D}||vr&td|dS||dkrtd|dSqdS)Nz#Key {} not found in region metadataFrz,Value for key {} in region metadata is emptyT)REGION_METADATA_KEYSr)r*rH)rbkeyr$r$r%rZDs rZcCsddt|D}|ttvr0|tt|t<|ttvrL|tt|t<|ttvrh|tt|t<|tt vrt |t||tks||tkrdSdS)NcSsi|]\}}||qSr$)r).0kvr$r$r% Rz5_add_region_information_to_lookup..TF) r iteritemsREGION_KEY_PROPERTY_NAMErREGION_IDENTIFIER_PROPERTY_NAMEr-REALM_KEY_PROPERTY_NAMEREALMS$REALM_DOMAIN_COMPONENT_PROPERTY_NAMEr append)rbr#r$r$r%r[Os    r[cCsb|tvrt|}d|vrR|r@d||}td||||St||||}|St|||SdS)NrAz https://{}.{}zbConstruction endpoint from endpoint service name {} and region {} with '.' as domain. Endpoint: {})rrHr)r*r0 _endpoint)r2r#r4r5r3r$r$r%r1fs r1cCsD|r(|}|r|d|}|dt|St|tj|t|dSdS)N{region}z{secondLevelDomain})r#secondLevelDomain)replace_second_level_domainr0 DOMAIN_FORMATrH)r2r#r4r3r$r$r%rxs  rcCsTttjs tjtattj|t vr6t |}ntrHtt d<d}nd}t |S)Nunknownr,) r@rrrBrCrDrErFr8r-keysr)r#realmr$r$r%rs     rcCsd}|tvr^|dur:|r*d|d}q\td|qj|d}|dkrj|d|d}n t|}|durtd|||j|d}|S) Nzhttps://z .{domain}zUnknown service {!r}rz{domain}zMUnable to format endpoint for service, {} , and service_endpoint_template, {})domain)rSERVICE_ENDPOINTSr/rHfind)r2rr4r5 url_formatposr3r$r$r%r0s    r0)NNNN)T)NNN)N)NN)F __future__rrBrXloggingenumrrrr oci._vendorrroci._vendor.requests.exceptionsr r r oci._vendor.requests.adaptersr oci._vendor.urllib3.util.retryr rr-rr rrrcrrrrryMETADATA_URL_BASErHrqrrrNjoinrPrrErFrrrrr= getLogger__name__r)r&r(r+r.r6r9r:r8r@r!rGrIrJrZr[r1rrr0r$r$r$r%sx             , (0