# reclass — Recursive external node classification

reclass is an "external node classifier" (ENC) as can be used with automation tools, such as Puppet, Salt, and Ansible. It is also a stand-alone tool for merging data sources recursively.

The purpose of an ENC is to allow a system administrator to maintain an inventory of nodes to be managed, completely separately from the configuration of the automation tool. Usually, the external node classifier completely replaces the tool-specific inventory (such as `site.pp` for Puppet, `ext_pillar`/`master_tops` for Salt, or `/etc/ansible/hosts`).

With respect to the configuration management tool, the ENC then fulfills two jobs:

- it provides information about groups of nodes and group memberships
- it gives access to node-specific information, such as variables

reclass allows you to define your nodes through class inheritance, while always able to override details further up the tree (i.e. in more specific nodes). Think of classes as feature sets, as commonalities between nodes, or as tags. Add to that the ability to nest classes (multiple inheritance is allowed, well-defined, and encouraged), and you can assemble your infrastructure from smaller bits, eliminating duplication and exposing all important parameters to a single location, logically organised. And if that isn't enough, reclass lets you reference other parameters in the very hierarchy you are currently assembling.

## Releases and source code

The latest released reclass version is 1.4.1. Please have a look at the change log for information about recent changes.

For now, reclass is hosted on Github, and you may clone it with the following command:

    git clone https://github.com/madduck/reclass.git

Please see the install instructions for information about distribution packages and tarballs.

## Community

There is a mailing list, where you can bring up anything related to reclass.

For real-time communication, please join the `#reclass` IRC channel on `irc.oftc.net`.

If you're using Salt, you can also ask your reclass-and-Salt-related questions on the mailing list, ideally specifying "reclass" in the subject of your message.

## Licence

reclass is © 2007–2014 by martin f. krafft and released under the terms of the Artistic Licence 2.0.

## Contents

These documents aim to get you started with reclass:

- Installation
  - For Debian users (including Ubuntu)
  - For ArchLinux users
  - Other distributions
  - From source
- reclass concepts
- reclass operations
  - YAML FS storage
  - Data merging
  - Wildcard/Regexp mappings
  - Parameter interpolation
- Using reclass
- External references
- reclass manpage
  - Synopsis
  - Description
  - Options
  - See also
- reclass configuration file
- Using reclass with Salt
  - Quick start
  - Configuration file and master configuration
  - Integration with Salt
- Using reclass with Ansible
  - Quick start with Ansible
  - Integration with Ansible
  - Variable interpolation
- Using reclass with Puppet
- Hacking on reclass
  - Installation
  - Discussing reclass
  - Contributing to reclass
- reclass to-do list
  - Common set of classes
  - Testing framework
  - Configurable file extension
  - Verbosity, debugging
  - Data from CMS for interpolation
  - Membership information
  - Configuration file lookup improvements
  - Adapter class hierarchy
  - Node lists
  - Inventory filters
- ChangeLog

## About the name

"reclass" stands for recursive external node classifier, which is somewhat of a misnomer. I chose the name very early on, based on the recursive nature of the data merging. However, to the user, a better paradigm would be "hierarchical", as s/he does not and should not care too much about the implementation internals. By the time that I realised this, unfortunately, Hiera (Puppet-specific) had already occupied this prefix. Oh well. Once you start using reclass, you'll think recursively as well as hierarchically at the same time. It's really quite simple.