Slight oversight in the type documentation

23 views
Skip to first unread message

Ellison Marks

unread,
Dec 5, 2012, 2:46:05 PM12/5/12
to puppet...@googlegroups.com
So I was looking at the type reference, and noticed that for a lot of the types, no namevar was listed. When I checked the types in the code, for each of those omissions, the namevar was simply "name". Now, it might be self evident that this is the case, but a little documentation couldn't hurt, If not in each type, at least in the section where it describes what namevars are. Something like: "If namevar is not specified, assumed that it is 'name'".

Gary Larizza

unread,
Dec 5, 2012, 3:44:50 PM12/5/12
to puppet...@googlegroups.com
Hi Ellison,

You can do `puppet decribe <type>` from the command line and it should tell you which attribute is the namevar for that type.  Most types use 'name' for their namevar, but some (like file) do not.  Hope that helps!


On Wed, Dec 5, 2012 at 11:46 AM, Ellison Marks <gty...@gmail.com> wrote:
So I was looking at the type reference, and noticed that for a lot of the types, no namevar was listed. When I checked the types in the code, for each of those omissions, the namevar was simply "name". Now, it might be self evident that this is the case, but a little documentation couldn't hurt, If not in each type, at least in the section where it describes what namevars are. Something like: "If namevar is not specified, assumed that it is 'name'".

--
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/-/xtGOPopeEHoJ.
To post to this group, send email to puppet...@googlegroups.com.
To unsubscribe from this group, send email to puppet-users...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.



--

Gary Larizza
Professional Services Engineer
Puppet Labs

Ellison Marks

unread,
Dec 5, 2012, 3:49:49 PM12/5/12
to puppet...@googlegroups.com
Yes, And while the command line tools and looking at the code are as accurate as ever, it would be nice to find that info on the type page as well.

http://docs.puppetlabs.com/references/latest/type.html

Dan White

unread,
Dec 5, 2012, 3:55:16 PM12/5/12
to puppet...@googlegroups.com
The info you are asking for is at the top of the Type Reference page:

The namevar is the parameter used to uniquely identify a type instance. This is the parameter that gets assigned when a string is provided before the colon in a type declaration. In general, only developers will need to worry about which parameter is the namevar.

“Sometimes I think the surest sign that intelligent life exists elsewhere in the universe is that none of it has tried to contact us.”
Bill Waterson (Calvin & Hobbes)
To view this discussion on the web visit https://groups.google.com/d/msg/puppet-users/-/SdYgGWyMuzsJ .

Ellison Marks

unread,
Dec 5, 2012, 4:01:23 PM12/5/12
to puppet...@googlegroups.com
I read that bit. It doesn't identify a default namevar, nor indicate that the "name" parameter is special. Again, maybe it's common sense, but having it spelled out explicitly can't be a bad thing. Also, I dispute that namevars are only important to developers (assuming by developer they mean someone writing a new puppet type). I can use them to save typing when writing a manifest.

Gary Larizza

unread,
Dec 5, 2012, 4:08:27 PM12/5/12
to puppet...@googlegroups.com
On Wed, Dec 5, 2012 at 1:01 PM, Ellison Marks <gty...@gmail.com> wrote:
I read that bit. It doesn't identify a default namevar, nor indicate that the "name" parameter is special. Again, maybe it's common sense, but having it spelled out explicitly can't be a bad thing. Also, I dispute that namevars are only important to developers (assuming by developer they mean someone writing a new puppet type). I can use them to save typing when writing a manifest.

Check the type reference again - I'm seeing the Namevar in bold next to the attribute that is the namevar (http://docs.puppetlabs.com/references/latest/type.html#exec).  Are you seeing something different?

The latter part I would caution against.  Consider the situation where you use the namevar in an exec for its 'command' attribute:

exec { '/bin/somecommand -f -a':
  refreshonly => true,
}

file {'/var/tmp/foo':
  notify => Exec['/bin/somecommand -f -a'],
}

If, in the future, you realize that you need to change the exec resource, now you have to change everything that REFERENCES IT too (since references use the title).  I hit this pretty late in the game in my old job, and it became a bit tedious.
  
 
To view this discussion on the web visit https://groups.google.com/d/msg/puppet-users/-/NAIg8EIroOsJ.

To post to this group, send email to puppet...@googlegroups.com.
To unsubscribe from this group, send email to puppet-users...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.

Ellison Marks

unread,
Dec 5, 2012, 4:14:09 PM12/5/12
to puppet...@googlegroups.com
Ah, point taken about using namevars.

As to the documentation, it lists the namevar, but only where it differs from "name". There are a bunch of types, cron and user to name two, whose namevar is the "name" parameter, but there's no indication in the doc that this is the case. In fact, for these types, there's no indication that they have any namevar at all.

Gary Larizza

unread,
Dec 5, 2012, 4:15:17 PM12/5/12
to puppet...@googlegroups.com
Gotcha,

That would probably be a good ticket for our docs project in Redmine --> http://projects.puppetlabs.com/projects/puppet-docs


To view this discussion on the web visit https://groups.google.com/d/msg/puppet-users/-/kS5QTo0A7noJ.

To post to this group, send email to puppet...@googlegroups.com.
To unsubscribe from this group, send email to puppet-users...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.

Dan White

unread,
Dec 5, 2012, 4:27:20 PM12/5/12
to puppet...@googlegroups.com
Help me out here, please.
I believe I understand the descriptions given by both sides.
What I do not understand is "why is it a concern ?"
How do you plan to use "namevar" that makes this clarification important to you ?

“Sometimes I think the surest sign that intelligent life exists elsewhere in the universe is that none of it has tried to contact us.”
Bill Waterson (Calvin & Hobbes)

----- Original Message -----
From: "Gary Larizza" <ga...@puppetlabs.com>
To: puppet...@googlegroups.com
Sent: Wednesday, December 5, 2012 4:15:17 PM
Subject: Re: [Puppet Users] Slight oversight in the type documentation

Gotcha,

That would probably be a good ticket for our docs project in Redmine --> http://projects.puppetlabs.com/projects/puppet-docs

On Wed, Dec 5, 2012 at 1:14 PM, Ellison Marks < gty...@gmail.com > wrote:

Ah, point taken about using namevars.

As to the documentation, it lists the namevar, but only where it differs from "name". There are a bunch of types, cron and user to name two, whose namevar is the "name" parameter, but there's no indication in the doc that this is the case. In fact, for these types, there's no indication that they have any namevar at all.

On Wednesday, December 5, 2012 1:08:27 PM UTC-8, Gary Larizza wrote:

On Wed, Dec 5, 2012 at 1:01 PM, Ellison Marks < gty...@gmail.com > wrote:

I read that bit. It doesn't identify a default namevar, nor indicate that the "name" parameter is special. Again, maybe it's common sense, but having it spelled out explicitly can't be a bad thing. Also, I dispute that namevars are only important to developers (assuming by developer they mean someone writing a new puppet type). I can use them to save typing when writing a manifest.

Check the type reference again - I'm seeing the Namevar in bold next to the attribute that is the namevar ( http://docs.puppetlabs.com/ references/latest/type.html# exec ). Are you seeing something different?

The latter part I would caution against. Consider the situation where you use the namevar in an exec for its 'command' attribute:

exec { '/bin/somecommand -f -a':
refreshonly => true,
}

file {'/var/tmp/foo':
notify => Exec['/bin/somecommand -f -a'],
}

If, in the future, you realize that you need to change the exec resource, now you have to change everything that REFERENCES IT too (since references use the title). I hit this pretty late in the game in my old job, and it became a bit tedious.

On Wednesday, December 5, 2012 12:55:16 PM UTC-8, Ygor wrote:

The info you are asking for is at the top of the Type Reference page:

The namevar is the parameter used to uniquely identify a type instance. This is the parameter that gets assigned when a string is provided before the colon in a type declaration. In general, only developers will need to worry about which parameter is the namevar.

Ellison Marks

unread,
Dec 5, 2012, 4:38:08 PM12/5/12
to puppet...@googlegroups.com
Thanks for the advice. Ticket filed.

As to why is this a concern, I don't know yet what I might use namevar for (not writing manifests, as I've just been told :P), but if or when that time comes, I want to be able to find out what the namevars are by looking at the documentation.

Dan White

unread,
Dec 5, 2012, 8:07:53 PM12/5/12
to puppet...@googlegroups.com
That is as good a reason as any I can think of: advance planning.
Thanks for sharing.
Reply all
Reply to author
Forward
0 new messages