app

package
v0.0.0-...-5650998 Latest Latest
Warning

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

Go to latest
Published: Jun 26, 2014 License: BSD-3-Clause Imports: 29 Imported by: 0

Documentation

Index

Constants

View Source
const (
	BindService = "bind-service"
)
View Source
const (
	InternalAppName = "tsr"
)

Variables

View Source
var (
	ErrAppAlreadyExists = errors.New("there is already an app with this name.")
	ErrAppNotFound      = errors.New("App not found")
)
View Source
var AuthScheme auth.Scheme
View Source
var IncrementDeploy = action.Action{
	Name: "increment-deploy",
	Forward: func(ctx action.FWContext) (action.Result, error) {
		opts, ok := ctx.Params[0].(DeployOptions)
		if !ok {
			return nil, errors.New("First parameter must be DeployOptions")
		}
		err := incrementDeploy(opts.App)
		return nil, err
	},
	Backward: func(ctx action.BWContext) {
	},
	MinParams: 1,
}

Increment is an actions that increments the deploy number.

View Source
var ProvisionerDeploy = action.Action{
	Name: "provisioner-deploy",
	Forward: func(ctx action.FWContext) (action.Result, error) {
		opts, ok := ctx.Params[0].(DeployOptions)
		if !ok {
			return nil, errors.New("First parameter must be DeployOptions")
		}
		writer, ok := ctx.Params[1].(io.Writer)
		if !ok {
			return nil, errors.New("Second parameter must be an io.Writer")
		}
		if opts.ArchiveURL != "" {
			if deployer, ok := Provisioner.(provision.ArchiveDeployer); ok {
				return nil, deployer.ArchiveDeploy(opts.App, opts.ArchiveURL, writer)
			}
		}
		err := Provisioner.(provision.GitDeployer).GitDeploy(opts.App, opts.Version, writer)
		return nil, err
	},
	Backward: func(ctx action.BWContext) {
	},
	MinParams: 2,
}

ProvisionerDeploy is an actions that call the Provisioner.Deploy.

View Source
var UnsupportedPubSubErr = fmt.Errorf("Your queue backend doesn't support pubsub required for log streaming. Using redis as queue is recommended.")

Functions

func AcquireApplicationLock

func AcquireApplicationLock(appName string, owner string, reason string) (bool, error)

Acquire an application lock by setting the lock field in the database. This method is already called by a connection middleware on requests with :app or :appname params that have side-effects.

func CreateApp

func CreateApp(app *App, user *auth.User) error

CreateApp creates a new app.

Creating a new app is a process composed of four steps:

  1. Save the app in the database
  2. Create IAM credentials for the app
  3. Create the git repository using gandalf
  4. Provision units within the provisioner

func Delete

func Delete(app *App) error

Delete deletes an app.

Delete an app is a process composed of three steps:

  1. Destroy the app unit
  2. Unbind all service instances from the app
  3. Remove the app from the database

func Deploy

func Deploy(opts DeployOptions) error

Deploy runs a deployment of an application. It will first try to run an archive based deploy (if opts.ArchiveURL is not empty), and then fallback to the Git based deployment.

func Enqueue

func Enqueue(msgs ...queue.Message)

Enqueue puts the given message in the queue. The app queue is able to handle only messages defined in this package.

Here is a functional example for this function:

msg := queue.Message{Action: app.regenerateApprc, Args: []string{"myapp"}}
app.Enqueue(msg)

func ListDeploys

func ListDeploys(s *service.Service) ([]deploy, error)

func LogRemove

func LogRemove(a *App) error

LogRemove removes the app log.

func PlatformAdd

func PlatformAdd(name string, args map[string]string, w io.Writer) error

PlatformAdd add a new platform to tsuru

func PlatformUpdate

func PlatformUpdate(name string, args map[string]string, w io.Writer) error

func ReleaseApplicationLock

func ReleaseApplicationLock(appName string)

Releases a lock hold on an app, currently it's called by a middleware, however, ideally, it should be called individually by each handler since they might be doing operations in background.

func Swap

func Swap(app1, app2 *App) error

Swap calls the Provisioner.Swap. And updates the app.CName in the database.

Types

type App

type App struct {
	Env            map[string]bind.EnvVar
	Platform       string `bson:"framework"`
	Name           string
	Ip             string
	CName          string
	Teams          []string
	TeamOwner      string
	Owner          string
	State          string
	Deploys        uint
	Memory         int `json:",string"`
	Swap           int `json:",string"`
	UpdatePlatform bool
	Lock           AppLock

	quota.Quota
	// contains filtered or unexported fields
}

App is the main type in tsuru. An app represents a real world application. This struct holds information about the app: its name, address, list of teams that have access to it, used platform, etc.

func GetByName

func GetByName(name string) (*App, error)

GetAppByName queries the database to find an app identified by the given name.

func List

func List(u *auth.User) ([]App, error)

List returns the list of apps that the given user has access to.

If the user does not have acces to any app, this function returns an empty list and a nil error.

func (*App) AddUnits

func (app *App) AddUnits(n uint) error

AddUnits creates n new units within the provisioner, saves new units in the database and enqueues the apprc serialization.

func (*App) AddUnitsToDB

func (app *App) AddUnitsToDB(units []provision.Unit) error

Add provisioned units to database and enqueue messages to bind services and regenerate apprc. It's called as one of the steps started by AddUnits(). It doesn't call the provisioner.

func (*App) Available

func (app *App) Available() bool

Available returns true if at least one of N units is started or unreachable.

func (*App) Envs

func (app *App) Envs() map[string]bind.EnvVar

Env returns app.Env

func (*App) GetDeploys

func (app *App) GetDeploys() uint

func (*App) GetIp

func (app *App) GetIp() string

GetIp returns the ip of the app.

func (*App) GetMemory

func (app *App) GetMemory() int

GetMemory returns the memory limit (in MB) for the app.

func (*App) GetName

func (app *App) GetName() string

GetName returns the name of the app.

func (*App) GetPlatform

func (app *App) GetPlatform() string

GetPlatform returns the platform of the app.

func (*App) GetSwap

func (app *App) GetSwap() int

GetSwap returns the swap limit (in MB) for the app.

func (*App) GetTeams

func (app *App) GetTeams() []auth.Team

GetTeams returns a slice of teams that have access to the app.

func (*App) GetUnits

func (app *App) GetUnits() []bind.Unit

GetUnits returns the internal list of units converted to bind.Unit.

func (*App) GetUpdatePlatform

func (app *App) GetUpdatePlatform() bool

func (*App) Grant

func (app *App) Grant(team *auth.Team) error

Grant allows a team to have access to an app. It returns an error if the team already have access to the app.

func (*App) InstanceEnv

func (app *App) InstanceEnv(name string) map[string]bind.EnvVar

InstanceEnv returns a map of environment variables that belongs to the given service instance (identified by the name only).

TODO(fss): this method should not be exported.

func (*App) LastLogs

func (app *App) LastLogs(lines int, filterLog Applog) ([]Applog, error)

LastLogs returns a list of the last `lines` log of the app, matching the fields in the log instance received as an example.

func (*App) ListDeploys

func (app *App) ListDeploys() ([]deploy, error)

func (*App) Log

func (app *App) Log(message, source, unit string) error

Log adds a log message to the app. Specifying a good source is good so the user can filter where the message come from.

func (*App) MarshalJSON

func (app *App) MarshalJSON() ([]byte, error)

MarshalJSON marshals the app in json format. It returns a JSON object with the following keys: name, framework, teams, units, repository and ip.

func (*App) Ready

func (app *App) Ready() error

func (*App) RemoveUnits

func (app *App) RemoveUnits(n uint) error

RemoveUnits removes n units from the app. It's a process composed of x steps:

  1. Remove units from the provisioner
  2. Remove units from the app list
  3. Update quota

func (*App) Restart

func (app *App) Restart(w io.Writer) error

Restart runs the restart hook for the app, writing its output to w.

func (*App) Revoke

func (app *App) Revoke(team *auth.Team) error

Revoke removes the access from a team. It returns an error if the team do not have access to the app.

func (*App) Run

func (app *App) Run(cmd string, w io.Writer, once bool) error

Run executes the command in app units, sourcing apprc before running the command.

func (*App) SerializeEnvVars

func (app *App) SerializeEnvVars() error

SerializeEnvVars serializes the environment variables of the app. The environment variables will be written the the file /home/application/apprc in all units of the app.

func (*App) SetCName

func (app *App) SetCName(cname string) error

SetCName defines the CName of the app. It updates the attribute, calls the SetCName function on the provisioner and saves the app in the database, returning an error when it cannot save the change in the database or set the CName on the provisioner.

func (*App) SetEnvs

func (app *App) SetEnvs(envs []bind.EnvVar, publicOnly bool) error

SetEnvs saves a list of environment variables in the app. The publicOnly parameter indicates whether only public variables can be overridden (if set to false, SetEnvs may override a private variable).

func (*App) SetTeams

func (app *App) SetTeams(teams []auth.Team)

SetTeams sets the values of the internal te

TODO(fss): this method should not be exported.

func (*App) SetUpdatePlatform

func (app *App) SetUpdatePlatform(check bool) error

func (*App) Start

func (app *App) Start(w io.Writer) error

Start starts the app calling the provisioner.Start method and changing the units state to StatusStarted.

func (*App) Stop

func (app *App) Stop(w io.Writer) error

func (*App) Units

func (app *App) Units() []provision.Unit

Units returns the ilist of units.

func (*App) UnsetCName

func (app *App) UnsetCName() error

func (*App) UnsetEnvs

func (app *App) UnsetEnvs(variableNames []string, publicOnly bool) error

UnsetEnvs removes environment variables from an app, serializing the remaining list of environment variables to all units of the app.

Besides the slice with the name of the variables, this method also takes the parameter publicOnly, which indicates whether only public variables can be overridden (if set to false, setEnvsToApp may override a private variable).

type AppCreationError

type AppCreationError struct {
	Err error
	// contains filtered or unexported fields
}

func (*AppCreationError) Error

func (e *AppCreationError) Error() string

type AppLock

type AppLock struct {
	Locked      bool
	Reason      string
	Owner       string
	AcquireDate time.Time
}

AppLock stores information about a lock hold on the app

func (*AppLock) String

func (l *AppLock) String() string

type Applog

type Applog struct {
	Date    time.Time
	Message string
	Source  string
	AppName string
	Unit    string
}

Applog represents a log entry.

type DeployOptions

type DeployOptions struct {
	App          *App
	Version      string
	Commit       string
	ArchiveURL   string
	OutputStream io.Writer
}

type DuplicatePlatformError

type DuplicatePlatformError struct{}

func (DuplicatePlatformError) Error

type InvalidPlatformError

type InvalidPlatformError struct{}

func (InvalidPlatformError) Error

func (InvalidPlatformError) Error() string

type LogListener

type LogListener struct {
	C <-chan Applog
	// contains filtered or unexported fields
}

func NewLogListener

func NewLogListener(a *App, filterLog Applog) (*LogListener, error)

func (*LogListener) Close

func (l *LogListener) Close() (err error)

type LogWriter

type LogWriter struct {
	App    Logger
	Writer io.Writer
}

func (*LogWriter) Write

func (w *LogWriter) Write(data []byte) (int, error)

Write writes and logs the data.

type Logger

type Logger interface {
	Log(string, string, string) error
}

type ManyTeamsError

type ManyTeamsError struct{}

ManyTeamsError is the error returned when the user has more than one team and tries to create an app without specify a app team owner.

func (ManyTeamsError) Error

func (err ManyTeamsError) Error() string

type NoTeamsError

type NoTeamsError struct{}

NoTeamsError is the error returned when one tries to create an app without any team.

func (NoTeamsError) Error

func (err NoTeamsError) Error() string

type Platform

type Platform struct {
	Name string `bson:"_id"`
}

func Platforms

func Platforms() ([]Platform, error)

Platforms returns the list of available platforms.

Directories

Path Synopsis
Package bind provides interfaces and types for use when binding an app to a service.
Package bind provides interfaces and types for use when binding an app to a service.

Jump to

Keyboard shortcuts

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