func getTokenSourceAndProjectID()

in pkg/config/config.go [142:174]


func getTokenSourceAndProjectID(ctx context.Context, gceConfigFilePath, gceServiceAccount string) (oauth2.TokenSource, string, error) {
	if gceConfigFilePath != "" {
		klog.V(1).Info("In a GKE cluster")

		config, err := os.Open(gceConfigFilePath)
		if err != nil {
			return nil, "", fmt.Errorf("Could not open cloud provider configuration %s: %v", gceConfigFilePath, err)
		}
		defer config.Close()

		var cfg gce.ConfigFile
		if err := gcfg.FatalOnly(gcfg.ReadInto(&cfg, config)); err != nil {
			return nil, "", fmt.Errorf("Could not read config %v", err)
		}
		klog.Infof("Using GCE provider config %+v", cfg)

		return gce.NewAltTokenSource(cfg.Global.TokenURL, cfg.Global.TokenBody), cfg.Global.ProjectID, nil
	}

	projectID, err := metadata.ProjectID()
	if err != nil {
		return nil, "", fmt.Errorf("Could not fetch project id: %v", err)
	}

	if len(gceServiceAccount) != 0 {
		klog.V(1).Infof("Using ComputeTokenSource(%q)", gceServiceAccount)
		return google.ComputeTokenSource(gceServiceAccount, computev1.ComputeScope), projectID, nil
	}

	klog.V(1).Info("Using DefaultTokenSource")
	tokenSource, err := google.DefaultTokenSource(ctx, computev1.ComputeScope)
	return tokenSource, projectID, err
}