Deploying with Custom Roles

TripleO offers the option of deploying with a user-defined list of roles, each running a user defined list of services (where “role” means group of nodes, e.g “Controller”, and “service” refers to the individual services or configurations e.g “Nova API”).

See Deploying with Composable Services if you only wish to modify the default list of deployed services, or see below if you wish to modify the deployed roles.

Deploying with custom roles

Each role is defined in the roles_data.yaml file (see /usr/share/openstack-tripleo-heat-templates, or the tripleo-heat-templates git repository.)

The data in roles_data.yaml is used to perform templating with jinja2 such that arbitrary user-defined roles may be added, and the default roles may be modified or removed.

The steps to define your custom roles configuration are:

  1. Copy the default roles_data.yaml:

    cp /usr/share/openstack-tripleo-heat-templates/roles_data.yaml ~/my_roles_data.yaml
  2. Edit my_roles_data.yaml to suit your requirements

The roles_data is a simple list of roles, where the only mandatory argument is the name, and several optional additional keys are supported:

  • name: Name of the role e.g “CustomController”, mandatory
  • CountDefault: Default number of nodes, defaults to zero
  • ServicesDefault: List of services, optional, defaults to an empty list See the default roles_data.yaml or overcloud-resource-registry-puppet.j2.yaml for the list of supported services. Both files can be found in the top tripleo-heat-templates folder
  • HostnameFormatDefault: Format string for hostname, optional

For example the following role would deploy a pacemaker managed galera cluster:

- name: Galera
  HostnameFormatDefault: '%stackname%-galera-%index%'
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::Timezone
    - OS::TripleO::Services::Ntp
    - OS::TripleO::Services::Snmp
    - OS::TripleO::Services::Kernel
    - OS::TripleO::Services::Pacemaker
    - OS::TripleO::Services::MySQL
    - OS::TripleO::Services::TripleoPackages
    - OS::TripleO::Services::TripleoFirewall
    - OS::TripleO::Services::SensuClient
    - OS::TripleO::Services::FluentdClient


In the example above, if you wanted to deploy the Galera role on specific nodes you would either use predictable placement Controlling Node Placement and IP Assignment or add a custom parameter called OvercloudGaleraFlavor:

  OvercloudGaleraFlavor: oooq_galera
  1. Pass the modified roles_data on deployment as follows:

    openstack overcloud deploy --templates -r ~/my_roles_data.yaml


It is also possible to copy the entire tripleo-heat-templates tree, and modify the roles_data.yaml file in place, then deploy via –templates <copy of tht>


Note that in your custom roles you may not use any already predefined name So in practice you may not override the following roles: Controller, Compute, BlockStorage, SwiftStorage and CephStorage. You need to use different names instead.