luci: Index | Files

package gcemeta

import ""

Package gcemeta implements a subset of GCE metadata server protocol.

It can be used to "trick" Go and Python libraries that use Application Default Credentials into believing they run on GCE so that they request OAuth2 tokens via GCE metadata server (which is implemented by us here).

The implemented subset of the protocol is very limited. Only a few endpoints commonly used to bootstrap GCE auth are supported, and their response format is not tweakable (i.e. alt=json or alt=text have no effect).


Package Files


type Server Uses

type Server struct {
    // Source is used to obtain OAuth2 tokens.
    Source oauth2.TokenSource
    // Email is the email associated with the token.
    Email string
    // Scopes is a list of scopes associated with the token.
    Scopes []string
    // Port is a local TCP port to bind to or 0 to allow the OS to pick one.
    Port int
    // contains filtered or unexported fields

Server runs a local fake GCE metadata server.

func (*Server) Start Uses

func (s *Server) Start(ctx context.Context) (string, error)

Start launches background goroutine with the serving loop.

The provided context is used as base context for request handlers and for logging. The server must be eventually stopped with Stop().

Returns "host:port" address of the launched metadata server.

func (*Server) Stop Uses

func (s *Server) Stop(ctx context.Context) error

Stop closes the listening socket, notifies pending requests to abort and stops the internal serving goroutine.

Safe to call multiple times. Once stopped, the server cannot be started again (make a new instance of Server instead).

Uses the given context for the deadline when waiting for the serving loop to stop.

Package gcemeta imports 13 packages (graph) and is imported by 2 packages. Updated 2020-10-28. Refresh now. Tools for package owners.