in mixer.go [87:113]
func gcloudToken() (*oauth2.Token, error) {
cmd := exec.Command("gcloud", "config", "config-helper", "--format=json")
cmd.Env = os.Environ()
if *gceMetadataOverrideIP != "" {
cmd.Env = append(cmd.Env,
fmt.Sprintf("GCE_METADATA_HOST=%s", *gceMetadataOverrideIP),
fmt.Sprintf("GCE_METADATA_ROOT=%s", *gceMetadataOverrideIP),
fmt.Sprintf("GCE_METADATA_IP=%s", *gceMetadataOverrideIP),
)
}
out, err := cmd.Output()
if err != nil {
return nil, fmt.Errorf("running the config-helper command: %w", err)
}
var r configHelperResp
if err := json.Unmarshal(out, &r); err != nil {
return nil, fmt.Errorf("parsing the config-helper output: %w", err)
}
return &oauth2.Token{
AccessToken: r.Credential.AccessToken,
// Force refresh token every 10 seconds.
//
// This reduces the latency in picking up changes a user makes to their credentials
// after the mixer startsup.
Expiry: time.Now().Add(10 * time.Second),
}, nil
}