Skip to main content

UConf, a smart tool for managing config files

Project description

UConf is a small tool aiming to provide simple handling of configuration files for an heterogeneous computer set.

Its key concepts are:

  • Abstract host-specific config to common features (server, relay, …)

  • Host-specific configuration may range from a single-line change to a whole file rewrite

  • Configuration files are modified in place, not in the source - versionned - repository.

In other words, it provides the following features:

  • Map each host to a set of categories (e.g laptop, server, dev, remote, …)

  • For each category (or combination thereof), list the files to install and their destinations

  • For each file, conditionnally include some parts depending on the active categories

Usage

Configuration

First, create the folder structure:

$ cd ~/conf
$ mkdir .uconf
$ touch .uconf/config

Then, set a few settings:

# .uconf/config

[core]
# Install files to my home folder
target = ~/

[categories]
# The host names "myhostname" belongs to the 'shell' and 'x11' categories
myhostname: shell x11

[files]
# Hosts in the 'shell' category should install
# the 'shell/gitconfig' and 'ssh/config' files
shell: shell/gitconfig ssh/config

# Hosts in the 'shell' but not the 'work' category should install
# our authorized_keys
shell && !work: ssh/authorized_keys

[actions]
# Files located in ~/conf/ssh are parsed and written to ~/.ssh/
ssh/* = parse destdir=".ssh/"

# shell/gitconfig goes to ~/.gitconfig
shell/gitconfig = parse destdir="~/.gitconfig"

Files

The heart of uconf is its file processing engine.

On the surface, it is a simple preprocessor that will parse files based on the categories defined in the .uconf/config file.

In other words, if the file shell/gitconfig contains:

[user]
#@if work
  name = Raphaël Barrois
  email = raphael.barrois@example.org
#@else
  name = Xelnor
  email = raphael.barrois@polytechnique.org
#@endif

And is build on the myhostname from the above example, the output will be:

# ~/.gitconfig
[user]
  name = Xelnor
  email = raphael.barrois@polytechnique.org

Commands

Once your configuration folder is set up, basic commands will be:

$ cd ~/conf
$ uconf make
Building file shell/gitconfig (FileProcessingAction)
Building file ssh/config (FileProcessingAction)
Building file ssh/authorized_keys (FileProcessingAction)

If you have modified a file, just backport its changes:

$ cd ~/conf
$ uconf back shell/gitconfig
Backporting file shell/gitconfig (FileProcessingAction)

This will update the source file (~/conf/shell/gitconfig in this example) to incorporate the changes from the destination file (here, ~/.gitconfig).

This works even if the file contained branches, i.e if the source file was:

[user]
#@if work
  name = Raphaël Barrois
  email = raphael.barrois@example.org
#@else
  name = Xelnor
  email = raphael.barrois@polytechnique.org
#@endif

And the destination (on a non-work machine) was modified to read:

[user]
  name = Raphaël "Xelnor" Barrois
  email = raphael.barrois@polytechnique.org

Then the result of running uconf back shell/gitconfig will be:

[user]
#@if work
  name = Raphaël Barrois
  email = raphael.barrois@example.org
#@else
  name = Raphaël "Xelnor" Barrois
  email = raphael.barrois@polytechnique.org
#@endif

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

uconf-0.4.1.tar.gz (23.7 kB view hashes)

Uploaded Source

Built Distribution

uconf-0.4.1-py3-none-any.whl (24.8 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page