artifactory

package module
v0.0.0-...-278740b Latest Latest
Warning

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

Go to latest
Published: Jan 9, 2015 License: Apache-2.0 Imports: 10 Imported by: 0

README

artifactory

Build Status GoDoc Coverage Status

Pluck and store artifacts from Docker images

Usage

See _example/ and integration tests

Testing

# get dependencies
make get

# run tests
make test

Integration Tests

Integration tests require a local docker daemon. You may also need to run docker pull quay.io/rafecolton/docker-builder:latest first. To run full test suite:

make integration

Documentation

Index

Constants

View Source
const AlreadyPresentInSetErrorMessage = "resource with given path already present in set"

AlreadyPresentInSetErrorMessage is the message returned for AlreadyPresentInSetError errors

Variables

This section is empty.

Functions

func IsAlreadyPresentInSetError

func IsAlreadyPresentInSetError(e error) bool

IsAlreadyPresentInSetError checks if error e is of the type AlreadyPresentInSetError

Types

type AlreadyPresentInSetError

type AlreadyPresentInSetError error

AlreadyPresentInSetError is returned on an unsuccessful call to Add()

type Artifactory

type Artifactory interface {
	// Reset zeros out any data structures that store resource information
	// in memory.  It also deletes the corresponding files from the host
	// filesystem
	Reset() error

	// ResetHandle zeros out the files and data from one given handle
	ResetHandle(handle string) error

	// AddResource gives an Artifactory a list of resource paths, for a
	// given handle, that may be requested by the user.  Nominally, this
	// allows the artifactory to populate the data structure without
	// actually retrieving (and returning) the files from a container.
	//
	// I'm not 100% this function will be necessary.
	AddResource(handle string, resourcePaths ...string) error

	// EachResource will return an io.ReadCloser from which the
	// file contents can be read for each resource.  The file contents
	// for each will be a tarball (compressed?) such that it can be
	// passed directly into the docker `archive` package's
	// DecompressSteam or Untar function. The intent is that the
	// resource be untarred / decompressed into
	// `$CONTEXT_DIR/$PREFIX/$RESOURCE_PATH` where $CONTEXT_DIR is the
	// directory from which the dependent image will be built, $PREFIX
	// is an arbitrary prefix (e.g. "inbox"), and $RESOURCE_PATH is the
	// full path at which the resource can be found *inside* the
	// container
	EachResource(handle string, resourceFunc func(*Resource, error) error) error
}

Artifactory is a type that can be used to handle all of the artifact-related interactions for a given build. It is the responsibility of the caller to write the resulting artifacts to the correct place on disk once they are returned

func NewArtifactory

func NewArtifactory(storageDir string) Artifactory

NewArtifactory produces an initialized instance of a struct that implements the Artifactory interface

type NewResourceOptions

type NewResourceOptions struct {
	StorageDir string
	Handle     string
	Path       string
	// contains filtered or unexported fields
}

NewResourceOptions is a struct to disambiguate the options passed to NewResource. Handle should be a valid containerID to ensure that artifact extraction is possible. If being used for testing, Handle may be nil, and resource.present should be set to true.

type RWArtifactory

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

RWArtifactory is an implementation of the Artifactory interface

func (*RWArtifactory) AddResource

func (art *RWArtifactory) AddResource(h string, resourcePaths ...string) error

AddResource gives an Artifactory a list of resource paths, for a given handle, that may be requested by the user. Nominally, this allows the artifactory to populate the data structure without actually retrieving (and returning) the files from a container.

func (*RWArtifactory) EachResource

func (art *RWArtifactory) EachResource(h string, resourceFunc func(*Resource, error) error) error

EachResource will return an io.ReadCloser from which the file contents can be read for each resource. The file contents for each will be a tarball (compressed?) such that it can be passed directly into the docker `archive` package's DecompressSteam or Untar function. The intent is that the resource be untarred / decompressed into `$CONTEXT_DIR/$PREFIX/$RESOURCE_PATH` where $CONTEXT_DIR is the directory from which the dependent image will be built, $PREFIX is an arbitrary prefix (e.g. "inbox"), and $RESOURCE_PATH is the full path at which the resource can be found *inside* the container

func (*RWArtifactory) Reset

func (art *RWArtifactory) Reset() error

Reset zeros out any data structures that store resource information in memory. It also deletes the corresponding files from the host filesystem

func (*RWArtifactory) ResetHandle

func (art *RWArtifactory) ResetHandle(h string) error

ResetHandle zeros out the files and data from one given handle

type Resource

type Resource struct {
	Error error
	// contains filtered or unexported fields
}

Resource is a type that represents a filepath inside the container that corresponds to a real file on disk on the host machine. It has a nested read-write lock such that it may be locked when being concurrently read from / written to.

func NewResource

func NewResource(opts NewResourceOptions) *Resource

NewResource returns a properly initialized resource

func (*Resource) ArtifactBytes

func (r *Resource) ArtifactBytes() ([]byte, error)

ArtifactBytes returns the bytes of the artifact (a `.tar` archive)

func (*Resource) Path

func (r *Resource) Path() string

Path returns, for the given resource, the path inside the container at which it can be found - used as a unique index for a given handle (container ID)

func (*Resource) Reset

func (r *Resource) Reset() error

Reset deletes the underlying extracted archive file and resets the state of the resource

type ResourceSet

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

ResourceSet is a thread-safe hash map of resource values. Resources may be added and their artifacts will be available upon request

func NewResourceSet

func NewResourceSet() *ResourceSet

NewResourceSet creates a fully initialized ResourceSet

func (*ResourceSet) Add

func (set *ResourceSet) Add(r *Resource) error

Add adds resource r to the set. If a resource is already present with the same path (r.Path), Add will return an IsIsPresentInSetError

func (*ResourceSet) Each

func (set *ResourceSet) Each(resourceFunc func(r *Resource, error error) error) error

Each iterates over each resource in the set in a threadsafe manner, yielding each one to function resourceFunc. If resourceFunc returns an error, that error is passed to the subseqwuent invocation.

func (*ResourceSet) Get

func (set *ResourceSet) Get(path string) *Resource

Get returns the resource that exists at path (or nil)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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