Rustea - Simple configuration managment with Gitea
Rustea is a simple configuration helper tool which I wrote to keep the configuration zoo under control. This is far from standard definitions about change and configuration management and is meant to solve only a litte part of this process. At its heart rustea provides a direct interface from some unix-like OS to a Gitea instance running anywhere. It offers the possibility to push or pull configurations to a remote repository on the gitea instance.
Why another tool
The need arises from the overhelming possibilites offered by other full-fledged solutions. I run a certain amount of virtual machines which has only outgoing network access but no ingoing one. `ssh` is not installed on every machine and there is no need for it, since the machines can be configured and handled by a local master process. Also many tools increase the attack surface by needing many additional packages. Thus, lead me to develop a small Rust cli tool which can be used like git and directly stores files in a remote git repository. So, only network access is required and no incoming ports needed to be open.
How does it work
Rustea uses a remote repository on some gitea instance. The access is protected by API tokens which can directly created from a local machine. The remote repository contains folders which are called feature sets. A feature set contains script files (executables) and configration files. The path of a configration file in a feature set resembles the local canonicalized path on the machine. script files are stored in the `script` directory of a feature set and also within a single configurable directory on a local machine.
This enables one to store local configuration files under version control on another machine and to seperate configration files of many machines into distinct features which can be re-used. For example, I use monit for monitoring many machines but the setup and configuration files are mostly the same. Thus, I have a feature set called monit which stores the configuration files for monit (`/etc/monit/monitrc`, `/etc/monit/conf-available`) and I can pull them on every needed machine and enable the modules I need.
Usage
Preconditions:
- Gitea with enabled API
- Some initialized repository
To use `rustea` either checkout the code:
1git clone https://github.com/santifa/rustea.git
2cd rustea
3cargo build --release
or use the pre-build binary:
1curl -L https://github.com/santifa/rustea/releases/download/v0.1.4/rustea-min > /usr/local/bin/rustea
2# or
3curl -L https://github.com/santifa/rustea/releases/download/v0.1.4/rustea > /usr/local/bin/rustea
Afterwards, create a new configuration with `rustea init
Conclusion
This project is relativly young and contribution and feedback is highly welcome. So, checkout the code or use the pre-built binary.