Hi Puppet Users,
I have just started playing with Puppet and Hiera. I am curious if it is possible to control how hiera does variable lookup within a module I am creating to test it.
I have read through the documentation I can find on Hiera and Puppet however I cannot find any documentation suggesting a way to it.
For the record these are the versions that I am using (taken from the Puppetlabs Debian/Devel):
hiera (1.0.0-0.1rc3)
hiera-puppet (1.0.0-0.1rc1-1-g3e68ff0)
puppet-common (3.0.0-0.1rc3puppetlabs1)
puppet (3.0.0-0.1rc3puppetlabs1)
Essentially I would like to define a hiera.yaml file (just the hierarchy and puppet datasource location) within my module and use it to clearly separate Operating System differences to the default state. For example:
------==== {modulepath}/hiera.yaml =======------
:hierarchy:
- %{operatingsystem}
- defaults
:puppet:
:datasource: %{modulename}/config/
------===========------
So in my module directory I could have:
{modulepath}/config/debian.pp
{modulepath}/config/centos.pp
{modulepath}/config/defaults.pp
(It would be even better if in the file name somehow we could grip up similar OS types, ie debian_ubuntu.pp)
I know that I can use puppet logic statements (case statements, if, …) to set variables per OS but I feel that it would be cleaner and clearer to separate the OS specific stuff and it would be easier to update a module for a specific OS and override something set in the defaults.pp file.
So is this possible or is this something that could be considered as a feature request.
Thanks,
Peter.
Hi Puppet Users,
I have just started playing with Puppet and Hiera. I am curious if it is possible to control how hiera does variable lookup within a module I am creating to test it.
I have read through the documentation I can find on Hiera and Puppet however I cannot find any documentation suggesting a way to it.
For the record these are the versions that I am using (taken from the Puppetlabs Debian/Devel):
hiera (1.0.0-0.1rc3)
hiera-puppet (1.0.0-0.1rc1-1-g3e68ff0)
puppet-common (3.0.0-0.1rc3puppetlabs1)
puppet (3.0.0-0.1rc3puppetlabs1)
Essentially I would like to define a hiera.yaml file (just the hierarchy and puppet datasource location) within my module and use it to clearly separate Operating System differences to the default state. For example:
------==== {modulepath}/hiera.yaml =======------
:hierarchy:
- %{operatingsystem}
- defaults
:puppet:
:datasource: %{modulename}/config/
------===========------
So in my module directory I could have:
{modulepath}/config/debian.pp
{modulepath}/config/centos.pp
{modulepath}/config/defaults.pp
(It would be even better if in the file name somehow we could grip up similar OS types, ie debian_ubuntu.pp)
I know that I can use puppet logic statements (case statements, if, …) to set variables per OS but I feel that it would be cleaner and clearer to separate the OS specific stuff and it would be easier to update a module for a specific OS and override something set in the defaults.pp file.
So is this possible or is this something that could be considered as a feature request.
Thanks,
Peter.
On Monday, 18 June 2012 13:02:33 UTC+2, Peter wrote:
Hi Puppet Users,
Essentially I would like to define a hiera.yaml file (just the hierarchy and puppet datasource location) within my module and use it to clearly separate Operating System differences to the default state. For example:
The hiera.yaml file is the global configuration for all paths, however it could contain a path of/etc/puppet/modules/%{module_name}/config/operatingsystem/etc/puppet/modules/%{module_name}/config/defaults
I confess that I don't follow what you are suggesting. Hiera already supports module developers providing data, and module users overlaying their own on top, in the order of their choice. What more would your suggestion provide in that area? And why do module developers need to configure specific locations for (the root of) their data on the filesystem? That should be under the control of module users (== the administrators of the master). What am I missing?
Thanks for taking the time to reply.Yes hiera provides support for module developers ... however I would argue that it is limited for example, the hiera-puppet plugin is hard-coded to only look for values in the module manifest directory for a file called data.pp.This does allow for a very low threshold for module developers to start implementing hiera in their modules (rename their existing params.pp files).I believe by extending the hiera-puppet plugin for module developers to follow a similar convention as hiera for module users would make certain things easier for module developers.By providing the ability to signal the hiera-puppet plugin (using a module-hiera.yaml file (for lack of a better name)) a module developer could reduce complexity and use the DRY principle to setup sane defaults (either in a defaults.pp or in a defaults.yaml file) and than use layer on top specific settings for Operating systems or even Hardware Types (as examples).Sorry I don't have time right now to provide something in depth but a brief example would be setting up ISCSI, the module I currently have has a complex params.pp file for detecting particular setups.As a module developer I am interested in setting up a hierarchy such that from most specific to least specific:* Hardware_platform* Operating System* DefaultsBy defining this in the module-hiera.yaml file it makes it very easy for me to signal to the module user what settings override which.I am not suggesting taking any control from module users, and to be explicit user settings (if set) would override the module variable.Hopefully I have done a better job of explaining what I am thinking.Thanks,Peter.
I believe by extending the hiera-puppet plugin for module developers to follow a similar convention as hiera for module users would make certain things easier for module developers.By providing the ability to signal the hiera-puppet plugin (using a module-hiera.yaml file (for lack of a better name)) a module developer could reduce complexity and use the DRY principle to setup sane defaults (either in a defaults.pp or in a defaults.yaml file) and than use layer on top specific settings for Operating systems or even Hardware Types (as examples).