Skip to main content

Generic modularized configuration file manager

Project description

https://travis-ci.org/xolox/python-update-dotdee.svg?branch=master https://coveralls.io/repos/xolox/python-update-dotdee/badge.svg?branch=master

The update-dotdee program makes it easy to manage configuration files with modular contents in the style of Debian and dotdee. The program takes the pathname of a configuration file and updates that file based on the contents of the files in the directory with the same name as the file but ending in .d. It’s currently tested on cPython 2.6, 2.7, 3.4, 3.5, 3.6 and PyPy (2.7).

Installation

The update-dotdee package is available on PyPI which means installation should be as simple as:

$ pip install update-dotdee

There’s actually a multitude of ways to install Python packages (e.g. the per user site-packages directory, virtual environments or just installing system wide) and I have no intention of getting into that discussion here, so if this intimidates you then read up on your options before returning to these instructions ;-).

Usage

There are two ways to use the update-dotdee package: As the command line program update-dotdee and as a Python API. For details about the Python API please refer to the API documentation available on Read the Docs. The command line interface is described below.

Usage: update-dotdee FILENAME

Generate a (configuration) file based on the contents of the files in the directory with the same name as FILENAME but ending in ‘.d’.

If FILENAME exists but the corresponding directory does not exist yet, the directory is created and FILENAME is moved into the directory so that its existing contents are preserved.

Supported options:

Option

Description

-f, --force

Update FILENAME even if it contains local modifications, instead of aborting with an error message.

-u, --use-sudo

Enable the use of “sudo” to update configuration files that are not readable and/or writable for the current user (or the user logged in to a remote system over SSH).

-r, --remote-host=SSH_ALIAS

Operate on a remote system instead of the local system. The SSH_ALIAS argument gives the SSH alias of the remote host.

-v, --verbose

Increase logging verbosity (can be repeated).

-q, --quiet

Decrease logging verbosity (can be repeated).

-h, --help

Show this message and exit.

Example

The /etc/hosts file is a simple example of a configuration file that can be managed using update-dotdee. Individual files in the /etc/hosts.d directory contain snippets that are added to the configuration file on each run. For example:

peter@macbook> sudo update-dotdee /etc/hosts
2013-07-06 19:32:03 macbook INFO Reading file: /etc/hosts.d/1-local
2013-07-06 19:32:03 macbook INFO Reading file: /etc/hosts.d/2-work
2013-07-06 19:32:03 macbook INFO Reading file: /etc/hosts.d/3-ipv6
2013-07-06 20:59:24 macbook INFO Checking for local changes to /etc/hosts
2013-07-06 19:32:03 macbook INFO Writing file: /etc/hosts

How it works

Some notes about how update-dotdee works:

  • If the given file exists but the corresponding directory does not exist yet, the directory is created and the file is moved into the directory (and renamed to local) so that its existing contents are preserved.

  • If the generated file has been modified since the last run, update-dotdee will refuse to overwrite its contents (unless you use the -f or --force option).

  • The files in the .d directory are concatenated in the natural sorting order of the filenames (as implemented by the naturalsort package).

Use cases

Here are some example use cases for update-dotdee:

SSH client configuration

The update-dotdee program was created in 2013 to provide modular SSH client configurations. It was used to generate the ~/.ssh/config file from the contents of the files in the ~/.ssh/config.d directory. This functionality was needed because I developed an SSH client configuration generator based on a database of server metadata and I was looking for a way to update the user’s ~/.ssh/config without trashing the existing (carefully handcrafted) contents.

System wide configuration files

Linux system configuration files like /etc/crypttab, /etc/fstab and /etc/hosts lack modularity and manipulating them using command line tools like awk and sed can be fragile and/or become unwieldy :-). However if you can get your configuration sources (for example Ansible playbooks, Debian packages and manual configuration) to agree on the use of update-dotdee then you have an elegant, robust and predictable alternative.

Contact

The latest version of update-dotdee is available on PyPI and GitHub. For bug reports please create an issue on GitHub. If you have questions, suggestions, etc. feel free to send me an e-mail at peter@peterodding.com.

License

This software is licensed under the MIT license.

© 2017 Peter Odding.

Download files

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

Source Distribution

update-dotdee-3.0.tar.gz (9.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

update_dotdee-3.0-py2.py3-none-any.whl (13.1 kB view details)

Uploaded Python 2Python 3

File details

Details for the file update-dotdee-3.0.tar.gz.

File metadata

  • Download URL: update-dotdee-3.0.tar.gz
  • Upload date:
  • Size: 9.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for update-dotdee-3.0.tar.gz
Algorithm Hash digest
SHA256 25640636db89e361f2f5bd2e44304c1db079da1db3e24bc6bdfe01fa31a1c651
MD5 08c3271e2b803faa53f48c48d6f3933a
BLAKE2b-256 6e641206ce22870d84959c999242372e27ae546fdc52c8a0d6e4b99d57ac5325

See more details on using hashes here.

File details

Details for the file update_dotdee-3.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for update_dotdee-3.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 d44e8a666193452be45e9c1b15843741d2eb34e9bd56f1028f7113745c25ec26
MD5 c6849922980f83c67baead81fa26679e
BLAKE2b-256 ba74fdb259bf108e0a0c72aaa9fc478f0611400249cd3b36394606dd019695b0

See more details on using hashes here.

Supported by

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