func NewClientWithImpersonation()

in pkg/plugin/cloudtrace/client.go [99:132]


func NewClientWithImpersonation(ctx context.Context, jsonCreds []byte, impersonateSA string) (*Client, error) {
	var ts oauth2.TokenSource
	var err error
	if jsonCreds == nil {
		ts, err = impersonate.CredentialsTokenSource(ctx, impersonate.CredentialsConfig{
			TargetPrincipal: impersonateSA,
			Scopes:          []string{"https://www.googleapis.com/auth/cloud-platform"},
		})
	} else {
		ts, err = impersonate.CredentialsTokenSource(ctx, impersonate.CredentialsConfig{
			TargetPrincipal: impersonateSA,
			Scopes:          []string{"https://www.googleapis.com/auth/cloud-platform"},
		}, option.WithCredentialsJSON(jsonCreds))
	}
	if err != nil {
		return nil, err
	}

	client, err := trace.NewClient(ctx, option.WithTokenSource(ts),
		option.WithUserAgent("googlecloud-trace-datasource"))
	if err != nil {
		return nil, err
	}
	rClient, err := resourcemanager.NewService(ctx, option.WithTokenSource(ts),
		option.WithUserAgent("googlecloud-trace-datasource"))
	if err != nil {
		return nil, err
	}

	return &Client{
		tClient: client,
		rClient: rClient.Projects,
	}, nil
}