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 = <s>~/</s>

[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/* = <s>parse destdir=".ssh/"</s>

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

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 = <s>Raphaël Barrois</s>
  email = <s>raphael.barrois@example.org</s>
#@else
  name = <s>Xelnor</s>
  email = <s>raphael.barrois@polytechnique.org</s>
#@endif

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

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

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 = <s>Raphaël Barrois</s>
  email = <s>raphael.barrois@example.org</s>
#@else
  name = <s>Xelnor</s>
  email = <s>raphael.barrois@polytechnique.org</s>
#@endif

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

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

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

[user]
#@if work
  name = <s>Raphaël Barrois</s>
  email = <s>raphael.barrois@example.org</s>
#@else
  name = <s>Raphaël "Xelnor" Barrois</s>
  email = <s>raphael.barrois@polytechnique.org</s>
#@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 py3

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page