FABuloso is a python tool to easily organize and deploy an OpenStack architecture using Fabric. FABuloso manages configuration with components within catalogs.


A catalog in FABuloso is a collection of components with certain characteristics in common to deploy an OpenStack architecture. For example, a sample catalog could be folsom which would contain all the components needed to deploy OpenStack Folsom.


Currently we only manage catalogs as git repositories. In the future more options will be supported.


A component is the most fundamental configuration element in FABuloso. It’s just a python module defining some functions and a component.yml (yaml) defining some metadata and services. A service is a list of functions from that python module that will be executed in the given order.

Components are written in Python using Fabric and can be used to install software, edit its configuration files, create users, enable and start system services, and in short, do anything you could do through Fabric.

Component structure

To see how a component looks like we’re going to use the nova component from https://github.com/StackOps/fabuloso-catalog/tree/master/nova.


name: nova
file: nova.py
description: Operations over OpenStack Nova service

    - name: install
      description: Install OpenStack Nova from ubuntu packages
          - install
          - set_config_file
    - name: nova_properties
      description: Set properties of the Nova service
          - nova_properties
    - name: start
      description: Start Nova Service
          - start
    - name: validate
      description: Validates nova to operate with it
          - validate_database
          - validate_credentials
          - validate_rabbitmq

Required fields are:

  • name: The component name
  • file: The path to the python module where service methods are
  • description: A brief description about the component
  • Services: A list of services that this component exposes. At least one service is needed.

A service requires the following fields:

  • name: The name we will use to execute this service
  • description: A brief description about the service behavior
  • methods: A list of function names from the python module


def install(cluster=False):
    """Generate nova configuration. Execute on both servers"""


    # ...

def set_config_file(management_ip, user='nova', password='stackops',
                    auth_port='35357', auth_protocol='http',
                    mysql_username='nova', mysql_password='stackops',
                    mysql_schema='nova', tenant='service',

    f = '/etc/nova/api-paste.ini'

    sudo('sed -i "/volume/d" %s' % f)
    sudo("sed -i 's/admin_password.*$/admin_password = %s/g' %s"
         % (password, f))

    # ...

During the component initialization FABuloso will ask you for the values of properties. Properties are the arguments of the services methods.


A service is the smallest element in a FABuloso component. A component should have atleast one service. Services are defined in the component metadata and could accept properties. To learn more about how to write a component you would take a look at the component structure.


Environments contain the information used by FABuloso to securely connect over SSH to a target host.

Key Pairs

FABuloso can manage keypairs in order to securely connect to the target hosts and execute services. Keypairs will be referenced later when adding environments.

Table Of Contents

Previous topic


Next topic


This Page