FAQ
Hello,

since Puppet 3 hiera is doing auto variable lookup for classes, which in my
view makes the code much clearer simply because we can use
include foo
instead of
class { 'foo':
param1 => value,
param2 => value,
}

However, AFAIK there is no such feature as auto looking parameters for defined
type.
A common case is multiple vhost in Apache.

Even though you can have apache installed as simply as "include apache", you
still have a lot of define (one per vhost), possibly each with different
parameters.

Would it be possible to have hiera looking up for a hash of parameters.

Something like this in hiera:

---
apache_vhost:
website1:
web_param1: 'foo'
web_param2: 'bar'
website2:
web_param1: 'another_foor'
web_param2: 'another_bar'

And in the manifest, this would be invoked as simply as:

node "test" {
include apache
apache_vhost { 'website1': }
apache_vhost { 'website2': }
}

Any ideas on this ? Any plans of implementation ?

Thanks
--
Bruno

--
You received this message because you are subscribed to the Google Groups "Puppet Users" group.
To post to this group, send email to puppet-users@googlegroups.com.
To unsubscribe from this group, send email to puppet-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.

Search Discussions

  • Jcbollinger at Nov 6, 2012 at 9:13 pm

    On Tuesday, November 6, 2012 11:04:46 AM UTC-6, Bruno Leon wrote:
    Hello,

    since Puppet 3 hiera is doing auto variable lookup for classes, which in
    my
    view makes the code much clearer simply because we can use
    include foo
    instead of
    class { 'foo':
    param1 => value,
    param2 => value,
    }

    There are other advantages to using 'include', too, so bravo!

    However, AFAIK there is no such feature as auto looking parameters for
    defined
    type.
    A common case is multiple vhost in Apache.

    You already started answering your own question when you wrote "multiple".
    For a similar feature to work for defined types, it has to be able to
    identify keys to use to lookup parameters for a given instance, preferably
    without risk of colliding with classes or other defined-type instances.

    Even though you can have apache installed as simply as "include apache",
    you
    still have a lot of define (one per vhost), possibly each with different
    parameters.

    Would it be possible to have hiera looking up for a hash of parameters.

    Something like this in hiera:

    ---
    apache_vhost:
    website1:
    web_param1: 'foo'
    web_param2: 'bar'
    website2:
    web_param1: 'another_foor'
    web_param2: 'another_bar'

    And in the manifest, this would be invoked as simply as:

    node "test" {
    include apache
    apache_vhost { 'website1': }
    apache_vhost { 'website2': }
    }

    Any ideas on this ? Any plans of implementation ?

    You can do something very like what you describe via the built-in
    create_resources() function. Given the data exactly as you structured it
    in your example, you could do this:

    # load the vhost data as a hash of hashes
    $vhost_data = hiera('apache_vhost')

    # declare the apache_vhost instances
    create_resources('apache_vhost', $vhost_data)

    # (that's it)

    See
    http://docs.puppetlabs.com/references/3.0.0/function.html#createresources
    for more information.

    Alternatively, you can write hiera lookups into your definition, either in
    addition to or instead of parameters. Or it can be more efficient to load
    hiera data into class variables, and have your definition pull it from
    there:

    class apache::vhost_data {
    $data = hiera('apache_vhost')
    }

    define apache::vhost_wrapper () {
    include 'apache::vhost_data'

    $data = $apache::vhost_data::data[$name]
    apache_vhost { $name:
    web_param1 => $data['web_param1'],
    web_param2 => $data['web_param2']
    }
    }


    John

    --
    You received this message because you are subscribed to the Google Groups "Puppet Users" group.
    To view this discussion on the web visit https://groups.google.com/d/msg/puppet-users/-/wuixUaya3k8J.
    To post to this group, send email to puppet-users@googlegroups.com.
    To unsubscribe from this group, send email to puppet-users+unsubscribe@googlegroups.com.
    For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.
  • Bruno Leon at Nov 7, 2012 at 7:35 pm
    Thanks John for your very interesting reply.
    On Tuesday, November 6, 2012 4:13:03 PM UTC-5, jcbollinger wrote:


    On Tuesday, November 6, 2012 11:04:46 AM UTC-6, Bruno Leon wrote:

    Hello,

    since Puppet 3 hiera is doing auto variable lookup for classes, which in
    my
    view makes the code much clearer simply because we can use
    include foo
    instead of
    class { 'foo':
    param1 => value,
    param2 => value,
    }

    There are other advantages to using 'include', too, so bravo!

    However, AFAIK there is no such feature as auto looking parameters for
    defined
    type.
    A common case is multiple vhost in Apache.

    You already started answering your own question when you wrote
    "multiple". For a similar feature to work for defined types, it has to be
    able to identify keys to use to lookup parameters for a given instance,
    preferably without risk of colliding with classes or other defined-type
    instances.
    Actually the point was that the first key would be the defined type, which
    then has a "subkey" for each instance.
    There is a risk of collision between defined type and class names, but that
    is already the case within Puppet language anyway.

    Even though you can have apache installed as simply as "include apache",
    you
    still have a lot of define (one per vhost), possibly each with different
    parameters.

    Would it be possible to have hiera looking up for a hash of parameters.

    Something like this in hiera:

    ---
    apache_vhost:
    website1:
    web_param1: 'foo'
    web_param2: 'bar'
    website2:
    web_param1: 'another_foor'
    web_param2: 'another_bar'

    And in the manifest, this would be invoked as simply as:

    node "test" {
    include apache
    apache_vhost { 'website1': }
    apache_vhost { 'website2': }
    }

    Any ideas on this ? Any plans of implementation ?

    You can do something very like what you describe via the built-in
    create_resources() function. Given the data exactly as you structured it
    in your example, you could do this:

    # load the vhost data as a hash of hashes
    $vhost_data = hiera('apache_vhost')

    # declare the apache_vhost instances
    create_resources('apache_vhost', $vhost_data)

    # (that's it)

    See
    http://docs.puppetlabs.com/references/3.0.0/function.html#createresourcesfor more information.
    This sound quite perfect for me, I'll give it a try !

    Bruno

    --
    You received this message because you are subscribed to the Google Groups "Puppet Users" group.
    To view this discussion on the web visit https://groups.google.com/d/msg/puppet-users/-/sX8vRr5WLkcJ.
    To post to this group, send email to puppet-users@googlegroups.com.
    To unsubscribe from this group, send email to puppet-users+unsubscribe@googlegroups.com.
    For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppuppet-users @
categoriespuppet
postedNov 6, '12 at 5:04p
activeNov 7, '12 at 7:35p
posts3
users2
websitepuppetlabs.com

2 users in discussion

Bruno Leon: 2 posts Jcbollinger: 1 post

People

Translate

site design / logo © 2022 Grokbase