api

package
v0.0.0-...-2608902 Latest Latest
Warning

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

Go to latest
Published: Apr 25, 2016 License: AGPL-3.0 Imports: 54 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// PingPeriod defines how often the internal connection health check
	// will run.
	PingPeriod = 1 * time.Minute

	// PingTimeout defines how long a health check can take before we
	// consider it to have failed.
	PingTimeout = 30 * time.Second
)

TODO(fwereade): we should be injecting a Clock; and injecting these values; across the board, instead of using these global variables.

Functions

func CreateCertPool

func CreateCertPool(caCert string) (*x509.CertPool, error)

CreateCertPool creates a new x509.CertPool and adds in the caCert passed in. All certs from the cert directory (/etc/juju/cert.d on ubuntu) are also added.

func RegisterFacadeVersion

func RegisterFacadeVersion(name string, version int) error

RegisterFacadeVersion sets the API client to prefer the given version for the facade.

Types

type AllWatcher

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

AllWatcher holds information allowing us to get Deltas describing changes to the entire model or all models (depending on the watcher type).

func NewAllModelWatcher

func NewAllModelWatcher(caller base.APICaller, id *string) *AllWatcher

NewAllModelWatcher returns an AllWatcher instance which interacts with a watcher created by the WatchAllModels API call.

There should be no need to call this from outside of the api package. It is only used by Client.WatchAllModels in api/controller.

func NewAllWatcher

func NewAllWatcher(caller base.APICaller, id *string) *AllWatcher

NewAllWatcher returns an AllWatcher instance which interacts with a watcher created by the WatchAll API call.

There should be no need to call this from outside of the api package. It is only used by Client.WatchAll in this package.

func (*AllWatcher) Next

func (watcher *AllWatcher) Next() ([]multiwatcher.Delta, error)

Next returns a new set of deltas from a watcher previously created by the WatchAll or WatchAllModels API calls. It will block until there are deltas to return.

func (*AllWatcher) Stop

func (watcher *AllWatcher) Stop() error

Stop shutdowns down a watcher previously created by the WatchAll or WatchAllModels API calls

type CharmInfo

type CharmInfo struct {
	Revision int
	URL      string
	Config   *charm.Config
	Meta     *charm.Meta
	Actions  *charm.Actions
}

CharmInfo holds information about a charm.

type Client

type Client struct {
	base.ClientFacade
	// contains filtered or unexported fields
}

Client represents the client-accessible part of the state.

func (*Client) APIHostPorts

func (c *Client) APIHostPorts() ([][]network.HostPort, error)

APIHostPorts returns a slice of network.HostPort for each API server.

func (*Client) AbortCurrentUpgrade

func (c *Client) AbortCurrentUpgrade() error

AbortCurrentUpgrade aborts and archives the current upgrade synchronisation record, if any.

func (*Client) AddCharm

func (c *Client) AddCharm(curl *charm.URL, channel csparams.Channel) error

AddCharm adds the given charm URL (which must include revision) to the model, if it does not exist yet. Local charms are not supported, only charm store URLs. See also AddLocalCharm() in the client-side API.

If the AddCharm API call fails because of an authorization error when retrieving the charm from the charm store, an error satisfying params.IsCodeUnauthorized will be returned.

func (*Client) AddCharmWithAuthorization

func (c *Client) AddCharmWithAuthorization(curl *charm.URL, channel csparams.Channel, csMac *macaroon.Macaroon) error

AddCharmWithAuthorization is like AddCharm except it also provides the given charmstore macaroon for the juju server to use when obtaining the charm from the charm store. The macaroon is conventionally obtained from the /delegatable-macaroon endpoint in the charm store.

If the AddCharmWithAuthorization API call fails because of an authorization error when retrieving the charm from the charm store, an error satisfying params.IsCodeUnauthorized will be returned.

func (*Client) AddLocalCharm

func (c *Client) AddLocalCharm(curl *charm.URL, ch charm.Charm) (*charm.URL, error)

AddLocalCharm prepares the given charm with a local: schema in its URL, and uploads it via the API server, returning the assigned charm URL.

func (*Client) AddMachines

func (c *Client) AddMachines(machineParams []params.AddMachineParams) ([]params.AddMachinesResult, error)

AddMachines adds new machines with the supplied parameters.

func (*Client) AgentVersion

func (c *Client) AgentVersion() (version.Number, error)

AgentVersion reports the version number of the api server.

func (*Client) CharmInfo

func (c *Client) CharmInfo(charmURL string) (*CharmInfo, error)

CharmInfo returns information about the requested charm.

func (*Client) Close

func (c *Client) Close() error

Close closes the Client's underlying State connection Client is unique among the api.State facades in closing its own State connection, but it is conventional to use a Client object without any access to its underlying state connection.

func (*Client) DestroyMachines

func (c *Client) DestroyMachines(machines ...string) error

DestroyMachines removes a given set of machines.

func (*Client) DestroyModel

func (c *Client) DestroyModel() error

DestroyModel puts the model into a "dying" state, and removes all non-manager machine instances. DestroyModel will fail if there are any manually-provisioned non-manager machines in state.

func (*Client) FindTools

func (c *Client) FindTools(majorVersion, minorVersion int, series, arch string) (result params.FindToolsResult, err error)

FindTools returns a List containing all tools matching the specified parameters.

func (*Client) ForceDestroyMachines

func (c *Client) ForceDestroyMachines(machines ...string) error

ForceDestroyMachines removes a given set of machines and all associated units.

func (*Client) GUIArchives

func (c *Client) GUIArchives() ([]params.GUIArchiveVersion, error)

GUIArchives retrieves information about Juju GUI archives currently present in the Juju controller.

func (*Client) GetModelConstraints

func (c *Client) GetModelConstraints() (constraints.Value, error)

GetModelConstraints returns the constraints for the model.

func (*Client) ModelGet

func (c *Client) ModelGet() (map[string]interface{}, error)

ModelGet returns all model settings.

func (*Client) ModelInfo

func (c *Client) ModelInfo() (params.ModelInfo, error)

ModelInfo returns details about the Juju model.

func (*Client) ModelSet

func (c *Client) ModelSet(config map[string]interface{}) error

ModelSet sets the given key-value pairs in the model.

func (*Client) ModelUUID

func (c *Client) ModelUUID() string

ModelUUID returns the model UUID from the client connection.

func (*Client) ModelUnset

func (c *Client) ModelUnset(keys ...string) error

ModelUnset sets the given key-value pairs in the model.

func (*Client) ModelUserInfo

func (c *Client) ModelUserInfo() ([]params.ModelUserInfo, error)

ModelUserInfo returns information on all users in the model.

func (*Client) PrivateAddress

func (c *Client) PrivateAddress(target string) (string, error)

PrivateAddress returns the private address of the specified machine or unit.

func (*Client) ProvisioningScript

func (c *Client) ProvisioningScript(args params.ProvisioningScriptParams) (script string, err error)

ProvisioningScript returns a shell script that, when run, provisions a machine agent on the machine executing the script.

func (*Client) PublicAddress

func (c *Client) PublicAddress(target string) (string, error)

PublicAddress returns the public address of the specified machine or unit. For a machine, target is an id not a tag.

func (*Client) ResolveCharm

func (c *Client) ResolveCharm(ref *charm.URL) (*charm.URL, error)

ResolveCharm resolves the best available charm URLs with series, for charm locations without a series specified.

func (*Client) Resolved

func (c *Client) Resolved(unit string, retry bool) error

Resolved clears errors on a unit.

func (*Client) RetryProvisioning

func (c *Client) RetryProvisioning(machines ...names.MachineTag) ([]params.ErrorResult, error)

RetryProvisioning updates the provisioning status of a machine allowing the provisioner to retry.

func (*Client) SelectGUIVersion

func (c *Client) SelectGUIVersion(vers version.Number) error

SelectGUIVersion selects which version of the Juju GUI is served by the controller.

func (*Client) SetModelAgentVersion

func (c *Client) SetModelAgentVersion(version version.Number) error

SetModelAgentVersion sets the model agent-version setting to the given value.

func (*Client) SetModelConstraints

func (c *Client) SetModelConstraints(constraints constraints.Value) error

SetModelConstraints specifies the constraints for the model.

func (*Client) Status

func (c *Client) Status(patterns []string) (*params.FullStatus, error)

Status returns the status of the juju model.

func (*Client) StatusHistory

func (c *Client) StatusHistory(kind params.HistoryKind, name string, size int) (*params.StatusHistoryResults, error)

StatusHistory retrieves the last <size> results of <kind:combined|agent|workload|machine|machineinstance|container|containerinstance> status for <name> unit

func (*Client) UploadCharm

func (c *Client) UploadCharm(curl *charm.URL, content io.ReadSeeker) (*charm.URL, error)

UploadCharm sends the content to the API server using an HTTP post.

func (*Client) UploadGUIArchive

func (c *Client) UploadGUIArchive(r io.ReadSeeker, hash string, size int64, vers version.Number) (current bool, err error)

UploadGUIArchive uploads a GUI archive to the controller over HTTPS, and reports about whether the upload updated the current GUI served by Juju.

func (*Client) UploadTools

func (c *Client) UploadTools(r io.ReadSeeker, vers version.Binary, additionalSeries ...string) (tools.List, error)

UploadTools uploads tools at the specified location to the API server over HTTPS.

func (*Client) WatchAll

func (c *Client) WatchAll() (*AllWatcher, error)

WatchAll returns an AllWatcher, from which you can request the Next collection of Deltas.

func (*Client) WatchDebugLog

func (c *Client) WatchDebugLog(args DebugLogParams) (io.ReadCloser, error)

WatchDebugLog returns a ReadCloser that the caller can read the log lines from. Only log lines that match the filtering specified in the DebugLogParams are returned. It returns an error that satisfies errors.IsNotImplemented when the API server does not support the end-point.

type Connection

type Connection interface {

	// This first block of methods is pretty close to a sane Connection interface.
	Close() error
	Broken() <-chan struct{}
	Addr() string
	APIHostPorts() [][]network.HostPort

	// These are a bit off -- ServerVersion is apparently not known until after
	// Login()? Maybe evidence of need for a separate AuthenticatedConnection..?
	Login(name names.Tag, password, nonce string, ms []macaroon.Slice) error
	ServerVersion() (version.Number, bool)

	// APICaller provides the facility to make API calls directly.
	// This should not be used outside the api/* packages or tests.
	base.APICaller

	// ControllerTag returns the model tag of the controller
	// (as opposed to the model tag of the currently connected
	// model inside that controller).
	// This could be defined on base.APICaller.
	ControllerTag() (names.ModelTag, error)

	// Something-or-other expects Ping to exist, and *maybe* the heartbeat
	// *should* be handled outside the State type, but it's also handled
	// inside it as well. We should figure this out sometime -- we should
	// either expose Ping() or Broken() but not both.
	Ping() error

	// RPCClient is apparently exported for testing purposes only, but this
	// seems to indicate *some* sort of layering confusion.
	RPCClient() *rpc.Conn

	// I think this is actually dead code. It's tested, at least, so I'm
	// keeping it for now, but it's not apparently used anywhere else.
	AllFacadeVersions() map[string][]int

	// These methods expose a bunch of worker-specific facades, and basically
	// just should not exist; but removing them is too noisy for a single CL.
	// Client in particular is intimately coupled with State -- and the others
	// will be easy to remove, but until we're using them via manifolds it's
	// prohibitively ugly to do so.
	Client() *Client
	Provisioner() *provisioner.State
	Uniter() (*uniter.State, error)
	Firewaller() *firewaller.State
	Upgrader() *upgrader.State
	Reboot() (reboot.State, error)
	Addresser() *addresser.API
	DiscoverSpaces() *discoverspaces.API
	InstancePoller() *instancepoller.API
	CharmRevisionUpdater() *charmrevisionupdater.State
	Cleaner() *cleaner.API
	MetadataUpdater() *imagemetadata.Client
	UnitAssigner() unitassigner.API
}

Connection represents a connection to a Juju API server.

func Open

func Open(info *Info, opts DialOpts) (Connection, error)

Open establishes a connection to the API server using the Info given, returning a State instance which can be used to make API requests.

See Connect for details of the connection mechanics.

func OpenWithVersion

func OpenWithVersion(info *Info, opts DialOpts, loginVersion int) (Connection, error)

OpenWithVersion uses an explicit version of the Admin facade to call Login on. This allows the caller to pretend to be an older client, and is used only in testing.

type DebugLogParams

type DebugLogParams struct {
	// IncludeEntity lists entity tags to include in the response. Tags may
	// finish with a '*' to match a prefix e.g.: unit-mysql-*, machine-2. If
	// none are set, then all lines are considered included.
	IncludeEntity []string
	// IncludeModule lists logging modules to include in the response. If none
	// are set all modules are considered included.  If a module is specified,
	// all the submodules also match.
	IncludeModule []string
	// ExcludeEntity lists entity tags to exclude from the response. As with
	// IncludeEntity the values may finish with a '*'.
	ExcludeEntity []string
	// ExcludeModule lists logging modules to exclude from the resposne. If a
	// module is specified, all the submodules are also excluded.
	ExcludeModule []string
	// Limit defines the maximum number of lines to return. Once this many
	// have been sent, the socket is closed.  If zero, all filtered lines are
	// sent down the connection until the client closes the connection.
	Limit uint
	// Backlog tells the server to try to go back this many lines before
	// starting filtering. If backlog is zero and replay is false, then there
	// may be an initial delay until the next matching log message is written.
	Backlog uint
	// Level specifies the minimum logging level to be sent back in the response.
	Level loggo.Level
	// Replay tells the server to start at the start of the log file rather
	// than the end. If replay is true, backlog is ignored.
	Replay bool
	// NoTail tells the server to only return the logs it has now, and not
	// to wait for new logs to arrive.
	NoTail bool
}

DebugLogParams holds parameters for WatchDebugLog that control the filtering of the log messages. If the structure is zero initialized, the entire log file is sent back starting from the end, and until the user closes the connection.

type DialOpts

type DialOpts struct {
	// DialAddressInterval is the amount of time to wait
	// before starting to dial another address.
	DialAddressInterval time.Duration

	// Timeout is the amount of time to wait contacting
	// a controller.
	Timeout time.Duration

	// RetryDelay is the amount of time to wait between
	// unsucssful connection attempts.
	RetryDelay time.Duration

	// BakeryClient is the httpbakery Client, which
	// is used to do the macaroon-based authorization.
	// This and the *http.Client inside it are copied
	// by Open, and any RoundTripper field
	// the HTTP client is ignored.
	BakeryClient *httpbakery.Client

	// InsecureSkipVerify skips TLS certificate verification
	// when connecting to the controller. This should only
	// be used in tests, or when verification cannot be
	// performed and the communication need not be secure.
	InsecureSkipVerify bool
}

DialOpts holds configuration parameters that control the Dialing behavior when connecting to a controller.

func DefaultDialOpts

func DefaultDialOpts() DialOpts

DefaultDialOpts returns a DialOpts representing the default parameters for contacting a controller.

type Info

type Info struct {

	// Addrs holds the addresses of the controllers.
	Addrs []string

	// CACert holds the CA certificate that will be used
	// to validate the controller's certificate, in PEM format.
	CACert string

	// ModelTag holds the model tag for the model we are
	// trying to connect to.
	ModelTag names.ModelTag

	// SkipLogin, if true, skips the Login call on connection. It is an
	// error to set Tag, Password, or Macaroons if SkipLogin is true.
	SkipLogin bool `yaml:"-"`

	// Tag holds the name of the entity that is connecting.
	// If this is nil, and the password is empty, no login attempt will be made.
	// (this is to allow tests to access the API to check that operations
	// fail when not logged in).
	Tag names.Tag

	// Password holds the password for the administrator or connecting entity.
	Password string

	// Macaroons holds a slice of macaroon.Slice that may be used to
	// authenticate with the API server.
	Macaroons []macaroon.Slice `yaml:",omitempty"`

	// Nonce holds the nonce used when provisioning the machine. Used
	// only by the machine agent.
	Nonce string `yaml:",omitempty"`
}

Info encapsulates information about a server holding juju state and can be used to make a connection to it.

func (*Info) Validate

func (info *Info) Validate() error

Validate validates the API info.

type OpenFunc

type OpenFunc func(*Info, DialOpts) (Connection, error)

OpenFunc is the usual form of a function that opens an API connection.

type WatchAll

type WatchAll struct {
	AllWatcherId string
}

WatchAll holds the id of the newly-created AllWatcher/AllModelWatcher.

Directories

Path Synopsis
charms provides a client for accessing the charms API.
charms provides a client for accessing the charms API.
Package hostkeyreporter implements the client-side API facade used by the hostkeyreporter worker.
Package hostkeyreporter implements the client-side API facade used by the hostkeyreporter worker.
Package leadership implements the client to the analog leadership service.
Package leadership implements the client to the analog leadership service.
Package logsender implements the API for storing log messages on the API server.
Package logsender implements the API for storing log messages on the API server.
machineactions implements the the api side of running actions on machines
machineactions implements the the api side of running actions on machines
Package meterstatus contains an implementation of the api facade to watch the meter status of a unit for changes and return the current meter status.
Package meterstatus contains an implementation of the api facade to watch the meter status of a unit for changes and return the current meter status.
Package metricsadder contains an implementation of the api facade to add metrics to the state.
Package metricsadder contains an implementation of the api facade to add metrics to the state.
The metricsdebug package contains the implementation of a client to access metrics debug functions within state.
The metricsdebug package contains the implementation of a client to access metrics debug functions within state.
The metricsmanager package contains implementation for an api facade to access metrics functions within state
The metricsmanager package contains implementation for an api facade to access metrics functions within state
Package migrationtarget defines the client side API facade for use by the migration master worker when communicating with the target controller.
Package migrationtarget defines the client side API facade for use by the migration master worker when communicating with the target controller.
Package service provides access to the service api facade.
Package service provides access to the service api facade.

Jump to

Keyboard shortcuts

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