buildlet

package
v0.0.0-...-cca8170 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 1, 2015 License: BSD-3-Clause Imports: 27 Imported by: 0

Documentation

Overview

Package buildlet contains client tools for working with a buildlet server.

Index

Constants

This section is empty.

Variables

View Source
var ErrTimeout = errors.New("buildlet: timeout waiting for command to complete")
View Source
var GCEGate func()

GCEGate optionally specifies a function to run before any GCE API call. It's intended to be used to bound QPS rate to GCE.

View Source
var NoKeyPair = KeyPair{}

NoKeyPair is used by the coordinator to speak http directly to buildlets, inside their firewall, without TLS.

Functions

func DestroyVM

func DestroyVM(ts oauth2.TokenSource, proj, zone, instance string) error

DestroyVM sends a request to delete a VM. Actual VM description is currently (2015-01-19) very slow for no good reason. This function returns once it's been requested, not when it's done.

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

A Client interacts with a single buildlet.

func NewClient

func NewClient(ipPort string, kp KeyPair) *Client

NewClient returns a *Client that will manipulate ipPort, authenticated using the provided keypair.

This constructor returns immediately without testing the host or auth.

func StartNewVM

func StartNewVM(ts oauth2.TokenSource, instName, builderType string, opts VMOpts) (*Client, error)

StartNewVM boots a new VM on GCE and returns a buildlet client configured to speak to it.

func (*Client) Close

func (c *Client) Close() error

func (*Client) Destroy

func (c *Client) Destroy() error

Destroy shuts down the buildlet, destroying all state immediately.

func (*Client) DestroyVM

func (c *Client) DestroyVM(ts oauth2.TokenSource, proj, zone, instance string) error

DestroyVM shuts down the buildlet and destroys the VM instance.

func (*Client) EnableHeartbeats

func (c *Client) EnableHeartbeats()

EnableHeartbeats enables background heartbeating against the peer. It should only be called before the Client is used.

func (*Client) Exec

func (c *Client) Exec(cmd string, opts ExecOpts) (remoteErr, execErr error)

Exec runs cmd on the buildlet.

Two errors are returned: one is whether the command succeeded remotely (remoteErr), and the second (execErr) is whether there were system errors preventing the command from being started or seen to completition. If execErr is non-nil, the remoteErr is meaningless.

func (*Client) GetTar

func (c *Client) GetTar(dir string) (tgz io.ReadCloser, err error)

GetTar returns a .tar.gz stream of the given directory, relative to the buildlet's work dir. The provided dir may be empty to get everything.

func (*Client) IPPort

func (c *Client) IPPort() string

func (*Client) IsBroken

func (c *Client) IsBroken() bool

IsBroken reports whether this client is broken in some way.

func (*Client) ListDir

func (c *Client) ListDir(dir string, opts ListDirOpts, fn func(DirEntry)) error

ListDir lists the contents of a directory. The fn callback is run for each entry.

func (*Client) MarkBroken

func (c *Client) MarkBroken()

MarkBroken marks this client as broken in some way.

func (*Client) ProxyRoundTripper

func (c *Client) ProxyRoundTripper() http.RoundTripper

ProxyRoundTripper returns a RoundTripper that sends HTTP requests directly through to the underlying buildlet, adding auth and X-Buildlet-Proxy headers as necessary. This is really only intended for use by the coordinator.

func (*Client) Put

func (c *Client) Put(r io.Reader, path string, mode os.FileMode) error

Put writes the provided file to path (relative to workdir) and sets mode.

func (*Client) PutTar

func (c *Client) PutTar(r io.Reader, dir string) error

PutTar writes files to the remote buildlet, rooted at the relative directory dir. If dir is empty, they're placed at the root of the buildlet's work directory. The dir is created if necessary. The Reader must be of a tar.gz file.

func (*Client) PutTarFromURL

func (c *Client) PutTarFromURL(tarURL, dir string) error

PutTarFromURL tells the buildlet to download the tar.gz file from tarURL and write it to dir, a relative directory from the workdir. If dir is empty, they're placed at the root of the buildlet's work directory. The dir is created if necessary. The url must be of a tar.gz file.

func (*Client) RemoteName

func (c *Client) RemoteName() string

RemoteName returns the name of this client's buildlet on the coordinator. If this buildlet isn't a remote buildlet created via a buildlet, this returns the empty string.

func (*Client) RemoveAll

func (c *Client) RemoveAll(paths ...string) error

RemoveAll deletes the provided paths, relative to the work directory.

func (*Client) SetCloseFunc

func (c *Client) SetCloseFunc(fn func() error)

SetCloseFunc sets a function to be called when c.Close is called. SetCloseFunc must not be called concurrently with Close.

func (*Client) SetDescription

func (c *Client) SetDescription(v string)

SetDescription sets a short description of where the buildlet connection came from. This is used by the build coordinator status page, mostly for debugging.

func (*Client) SetHTTPClient

func (c *Client) SetHTTPClient(httpClient *http.Client)

SetHTTPClient replaces the underlying HTTP client. It should only be called before the Client is used.

func (*Client) Status

func (c *Client) Status() (Status, error)

Status returns an Status value describing this buildlet.

func (*Client) String

func (c *Client) String() string

func (*Client) URL

func (c *Client) URL() string

URL returns the buildlet's URL prefix, without a trailing slash.

func (*Client) WorkDir

func (c *Client) WorkDir() (string, error)

WorkDir returns the absolute path to the buildlet work directory.

type CoordinatorClient

type CoordinatorClient struct {
	// Auth specifies how to authenticate to the coordinator.
	Auth UserPass

	// Instance optionally specifies the build coordinator to connect
	// to. If zero, the production coordinator is used.
	Instance build.CoordinatorInstance
	// contains filtered or unexported fields
}

A CoordinatorClient makes calls to the build coordinator.

func (*CoordinatorClient) CreateBuildlet

func (cc *CoordinatorClient) CreateBuildlet(buildletType string) (*Client, error)

CreateBuildlet creates a new buildlet of the given type on cc. It may expire at any time. To release it, call Client.Destroy.

func (*CoordinatorClient) NamedBuildlet

func (cc *CoordinatorClient) NamedBuildlet(name string) (*Client, error)

NamedBuildlet returns a buildlet client for the named remote buildlet. Names are not validated. Use Client.Status to check whether the client works.

func (CoordinatorClient) RemoteBuildlets

func (cc CoordinatorClient) RemoteBuildlets() ([]RemoteBuildlet, error)

type DirEntry

type DirEntry struct {
	// contains filtered or unexported fields
}

DirEntry is the information about a file on a buildlet.

func (DirEntry) Digest

func (de DirEntry) Digest() string

func (DirEntry) Name

func (de DirEntry) Name() string

func (DirEntry) String

func (de DirEntry) String() string

type ExecOpts

type ExecOpts struct {
	// Output is the output of stdout and stderr.
	// If nil, the output is discarded.
	Output io.Writer

	// Dir is the directory from which to execute the command.
	// It is optional. If not specified, it defaults to the directory of
	// the command, or the work directory if SystemLevel is set.
	Dir string

	// Args are the arguments to pass to the cmd given to Client.Exec.
	Args []string

	// ExtraEnv are KEY=VALUE pairs to append to the buildlet
	// process's environment.
	ExtraEnv []string

	// Path, if non-nil, specifies the PATH variable of the executed
	// process's environment. A non-nil empty list clears the path.
	// The following expansions apply:
	//   - the string "$PATH" expands to any existing PATH element(s)
	//   - the substring "$WORKDIR" expands to buildlet's temp workdir
	// After expansions, the list is joined with an OS-specific list
	// separator and supplied to the executed process as its PATH
	// environment variable.
	Path []string

	// SystemLevel controls whether the command is run outside of
	// the buildlet's environment.
	SystemLevel bool

	// Debug, if true, instructs to the buildlet to print extra debug
	// info to the output before the command begins executing.
	Debug bool

	// OnStartExec is an optional hook that runs after the 200 OK
	// response from the buildlet, but before the output begins
	// writing to Output.
	OnStartExec func()

	// Timeout is an optional duration before ErrTimeout is returned.
	Timeout time.Duration
}

ExecOpts are options for a remote command invocation.

type KeyPair

type KeyPair struct {
	CertPEM string
	KeyPEM  string
}

KeyPair is the TLS public certificate PEM file and its associated private key PEM file that a builder will use for its HTTPS server. The zero value means no HTTPs, which is used by the coordinator for machines running within a firewall.

func NewKeyPair

func NewKeyPair() (KeyPair, error)

func (KeyPair) IsZero

func (kp KeyPair) IsZero() bool

func (KeyPair) Password

func (kp KeyPair) Password() string

Password returns the SHA1 of the KeyPEM. This is used as the HTTP Basic Auth password.

type ListDirOpts

type ListDirOpts struct {
	// Recursive controls whether the directory is listed
	// recursively.
	Recursive bool

	// Skip are the directories to skip, relative to the directory
	// passed to ListDir. Each item should contain only forward
	// slashes and not start or end in slashes.
	Skip []string

	// Digest controls whether the SHA-1 digests of regular files
	// are returned.
	Digest bool
}

ListDirOpts are options for Client.ListDir.

type RemoteBuildlet

type RemoteBuildlet struct {
	Type    string // "openbsd-386"
	Name    string // "buildlet-adg-openbsd-386-2"
	Created time.Time
	Expires time.Time
}

type Status

type Status struct {
	Version int // buildlet version, coordinator rejects any value less than 1.
}

Status provides status information about the buildlet.

A coordinator can use the provided information to decide what, if anything, to do with a buildlet.

type UserPass

type UserPass struct {
	Username string // "user-$USER"
	Password string // buildlet key
}

type VM

type VM struct {
	// Name is the name of the GCE VM instance.
	// For example, it's of the form "mote-bradfitz-plan9-386-foo",
	// and not "plan9-386-foo".
	Name   string
	IPPort string
	TLS    KeyPair
	Type   string
}

func ListVMs

func ListVMs(ts oauth2.TokenSource, proj, zone string) ([]VM, error)

ListVMs lists all VMs.

type VMOpts

type VMOpts struct {
	// Zone is the GCE zone to create the VM in. Required.
	Zone string

	// ProjectID is the GCE project ID. Required.
	ProjectID string

	// TLS optionally specifies the TLS keypair to use.
	// If zero, http without auth is used.
	TLS KeyPair

	// Optional description of the VM.
	Description string

	// Optional metadata to put on the instance.
	Meta map[string]string

	// to delete the VM.
	DeleteIn time.Duration

	// OnInstanceRequested optionally specifies a hook to run synchronously
	// after the computeService.Instances.Insert call, but before
	// waiting for its operation to proceed.
	OnInstanceRequested func()

	// OnInstanceCreated optionally specifies a hook to run synchronously
	// after the instance operation succeeds.
	OnInstanceCreated func()

	// OnInstanceCreated optionally specifies a hook to run synchronously
	// after the computeService.Instances.Get call.
	OnGotInstanceInfo func()

	// FallbackToFullPrice optionally specifies a hook to return a new
	// GCE instance name if the first one failed to launch
	// as preemptible. (If you use the same name, GCE complains about
	// resources already existing, even if it failed to be created)
	FallbackToFullPrice func() (newInstname string)
}

VMOpts control how new VMs are started.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL