Clova
Clova is a service orchestration tool designed to simplify the management of servers.
Warning
Clova is currently in early development. Expect breaking changes and do not use for mission critical infrastructure!
Quick Links:
Features
- Source-Of-Truth. Maintain a single source of truth for the definitions of your services with support for version control.
- Central Orchestration. Start, stop and monitor your services from a single location.
- Target Monitoring. View your fleet of servers at a glance and swap services between them with a single command.
- SSH-only. No need for a process to stay running on your server.
Contributing
The Clova project welcomes contributors! Please see the Contributor’s Guide to learn more about the project and how you can get involved.
Licence
Clova and its documentation are licensed under the Mozilla Public License v2.0.
Installation
TBD (probably through Cargo)
Terminology
Walkthrough
Creating A Working Directory
Clova’s operations heavily use the filesystem as a source of truth for your network. You can add this to version control so you can maintain a history of your network and sync your service definitions.
Initialising A Directory
Fundamentally, Clova relies upon two files: clova.toml and service.clova.toml. The first of these holds the global configuration for Clova and the second holds a service definition.
While there is no defined directory structure required for Clova, something like the following is recommended:
.
├── clova.toml
├── service1/
│ ├── service.clova.toml
│ └── (other service files)
└── service2/
├── service.clova.toml
└── (other service files)
Clova can generate this basic structure for you with the following command:
clova init /path/to/directory
Relation Between Services and Directories
Every directory with a service definition file is treated as a service by Clova. You refer to services using the names of these directories.
When services are synchronised to targets, the entire contents of the service directory is copied across. That means you can choose how the service is structured and what technology to use.
As an example, the structure of a Docker Compose service might look like so:
service-dir/
├── data/
├── service.clova.toml
└── compose.yml
Clova would copy across the entire directory, including the service definition file.