Documentation ¶
Index ¶
- Constants
- Variables
- func BoilerplateConfig() string
- func BootstrapConfig(cfg *config.Config) (*config.Config, error)
- func CheckEnvironment(environ Environ) error
- func ComposeUserData(cfg *cloudinit.MachineConfig, additionalScripts ...string) ([]byte, error)
- func Destroy(env Environ, store configstore.Storage) error
- func DestroyInfo(envName string, store configstore.Storage) error
- func FinishMachineConfig(mcfg *cloudinit.MachineConfig, cfg *config.Config, cons constraints.Value) (err error)
- func IsNoEnv(err error) bool
- func NewBootstrapMachineConfig(stateInfoURL string, privateSystemSSHKey string) *cloudinit.MachineConfig
- func NewMachineConfig(machineID, machineNonce string, machineSeries string, stateInfo *state.Info, ...) *cloudinit.MachineConfig
- func NewStatePolicy() state.Policy
- func PopulateMachineConfig(mcfg *cloudinit.MachineConfig, providerType, authorizedKeys string, ...) error
- func RegisterProvider(name string, p EnvironProvider, alias ...string)
- func VerifyStorage(stor storage.Storage) error
- func WriteEnvirons(path string, fileContents string) (string, error)
- type AuthenticationProvider
- type BootstrapContext
- type ConfigGetter
- type ConfigSource
- type Environ
- func New(config *config.Config) (Environ, error)
- func NewFromAttrs(attrs map[string]interface{}) (Environ, error)
- func NewFromName(name string, store configstore.Storage) (Environ, error)
- func Prepare(cfg *config.Config, ctx BootstrapContext, store configstore.Storage) (Environ, error)
- func PrepareFromName(name string, ctx BootstrapContext, store configstore.Storage) (Environ, error)
- type EnvironProvider
- type EnvironStorage
- type Environs
- type InstanceBroker
- type NoEnvError
- type TaggedPasswordChanger
Constants ¶
const MongoServiceName = "juju-db"
MongoServiceName is the default Upstart service name for Mongo.
const (
VerificationFilename = "bootstrap-verify"
)
File named `VerificationFilename` in the storage will contain `verificationContent`. This is also used to differentiate between Python Juju and juju-core environments, so change the content with care (and update CheckEnvironment below when you do that).
Variables ¶
var ( ErrNotBootstrapped = errors.New("environment is not bootstrapped") ErrNoInstances = errors.New("no instances found") ErrPartialInstances = errors.New("only some instances were found") )
var ( VerifyStorageError error = fmt.Errorf( "provider storage is not writable") InvalidEnvironmentError = fmt.Errorf( "environment is not a juju-core environment") )
var CloudInitOutputLog = path.Join(osenv.LogDir, "cloud-init-output.log")
CloudInitOutputLog is the default cloud-init-output.log file path.
var DataDir = path.Join(osenv.LibDir, "juju")
DataDir is the default data directory. Tests can override this where needed, so they don't need to mess with global system state.
var EmptyStorage storage.StorageReader = emptyStorage{}
EmptyStorage holds a StorageReader object that contains no files and offers no URLs.
Functions ¶
func BoilerplateConfig ¶
func BoilerplateConfig() string
BoilerplateConfig returns a sample juju configuration.
func BootstrapConfig ¶
BootstrapConfig returns a copy of the supplied configuration with the admin-secret and ca-private-key attributes removed. If the resulting config is not suitable for bootstrapping an environment, an error is returned.
func CheckEnvironment ¶
CheckEnvironment checks if an environment has a bootstrap-verify that is written by juju-core commands (as compared to one being written by Python juju).
If there is no bootstrap-verify file in the storage, it is still considered to be a Juju-core environment since early versions have not written it out.
Returns InvalidEnvironmentError on failure, nil otherwise.
func ComposeUserData ¶
func ComposeUserData(cfg *cloudinit.MachineConfig, additionalScripts ...string) ([]byte, error)
ComposeUserData puts together a binary (gzipped) blob of user data. The additionalScripts are additional command lines that you need cloudinit to run on the instance; they are executed before all other cloud-init runcmds. Use with care.
func Destroy ¶
func Destroy(env Environ, store configstore.Storage) error
Destroy destroys the environment and, if successful, its associated configuration data from the given store.
func DestroyInfo ¶
func DestroyInfo(envName string, store configstore.Storage) error
DestroyInfo destroys the configuration data for the named environment from the given store.
func FinishMachineConfig ¶
func FinishMachineConfig(mcfg *cloudinit.MachineConfig, cfg *config.Config, cons constraints.Value) (err error)
FinishMachineConfig sets fields on a MachineConfig that can be determined by inspecting a plain config.Config and the machine constraints at the last moment before bootstrapping. It assumes that the supplied Config comes from an environment that has passed through all the validation checks in the Bootstrap func, and that has set an agent-version (via finding the tools to, use for bootstrap, or otherwise). TODO(fwereade) This function is not meant to be "good" in any serious way: it is better that this functionality be collected in one place here than that it be spread out across 3 or 4 providers, but this is its only redeeming feature.
func NewBootstrapMachineConfig ¶
func NewBootstrapMachineConfig(stateInfoURL string, privateSystemSSHKey string) *cloudinit.MachineConfig
NewBootstrapMachineConfig sets up a basic machine configuration for a bootstrap node. You'll still need to supply more information, but this takes care of the fixed entries and the ones that are always needed. stateInfoURL is the storage URL for the environment's state file.
func NewMachineConfig ¶
func NewMachineConfig(machineID, machineNonce string, machineSeries string, stateInfo *state.Info, apiInfo *api.Info) *cloudinit.MachineConfig
NewMachineConfig sets up a basic machine configuration, for a non-bootstrap node. You'll still need to supply more information, but this takes care of the fixed entries and the ones that are always needed.
func NewStatePolicy ¶
NewStatePolicy returns a state.Policy that is implemented in terms of Environ and related types.
func PopulateMachineConfig ¶
func PopulateMachineConfig(mcfg *cloudinit.MachineConfig, providerType, authorizedKeys string, sslHostnameVerification bool, proxy, aptProxy osenv.ProxySettings, ) error
PopulateMachineConfig is called both from the FinishMachineConfig below, which does have access to the environment config, and from the container provisioners, which don't have access to the environment config. Everything that is needed to provision a container needs to be returned to the provisioner in the ContainerConfig structure. Those values are then used to call this function.
func RegisterProvider ¶
func RegisterProvider(name string, p EnvironProvider, alias ...string)
RegisterProvider registers a new environment provider. Name gives the name of the provider, and p the interface to that provider.
RegisterProvider will panic if the provider name or any of the aliases are registered more than once.
func VerifyStorage ¶
VerifyStorage writes the bootstrap init file to the storage to indicate that the storage is writable.
Types ¶
type AuthenticationProvider ¶
type AuthenticationProvider interface {
SetupAuthentication(machine TaggedPasswordChanger) (*state.Info, *api.Info, error)
}
AuthenticationProvider defines the single method that the provisioner task needs to set up authentication for a machine.
func NewAPIAuthenticator ¶
func NewAPIAuthenticator(st *apiprovisioner.State) (AuthenticationProvider, error)
NewAPIAuthenticator gets the state and api info once from the provisioner API.
func NewEnvironAuthenticator ¶
func NewEnvironAuthenticator(environ Environ) (AuthenticationProvider, error)
NewEnvironAuthenticator gets the state and api info once from the environ.
type BootstrapContext ¶
type BootstrapContext interface { GetStdin() io.Reader GetStdout() io.Writer GetStderr() io.Writer // InterruptNotify starts watching for interrupt signals // on behalf of the caller, sending them to the supplied // channel. InterruptNotify(sig chan<- os.Signal) // StopInterruptNotify undoes the effects of a previous // call to InterruptNotify with the same channel. After // StopInterruptNotify returns, no more signals will be // delivered to the channel. StopInterruptNotify(chan<- os.Signal) }
BootstrapContext is an interface that is passed to Environ.Bootstrap, providing a means of obtaining information about and manipulating the context in which it is being invoked.
type ConfigGetter ¶
type ConfigGetter interface { // Config returns the configuration data with which the Environ was created. // Note that this is not necessarily current; the canonical location // for the configuration data is stored in the state. Config() *config.Config }
ConfigGetter implements access to an environments configuration.
type ConfigSource ¶
type ConfigSource int
ConfigSource represents where some configuration data has come from. TODO(rog) remove this when we don't have to support old environments with no configstore info. See lp#1235217
const ( ConfigFromNowhere ConfigSource = iota ConfigFromInfo ConfigFromEnvirons )
func ConfigForName ¶
func ConfigForName(name string, store configstore.Storage) (*config.Config, ConfigSource, error)
ConfigForName returns the configuration for the environment with the given name from the default environments file. If the name is blank, the default environment will be used. If the configuration is not found, an errors.NotFoundError is returned. If the given store contains an entry for the environment and it has associated bootstrap config, that configuration will be returned. ConfigForName also returns where the configuration was sourced from (this is also valid even when there is an error.
type Environ ¶
type Environ interface { // Name returns the Environ's name. Name() string // Bootstrap initializes the state for the environment, possibly // starting one or more instances. If the configuration's // AdminSecret is non-empty, the administrator password on the // newly bootstrapped state will be set to a hash of it (see // utils.PasswordHash), When first connecting to the // environment via the juju package, the password hash will be // automatically replaced by the real password. // // The supplied constraints are used to choose the initial instance // specification, and will be stored in the new environment's state. // // Bootstrap is responsible for selecting the appropriate tools, // and setting the agent-version configuration attribute prior to // bootstrapping the environment. Bootstrap(ctx BootstrapContext, cons constraints.Value) error // StateInfo returns information on the state initialized // by Bootstrap. StateInfo() (*state.Info, *api.Info, error) // InstanceBroker defines methods for starting and stopping // instances. InstanceBroker // ConfigGetter allows the retrieval of the configuration data. ConfigGetter // SetConfig updates the Environ's configuration. // // Calls to SetConfig do not affect the configuration of // values previously obtained from Storage. SetConfig(cfg *config.Config) error // Instances returns a slice of instances corresponding to the // given instance ids. If no instances were found, but there // was no other error, it will return ErrNoInstances. If // some but not all the instances were found, the returned slice // will have some nil slots, and an ErrPartialInstances error // will be returned. Instances(ids []instance.Id) ([]instance.Instance, error) EnvironStorage // Destroy shuts down all known machines and destroys the // rest of the environment. Note that on some providers, // very recently started instances may not be destroyed // because they are not yet visible. // // When Destroy has been called, any Environ referring to the // same remote environment may become invalid Destroy() error // OpenPorts opens the given ports for the whole environment. // Must only be used if the environment was setup with the // FwGlobal firewall mode. OpenPorts(ports []instance.Port) error // ClosePorts closes the given ports for the whole environment. // Must only be used if the environment was setup with the // FwGlobal firewall mode. ClosePorts(ports []instance.Port) error // Ports returns the ports opened for the whole environment. // Must only be used if the environment was setup with the // FwGlobal firewall mode. Ports() ([]instance.Port, error) // Provider returns the EnvironProvider that created this Environ. Provider() EnvironProvider }
An Environ represents a juju environment as specified in the environments.yaml file.
Due to the limitations of some providers (for example ec2), the results of the Environ methods may not be fully sequentially consistent. In particular, while a provider may retry when it gets an error for an operation, it will not retry when an operation succeeds, even if that success is not consistent with a previous operation.
Even though Juju takes care not to share an Environ between concurrent workers, it does allow concurrent method calls into the provider implementation. The typical provider implementation needs locking to avoid undefined behaviour when the configuration changes.
func NewFromAttrs ¶
NewFromAttrs returns a new environment based on the provided configuration attributes. TODO(rog) remove this function - it's almost always wrong to use it.
func NewFromName ¶
func NewFromName(name string, store configstore.Storage) (Environ, error)
NewFromName opens the environment with the given name from the default environments file. If the name is blank, the default environment will be used. If the given store contains an entry for the environment and it has associated bootstrap config, that configuration will be returned.
func Prepare ¶
func Prepare(cfg *config.Config, ctx BootstrapContext, store configstore.Storage) (Environ, error)
Prepare prepares a new environment based on the provided configuration. If the environment is already prepared, it behaves like New.
func PrepareFromName ¶
func PrepareFromName(name string, ctx BootstrapContext, store configstore.Storage) (Environ, error)
PrepareFromName is the same as NewFromName except that the environment is is prepared as well as opened, and environment information is created using the given store. If the environment is already prepared, it behaves like NewFromName.
type EnvironProvider ¶
type EnvironProvider interface { // Prepare prepares an environment for use. Any additional // configuration attributes in the returned environment should // be saved to be used later. If the environment is already // prepared, this call is equivalent to Open. Prepare(ctx BootstrapContext, cfg *config.Config) (Environ, error) // Open opens the environment and returns it. // The configuration must have come from a previously // prepared environment. Open(cfg *config.Config) (Environ, error) // Validate ensures that config is a valid configuration for this // provider, applying changes to it if necessary, and returns the // validated configuration. // If old is not nil, it holds the previous environment configuration // for consideration when validating changes. Validate(cfg, old *config.Config) (valid *config.Config, err error) // Boilerplate returns a default configuration for the environment in yaml format. // The text should be a key followed by some number of attributes: // `environName: // type: environTypeName // attr1: val1 // ` // The text is used as a template (see the template package) with one extra template // function available, rand, which expands to a random hexadecimal string when invoked. BoilerplateConfig() string // SecretAttrs filters the supplied configuration returning only values // which are considered sensitive. All of the values of these secret // attributes need to be strings. SecretAttrs(cfg *config.Config) (map[string]string, error) // PublicAddress returns this machine's public host name. PublicAddress() (string, error) // PrivateAddress returns this machine's private host name. PrivateAddress() (string, error) }
A EnvironProvider represents a computing and storage provider.
func Provider ¶
func Provider(typ string) (EnvironProvider, error)
Provider returns the previously registered provider with the given type.
type EnvironStorage ¶
type EnvironStorage interface { // Storage returns storage specific to the environment. Storage() storage.Storage }
EnvironStorage implements storage access for an environment
type Environs ¶
type Environs struct { Default string // The name of the default environment. // contains filtered or unexported fields }
Environs holds information about each named environment in an environments.yaml file.
func ReadEnvirons ¶
ReadEnvirons reads the juju environments.yaml file and returns the result of running ParseEnvironments on the file's contents. If path is empty, $HOME/.juju/environments.yaml is used.
func ReadEnvironsBytes ¶
ReadEnvironsBytes parses the contents of an environments.yaml file and returns its representation. An environment with an unknown type will only generate an error when New is called for that environment. Attributes for environments with known types are checked.
type InstanceBroker ¶
type InstanceBroker interface { // StartInstance asks for a new instance to be created, associated with // the provided config in machineConfig. The given config describes the juju // state for the new instance to connect to. The config MachineNonce, which must be // unique within an environment, is used by juju to protect against the // consequences of multiple instances being started with the same machine // id. StartInstance( cons constraints.Value, possibleTools tools.List, machineConfig *cloudinit.MachineConfig, ) (instance.Instance, *instance.HardwareCharacteristics, error) // StopInstances shuts down the given instances. StopInstances([]instance.Instance) error // AllInstances returns all instances currently known to the broker. AllInstances() ([]instance.Instance, error) }
TODO(wallyworld) - we want this in the environs/instance package but import loops stop that from being possible right now.
type NoEnvError ¶
type NoEnvError struct {
// contains filtered or unexported fields
}
NoEnvError indicates the default environment config file is missing.
type TaggedPasswordChanger ¶
TaggedPasswordChanger defines an interface for a entity with a Tag() and SetPassword() methods.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
The imagemetadata package supports locating, parsing, and filtering Ubuntu image metadata in simplestreams format.
|
The imagemetadata package supports locating, parsing, and filtering Ubuntu image metadata in simplestreams format. |
The simplestreams package supports locating, parsing, and filtering metadata in simplestreams format.
|
The simplestreams package supports locating, parsing, and filtering metadata in simplestreams format. |
The tools package supports locating, parsing, and filtering Ubuntu tools metadata in simplestreams format.
|
The tools package supports locating, parsing, and filtering Ubuntu tools metadata in simplestreams format. |