@@ -51,6 +51,9 @@ pub const DEFAULT_GCS_BASE_URL: &str = "https://storage.googleapis.com";
51
51
const DEFAULT_GCS_PLAYLOAD_STRING : & str = "UNSIGNED-PAYLOAD" ;
52
52
const DEFAULT_GCS_SIGN_BLOB_HOST : & str = "storage.googleapis.com" ;
53
53
54
+ const DEFAULT_METADATA_HOST : & str = "metadata.google.internal" ;
55
+ const DEFAULT_METADATA_IP : & str = "169.254.169.254" ;
56
+
54
57
#[ derive( Debug , Snafu ) ]
55
58
pub enum Error {
56
59
#[ snafu( display( "Unable to open service account file from {}: {}" , path. display( ) , source) ) ]
@@ -414,17 +417,31 @@ impl TokenProvider for InstanceCredentialProvider {
414
417
415
418
/// Fetch a token from the metadata server.
416
419
/// Since the connection is local we need to enable http access and don't actually use the client object passed in.
420
+ /// Respects the `GCE_METADATA_HOST`, `GCE_METADATA_ROOT`, and `GCE_METADATA_IP`
421
+ /// environment variables.
422
+ ///
423
+ /// References: <https://googleapis.dev/python/google-auth/latest/reference/google.auth.environment_vars.html>
417
424
async fn fetch_token (
418
425
& self ,
419
426
client : & Client ,
420
427
retry : & RetryConfig ,
421
428
) -> crate :: Result < TemporaryToken < Arc < GcpCredential > > > {
422
- const METADATA_IP : & str = "169.254.169.254" ;
423
- const METADATA_HOST : & str = "metadata" ;
429
+ let metadata_host = if let Ok ( host) = env:: var ( "GCE_METADATA_HOST" ) {
430
+ host
431
+ } else if let Ok ( host) = env:: var ( "GCE_METADATA_ROOT" ) {
432
+ host
433
+ } else {
434
+ DEFAULT_METADATA_HOST . to_string ( )
435
+ } ;
436
+ let metadata_ip = if let Ok ( ip) = env:: var ( "GCE_METADATA_IP" ) {
437
+ ip
438
+ } else {
439
+ DEFAULT_METADATA_IP . to_string ( )
440
+ } ;
424
441
425
442
info ! ( "fetching token from metadata server" ) ;
426
- let response = make_metadata_request ( client, METADATA_HOST , retry)
427
- . or_else ( |_| make_metadata_request ( client, METADATA_IP , retry) )
443
+ let response = make_metadata_request ( client, & metadata_host , retry)
444
+ . or_else ( |_| make_metadata_request ( client, & metadata_ip , retry) )
428
445
. await ?;
429
446
430
447
let token = TemporaryToken {
@@ -469,18 +486,33 @@ impl TokenProvider for InstanceSigningCredentialProvider {
469
486
470
487
/// Fetch a token from the metadata server.
471
488
/// Since the connection is local we need to enable http access and don't actually use the client object passed in.
489
+ /// Respects the `GCE_METADATA_HOST`, `GCE_METADATA_ROOT`, and `GCE_METADATA_IP`
490
+ /// environment variables.
491
+ ///
492
+ /// References: <https://googleapis.dev/python/google-auth/latest/reference/google.auth.environment_vars.html>
472
493
async fn fetch_token (
473
494
& self ,
474
495
client : & Client ,
475
496
retry : & RetryConfig ,
476
497
) -> crate :: Result < TemporaryToken < Arc < GcpSigningCredential > > > {
477
- const METADATA_IP : & str = "169.254.169.254" ;
478
- const METADATA_HOST : & str = "metadata" ;
498
+ let metadata_host = if let Ok ( host) = env:: var ( "GCE_METADATA_HOST" ) {
499
+ host
500
+ } else if let Ok ( host) = env:: var ( "GCE_METADATA_ROOT" ) {
501
+ host
502
+ } else {
503
+ DEFAULT_METADATA_HOST . to_string ( )
504
+ } ;
505
+
506
+ let metadata_ip = if let Ok ( ip) = env:: var ( "GCE_METADATA_IP" ) {
507
+ ip
508
+ } else {
509
+ DEFAULT_METADATA_IP . to_string ( )
510
+ } ;
479
511
480
512
info ! ( "fetching token from metadata server" ) ;
481
513
482
- let email = make_metadata_request_for_email ( client, METADATA_HOST , retry)
483
- . or_else ( |_| make_metadata_request_for_email ( client, METADATA_IP , retry) )
514
+ let email = make_metadata_request_for_email ( client, & metadata_host , retry)
515
+ . or_else ( |_| make_metadata_request_for_email ( client, & metadata_ip , retry) )
484
516
. await ?;
485
517
486
518
let token = TemporaryToken {
0 commit comments