See also: How to manage controllers
In software design, a controller is an architectural component responsible for managing the flow of data and interactions within a system, and for mediating between different parts of the system. In Juju, it is defined in the same way, with the mention that:
- It is set up via the bootstrap process.
- It refers to the initial controller unit as well as any units added later on (for machine clouds, for the purpose of high-availability) – each of which includes
- a unit agent,
juju-controller
charm code,- a controller agent (running, among other things, the Juju API server), and
- a copy of
juju-db
, Juju’s internal database.
- It is responsible for implementing all the changes defined by a Juju user via a Juju client post-bootstrap.