admin user is created during the bootstrap process. This account has all privileges across all models.
An agent is a running instance of
jujud. Agents perform different roles and are often described in those terms. There are controller agents, unit agents, and machine agents.
jujud executable binary that’s produced at each release is known as the agent binary. Every agent is a running instance of the agent binary.
An application is typically something that’s installable, such as a database. However, there are exceptions. It’s possible for charm authors to write a charm that treats a collection of utilities that are presented to the controller agent as a single application.
An application contains 1 or more units and is always hosted within a model. Applications have non-exclusive access to their units, as a placement directive can place multiple applications on the same unit.
Interaction between applications is handled by relations.
Before Juju 2.0, applications were known as services.
The bootstrap process establishes the controller on the cloud.
A bundle is a YAML file that describes a complete deployment. That deployment may consist of multiple charms, their applications, constraints, and relations.
There are two strategies for charm writing. The recommended approach is to use the reactive charm framework. An alternative strategy is to use individual scripts to respond to each charm hook.
Charm hooks are an important implementation detail of how charms work. During the lifecycle of an application and its units, the controller execute files within a charm’s
Charm hooks have access to hook tools for implementing their business logic.
juju executable binary. Command-line client that operators interact with.
Constraints are minimum specifications that operators indicate to Juju. When adding units, Juju attempts to use the smallest instance type on the cloud that satisfies all of the constraints.
The controller’s privilege level is restricted when the user’s does not have admin responsibilities.
Authentication credentials to allow Juju to interact programatically with a cloud.
The term deployment is also used in a second sense. When an operator uses Juju to deploy a product or service, the deployment covers all models that work to provide that product or service.
Instance types are identifiers designated by cloud providers that relate to specifications.
When adding units, Juju will attempt to pick the smallest—and therefore cheapest&mdashinstance type that satisfies the unit’s constraints.
The agent binary.
A metric is a key/value pair defined by a charm. Typically the value is numeric.
Juju polls charms every 5 minutes via the
collect-metrics charm hook.
A digital product, such as a website or web service, typically requires several interdependent components to all be available for the product to function. A typical web application sits behind multiple caching layers and stores its data within a database. An ecommerce web application might talk to a fraud detection system, a payment gateway and perhaps also interact with an customer relationship management (CRM) and/or enterprise resource plannind (ERP) system. A Juju model encapsulates all of the components and allows you to treat them as a cohesive unit.
Consider a whiteboard drawing of a digital product. The model is the whiteboard itself, the applications are the main circles and relations are the lines between them.
The model’s main roles are to decrease the cognitive load of understanding the deployment and to allow seperate concerns to be treated differently.
All applications are affected by the model’s
A model maintains exclusive access to the machines that its applications’ units use.
Before Juju 2.0, models were known as environments.
A relation is a relationship between two applications. Relations are directed. One application is the provider and the other is the consumer.
A (network) space is a network partition, protected by firewall rules.
Spaces can use used as a constraint.
Storage, within Juju, means a machine-independent data volume that is provided by the cloud.
Charms can be made to be storage-aware, allowing data storage that persists beyond the lifetime of any given machine.
An external command that works with Juju. When the client subcommand Juju looks for any executable with the prefix
juju-<plugin> For example, when an operator executes
juju smoketest, Juju will look for an executable named
juju-smoketest on your
The term “user” has two meanings within Juju. The plain language definition of “a person interacting with Juju” is most common. A more technical definition is that of a registered user, who has access levels constrained on a per model basis.
To distinguish the two senses of the word, we also use the term operator to refer to people.