Re-factor osnailyfacer Fuel Library Module to Be Compatible With Puppet Master

The Fuel Library module deployment/puppet/osnailyfacter is Fuel Library’s composition layer module. In order to be able to use an LCM plugin to Fuel & use a 3rd party service, such as Puppet Master, the modular manifests contained in this module need to be consumable by a 3rd party service.

Problem description

The modular manifests contained inside of ‘osnailyfacter/modular’ were designed for masterless Puppet apply tasks and were therefore placed inside of ‘osnailyfacter/modular’ on purpose to keep them separate from any standard classes located inside the ‘manifests’ directory, where Puppet looks for classes.

Under the Modular Fundamentals guidelines outlined by Puppetlabs, Puppet’s autoinclude looks in ‘manifests’ for Puppet manifests. It does not know anything about any directory named ‘modular’. This means that the top-scope modular manifests located inside of ‘osnailyfacter/modular’ are not currently consumable by a plugin integration with Puppet Master.

Proposed changes

The contents of the modular manifests will be left alone but will be re-organized into wrapper/profile classes under the ‘osnailyfacter/manifests’ directory.

The configuration logic from the the manifests in ‘osnailyfacter/modular’ will be moved into consumable profile classes by copying their contents to a file of the same name, located in the ‘osnailyfacter/manifests’ directory. We will also wrap them in a class declaration, making them essentially profile classes. The manifest inside of ‘osnailyfacter/modular/<manifest name>.pp will be updated to simply include the new profile class. For example:

osnailyfacter/modular/ceph/ceph_pools.pp would have its contents copied to ‘osnailyfacter/manifests/ceph/ceph_pools.pp’ and be wrapped inside of a class declaration for the class ‘ceph::ceph_pools’.

osnailyfacter/modular/ceph/ceph_pools.pp would contain just the following:

‘include ::osnailyfacter::ceph::ceph_pools’

This would include the class and apply the same configuration logic that it did before, but by being wrapped inside of a consumable class inside the ‘osnailyfacter/manifests’ directory, integration of a 3rd party plugin to consume the class is now possible.

The tasks.yaml file can still reference the same ‘modular/<name>.pp’ manifest. By applying the include statement shown above, the manifest will still apply the same configuration logic as it did before. The location of the code has just been reorganized into the ‘manifests’ directory. No new feature is added outside of making top-scope modular manifests consumable by 3rd party plugin integrations.

Web UI




Data model






RPC Protocol


Fuel Client




Fuel Library

Each manifest contained inside of ‘deployment/puppet/osnailyfacter/modular’ will have its contents copied into a corresponding file of the same name in ‘deployment/puppet/osnailyfacter/manifests’ and will be wrapped inside of a class declaration. The manifest in the modular directory will have its contents replaced with an include statement to include the new profile class. For example:

osnailyfacter/modular/ceph/ceph_pools.pp would contain:

‘include ::osnailyfacter::ceph::ceph_pools’

Nothing changes as far as what code is applied or in what order it is applied via the standard granular deployment task doing a puppet apply on the manifest.



Upgrade impact


Security impact


Notifications impact


End user impact

This enables an end user to be able to enable LCM features via a Puppet Master Fuel plugin. Users can then have the ability to manage the day 2 operations and configuration needs of their deployments.

No end user impact if not using a Puppet Master/LCM plugin as this enables compatibility of the osnailyfacter composition layer for both master and masterless puppet approaches.

Performance impact


Deployment impact


Developer impact

After this lands, developers would need to develop modular manifest code inside of ‘deployment/puppet/osnailyfacter/manifests’ rather than under the current directory ‘deployment/puppet/osnailyfacter/modular’.

Infrastructure impact


Documentation impact

Documentation should be updated to reference putting modular manifest code in the manifests directory rather than modular.


The re-factoring work has already been done. We should wait for a quiet period after FF when this work can be rebased and landed.


Primary assignee:
Scott Brimhall (grimlock86)
Other contributors:
Andrew Woodward (xarses)
Mandatory design review:
Andrew Woodward (xarses) Alexandr Didenko (alex_didenko) Sergii Golovatiuk (holser)

Work Items



Testing, QA

Existing CI and BVT tests will catch regression as the same code will be applied for each granular deployment task using a modular manifest.

Acceptance criteria

  • All top-scope modular manifests located inside of ‘osnailyfacter/modular/’ have had their contents copied under a wrapper class inside of the ‘osnailyfacter/manifests’ directory.
  • CI, BVT, & nightly swarm tests are all successful.
  • Fuel deployment is successful while using the same granular deployment tasks as before the change.