Skip to content
Snippets Groups Projects
  • Mark Goddard's avatar
    56ae2db7
    Performance: Run common role in a separate play · 56ae2db7
    Mark Goddard authored
    The common role was previously added as a dependency to all other roles.
    It would set a fact after running on a host to avoid running twice. This
    had the nice effect that deploying any service would automatically pull
    in the common services for that host. When using tags, any services with
    matching tags would also run the common role. This could be both
    surprising and sometimes useful.
    
    When using Ansible at large scale, there is a penalty associated with
    executing a task against a large number of hosts, even if it is skipped.
    The common role introduces some overhead, just in determining that it
    has already run.
    
    This change extracts the common role into a separate play, and removes
    the dependency on it from all other roles. New groups have been added
    for cron, fluentd, and kolla-toolbox, similar to other services. This
    changes the behaviour in the following ways:
    
    * The common role is now run for all hosts at the beginning, rather than
      prior to their first enabled service
    * Hosts must be in the necessary group for each of the common services
      in order to have that service deployed. This is mostly to avoid
      deploying on localhost or the deployment host
    * If tags are specified for another service e.g. nova, the common role
      will *not* automatically run for matching hosts. The common tag must
      be specified explicitly
    
    The last of these is probably the largest behaviour change. While it
    would be possible to determine which hosts should automatically run the
    common role, it would be quite complex, and would introduce some
    overhead that would probably negate the benefit of splitting out the
    common role.
    
    Partially-Implements: blueprint performance-improvements
    
    Change-Id: I6a4676bf6efeebc61383ec7a406db07c7a868b2a
    56ae2db7
    History
    Performance: Run common role in a separate play
    Mark Goddard authored
    The common role was previously added as a dependency to all other roles.
    It would set a fact after running on a host to avoid running twice. This
    had the nice effect that deploying any service would automatically pull
    in the common services for that host. When using tags, any services with
    matching tags would also run the common role. This could be both
    surprising and sometimes useful.
    
    When using Ansible at large scale, there is a penalty associated with
    executing a task against a large number of hosts, even if it is skipped.
    The common role introduces some overhead, just in determining that it
    has already run.
    
    This change extracts the common role into a separate play, and removes
    the dependency on it from all other roles. New groups have been added
    for cron, fluentd, and kolla-toolbox, similar to other services. This
    changes the behaviour in the following ways:
    
    * The common role is now run for all hosts at the beginning, rather than
      prior to their first enabled service
    * Hosts must be in the necessary group for each of the common services
      in order to have that service deployed. This is mostly to avoid
      deploying on localhost or the deployment host
    * If tags are specified for another service e.g. nova, the common role
      will *not* automatically run for matching hosts. The common tag must
      be specified explicitly
    
    The last of these is probably the largest behaviour change. While it
    would be possible to determine which hosts should automatically run the
    common role, it would be quite complex, and would introduce some
    overhead that would probably negate the benefit of splitting out the
    common role.
    
    Partially-Implements: blueprint performance-improvements
    
    Change-Id: I6a4676bf6efeebc61383ec7a406db07c7a868b2a