Overriding class parameters using a collector

251 views
Skip to first unread message

Vladimir Brik

unread,
Oct 17, 2014, 1:29:32 PM10/17/14
to puppet...@googlegroups.com
Hello,

Is it possible to override parameters of a class using a collector?
(similarly to
https://docs.puppetlabs.com/puppet/latest/reference/lang_resources.html#amending-attributes-with-a-collector)

The following gives "Resource type cls doesn't exist" error:

class cls($arg="default"){notify{$arg:}}

node foo
{
Cls <| |> {arg => "override"}
class{'cls':}
}

It works if I change "class" to "define" though.


Thanks,


Vlad

José Luis Ledesma

unread,
Oct 17, 2014, 3:31:32 PM10/17/14
to puppet...@googlegroups.com

Have you tried this?

class cls($arg="default"){notify{$arg:}}

node foo
{
        Class <| name=='cls'|> {arg => "override"}
        class{'cls':}
}

--
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 puppet-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-users/544151EF.7080709%40icecube.wisc.edu.
For more options, visit https://groups.google.com/d/optout.

Henrik Lindberg

unread,
Oct 17, 2014, 7:24:57 PM10/17/14
to puppet...@googlegroups.com
On 2014-17-10 19:29, Vladimir Brik wrote:
> Hello,
>
> Is it possible to override parameters of a class using a collector?
> (similarly to
> https://docs.puppetlabs.com/puppet/latest/reference/lang_resources.html#amending-attributes-with-a-collector)
>

No, that does not work. In 4.0 you will get a specific error like this:
"Error while evaluating a Virtual Query, Classes cannot be collected"

It is not allowed by design, but in earlier versions than 3.7 with
--parser future the error message is really bad.

>
> The following gives "Resource type cls doesn't exist" error:
>
> class cls($arg="default"){notify{$arg:}}
>
> node foo
> {
> Cls <| |> {arg => "override"}
> class{'cls':}
> }
>
> It works if I change "class" to "define" though.
>

Yes, that is allowed.
- henrik


--

Visit my Blog "Puppet on the Edge"
http://puppet-on-the-edge.blogspot.se/

jcbollinger

unread,
Oct 20, 2014, 9:03:19 AM10/20/14
to puppet...@googlegroups.com
Yes.  Classes are not resources, though the DSL downplays the distinction.  There is simply no way to implement class parameter overriding that can work reliably.  On the other hand, defined type instances are resources, just like instances of native types such as File. 


John

Reply all
Reply to author
Forward
0 new messages