Given that: - I've used nodes inheritance with profit for years, in the past - Now I mostly prefer a nodeless setup (with or without ENC) let me spam the list with a fragment of my book Extending Puppet on the topic, as it contains some (controversial?) points of view I'm curious to hear opinions about (note: it was written before knowing about Puppet4 removal of nodes' inheritance, so now, I would not use it in any case) :
Node inheritance done right Node inheritance has a bad reputation. All the Puppet books around, even the ones of a giant like James Turnbull, and the official Puppet Labs documentation describe it as a bad practice, and this puzzles me, as I had successfully used this approach for years. The main problem, I think, has been a documentation issue, as it's not well explained to users that node inheritance makes sense when used to assign variables, but it is dangerous when used to manage class grouping. Let's see an example of a wrong approach to node inheritance: node default { include general } node 'it' inherits default { $zone = 'it' } node 'web01.it.example.com' inherits 'it' { $role = 'web' include role::web } The issue in this extremely simplified example is that when Puppet parses general, it hasn't set the $role and $zone values, and the result for the resources declared in general, depending on them, would probably not be what was expected. When node inheritance is used only to set and eventually override variables and not to include classes, none of these problems are present: node basenode { dns_server = '8.8.8.8' } node 'it' inherits basenode { $zone = 'it' $dns_server = '1.2.3.4' } node 'web01.it.example.com' inherits 'it' { $role = 'web' include site } Now, I would not use this approach anymore, as it requires an include line for each node, and it sets variables at node scope. This implies that while they can be used in the node's classes, we cannot refer to them with a fully qualified name, and so, for example, we cannot use them on a Hiera hierarchy. Still, in situations where an ENC and Hiera are not used and the node names are not descriptive, this is a working and effective way to identify nodes using the benefits of a hierarchical structure, based on inheritance. On Wednesday, January 21, 2015 at 1:38:23 PM UTC+1, Erik Dalén wrote: > > Note that you can also just put the standard classes (and variables) > directly in the top scope. No real need to encapsulate them inside a node > scope (unless you are overriding the value of facts in the manifest, but > that seems like a pretty bad idea anyway). > > A minor difference is also that resources that are inside a node scope > will automatically get tagged with the certname of the node, but resources > and classes in top scope won't. But that automatic tagging is mostly > useless and a waste of space in PuppetDB IMO. > > > > > On Mon Jan 12 2015 at 2:56:06 PM jcbollinger <john.bo...@stjude.org > <javascript:>> wrote: > >> >> >> On Friday, January 9, 2015 at 3:34:41 PM UTC-6, RIlindo Foster wrote: >>> >>> It seems you are using this as a way to classify nodes. Your best option >>> is to use an ENC (Foreman or Hiera) to classify your nodes, ideally using >>> the roles and profiles pattern to abstract your modules. >>> >>> >> >> I strongly disagree. If you don't otherwise need (or want) an ENC, then >> this is not a good reason to start using one. Changing the default node to >> a class and 'include'ing it, as Peter suggested, is much easier, and mostly >> equivalent to node inheritance. If you use node-scoped variables in the >> (original) default node, however, then you have more work to do any way >> around. >> >> >> John >> >> -- >> 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...@googlegroups.com <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/puppet-users/d657abc7-35ba-4c88-84fb-0f714853aa69%40googlegroups.com >> >> <https://groups.google.com/d/msgid/puppet-users/d657abc7-35ba-4c88-84fb-0f714853aa69%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> > -- 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+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-users/5fe91224-7062-4529-b95a-3e62e59128b3%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.