README.rst

clufter (CLUster FilTER)

$ ./run-dev -h | sed '2,8p;d'

Tool/library for transforming/analyzing cluster configuration formats

While primarily aimed at (CMAN,rgmanager)->(Corosync/CMAN,Pacemaker) cluster
stacks configuration conversion (as per RHEL trend), the command-filter-format
framework (capable of XSLT) offers also other uses through its plugin library.

And nope, the name is not a pun, typo or lisp-pronounced cluster per se :-P

Historical curiosity: clufter logotype should actually make f look similar to ſ letter (long s, in use some 200 years ago) as an explicit association with an s-contained word (conversely, project name searchable in A new alphabetical vocabulary, Gailic and English OCR scan).

Usage

The package can either be used as a separate CLI tool (as per What) or as a Python library, which is the case, e.g., with pcs.

Demo

When properly installed, clufter command should be only these few letters away at your shell prompt. For simplicity, I will stick with what one can use directly after cloning the repository and running ./run-check (to get the helper binary compiled):

$ ./run-dev ccs2pcscmd -gsq tests/filled.conf
pcs cluster auth ju hele
pcs cluster setup --start --name test ju hele --consensus 200 \
  --token 5000 --join 100
sleep 60
pcs cluster cib tmp-cib.xml --config
pcs -f tmp-cib.xml property set stonith-enabled=false
pcs cluster cib-push tmp-cib.xml --config

Here we got a sequence of pcs commands that should get us started with rebuilding a cluster originally based on CMAN/rgmanager stack (with configuration captured in given file), now targetting Corosync/Pacemaker one (for which pcs is one of the high-level configuration tools).

Depending on how sensitive the target environment is (conversely, how much confident of clufter and its output you are), you can either reason about each command, possibly making correction in due course (well, clufter never had ambitions to be fully and reliably automagic), or just pipe that into the shell interpreter, for instance:

$ ./run-dev ccs2pcscmd -gsq tests/filled.conf | sh -x

which will also turn on echoing of what is being executed, just in case.

Take this just as a showcase of the primary goal for this tool, there are many other realated conversion/analysis related tasks featured and discoverable as:

$ ./run-dev -l

Dependencies

Python-wise:

  • lxml (python-lxml)

general:

  • Python 2
    • 2.7 preferred
    • 2.6 with ordereddict or some kind of collections.OrderedDict backport (#929258) required
  • embedded ccs_flatten (originally pacemaker.git/extra/rgmanager) compiled helper
    • suitable C compiler (gcc)
    • libxml2

tests:

  • outside of Python 2.7+, unittest2 (python-unittest2) or, alternatively, nose (python-nose) is needed

Stable version

Official released tarballs (as opposed to what you can download from GitHub) can be found, together with GPG signatures, at https://pagure.io/releases/clufter/ or, alternatively, at https://people.redhat.com/jpokorny/pkgs/clufter/.

Also, the HEAD of master branch in the repository should always point to the latest stable, tagged (and GPG-signed, for that matter) release. Current status of the test run using Travis CI against this branch:

https://travis-ci.org/jnpkrn/clufter.svg?branch=master https://coveralls.io/repos/jnpkrn/clufter/badge.svg?branch=master&service=github

Development version

TBD

https://travis-ci.org/jnpkrn/clufter.svg?branch=next https://coveralls.io/repos/jnpkrn/clufter/badge.svg?branch=next&service=github

Other remarks

Bash completion

For convenience, bash completion is at user's hands by just running within the session:

$ eval "$(clufter --completion-bash)"

Indeed, to make such a feature permanent, the produced script can be appended to or referred from some relevant file like ~/.bashrc, or when bash-completion package installed, stored to ~/.config/bash_completion (per-user) or /usr/share/bash-completion/bash_completion (system-wide). It's also possible this is already performed on the packaging level.

Contact

Common cluster/HA channels falling under ClusterLabs umbrella: