create_resources
<https://docs.puppet.com/puppet/latest/reference/function.html#createresources>
is a function that just loops through a hash of resources and adds them to
the catalog. You can set any key name you want in Hiera and look it up
directly with the hiera* functions. You can do something like this:
class profiles::postfix {
include ::postfix
$configs = hiera('profiles::postfix::configs')
create_resources('postfix::config', $configs)
}
Then just set the 'profiles::postfix::config' key containing the settings
you want anywhere in your Hiera hierarchy. The hiera function lookup will
retrieve the value and this value gets passed to the create_resources
function that will auto-generate the postfix::config resources.
On Wednesday, October 19, 2016 at 10:16:26 AM UTC-4, Ugo Bellavance wrote:
>
> Hi Chadwick,
>
> I'll definitely look a it soon, but can you explain what the lines do?
>
> What would key_name be?
>
> Thanks!
>
> On Wednesday, October 19, 2016 at 8:01:34 AM UTC-4, Chadwick Banning wrote:
>>
>> I looked at the PR (https://github.com/camptocamp/puppet-postfix/pull/50)
>> to add "Hiera support" and it appears that it just add some parameters that
>> take hashes that are used to auto-generate instances of defined types. I
>> wouldn't call this "Hiera support", I'd just call it "convenience
>> parameters".
>>
>> There's no reason you couldn't just do this on your own in a profile (or
>> anywhere else):
>>
>> $configs = hiera('<key_name>')
>> create_resources('postfix::config', $configs)
>>
>> On Tuesday, October 18, 2016 at 1:56:59 PM UTC-4, Ugo Bellavance wrote:
>>>
>>> Hi,
>>>
>>> I am using camptocamp/postfix for my postfix configuration. I
>>> originally defined all my configs manifests but now I would like to change
>>> to using hiera. Unfortunately, this module doesn't support hiera for some
>>> of the configs, so I must define many parameters in the manifests. I
>>> wanted to use hiera for simplicity, but also because I have a very nice use
>>> case: I have one SMTP front-end with its own specific configs
>>> (anti-spam/virus), and a series of regular hosts. Traditionally, all hosts
>>> that are in the same subnet as the Exchange server would use it as
>>> relayhost and all the other hosts use the smtp front-ends. Therefore,
>>> here's what I did:
>>>
>>> hiera.yaml:
>>>
>>> ---
>>> :backends:
>>> # - regex
>>> - yaml
>>> :yaml:
>>> :datadir: /etc/puppet/hiera
>>> #:regex:
>>> # :datadir: /var/lib/hiera
>>> :hierarchy:
>>> - "host/%{fqdn}"
>>> - "domain/%{domain}"
>>> - "env/%{::environment}"
>>> - "os/%{operatingsystem}"
>>> - "osfamily/%{osfamily}"
>>> - "networks/%{network_ens192}"
>>> - "virtual/%{::virtual}"
>>> - common
>>>
>>> This way, I define the exchange server as relayhost for the exchange
>>> network in /etc/puppet/hiera/networks/192.168.155.0.yaml, and set the smtp
>>> frontend as relayhost in /etc/puppet/hiera/common.yaml.
>>>
>>> However, since I can't put all the settings in hiera, I must put some in
>>> the class declaration for the smtp frontends. When I declare the postfix
>>> class in both my default profile and in the smtp frontend profile, I get an
>>> error saying that the class cannot be declared twice (Class[Postfix] is
>>> already declared; cannot redeclare at
>>> /etc/puppet/manifests/nodes/smtp_postfix_servers.pp:19)
>>>
>>> Another solution would be to declare the profile in all my roles, but
>>> it's far from perfect.
>>>
>>> Is there a simple solution?
>>>
>>> I guess that I could do an if based on ipaddress in my default profile,
>>> but I wanted to use hiera as much as possible. Yes I created an issue to
>>> ask for full hiera support.
>>>
>>> Thanks,
>>>
>>> Ugo
>>>
>>
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-users/711dca3a-0a18-4dfe-8928-9ddc05d05f83%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.