Clone this wiki locally
Gerty is a robot character in Duncan Jones' "Moon", with Kevin Spacey's voice :)
Gerty is a codename for a new project that would replace RANCID -- a software package for retrieving router and backing up configurations.
RANCID is a pretty painful piece of code if you start modifying and troubleshooting it. Also adding support for new device types or new command output is quite a frustrating experience.
Gerty requirements and features
- well-designed. No code repetitions, clear modular structure, as much as possible configurable. All device commands are defined in user-editable configuration files.
- pluggable. Allow to add new modules without changing the distribution source. Additional modules are distributed as plug-ins, independent from the main package.
- not Cisco-centric. All vendors are treated equally
- device configurations and output from other "show" commands is stored separately. The user is free to define new "show" command reports and store them separately at their wish.
- support for multi-line commands (
conf t, show something, exit-- quite typical sequence on some non-cisco vendor equipment)
- built-in dispatcher for parallel execution
- ability to run partial reports (e.g. "show run" every 24 hours, and "show ip ospf neighbors" every 2 hours)
- Hooks for automatic output validation
- source code published in a Git repository, so that branching and merging is easy and painless
- can be used as a gateway for automatic inventory and provisioning
Hierarchical device properties
In RANCID, each device is assigned one device type, and then the behaviour is hardcoded in RANCID executables. As a result, you cannot easily add a new command for execution or slightly modify the commands based on device variant or software version.
Gerty deals with the device definitions in a hierarchical way:
- each device belongs to one user-definable class
- it has also a number of user-definable attributes which override the default values from the class definition
- the class definition inherits its properties from parents: Gerty's pre-defined classes, classes defined in plugins, and user-defined classes.