Anvil is a forging tool to help build OpenStack components and their dependencies into a complete package-oriented system.

It automates the git checkouts of the OpenStack components, analyzes & builds their dependencies and the components themselves into packages.

It allows a developer to setup an environment using the automatically created packages (and dependencies, ex. RPMs) with the help of anvil configuring the components to work correctly for the developer’s needs.

The distinguishing part from devstack (besides being written in Python and not shell), is that after building those packages (currently RPMs) the same packages can be used later (or at the same time) to actually deploy at a larger scale using tools such as chef, salt, or puppet (to name a few).



A set of configuration files (in yaml format) that is used for common, component, distribution, code origins configuration...

All the yaml configuration files could be found in:

  • conf/templates/keystone/
  • conf/components/
  • conf/distros/
  • conf/origins/
  • subdirectories of conf/personas/


  • Automatically downloading source from git and performing tag/branch checkouts.
  • Automatically verifying and translating requirement files to known pypi/rpm packages.
  • Automatically installing and building missing dependencies (pypi and rpm) for you.
  • Automatically configuring the needed files, symlinks, adjustments, and any patches.


Written in python so it matches the style of other OpenStack components.

Code decoupling

  • Components & actions are isolated as individual classes.
  • Supports installation personas that define what is to be installed, thus decoupling the ‘what’ from the ‘how’.


This encouraging re-use by others...

Extensive logging

  • All commands executed are logged in standard output, all configuration files read/written (and so on).


Debug mode can be activated with -v option...

Package tracking and building

  • Creation of a single RPM set for your installation.
    • This freezes what is needed for that release to a known set of packages and dependencies.
  • Automatically building and/or including all needed dependencies.
  • Includes your distributions existing native/pre-built packages (when and where applicable).
    • For example uncommenting the following in the bootstrap file will allow anvil to find dependencies in the epel repository.