On Tuesday, April 29, 2014 11:37:02 AM UTC-5, Alex Scoble wrote: > > Hi John, > > Thanks so much for your feedback. It's extremely useful for me at this > stage of my education in the Puppet DSL. > > Here is the Puppet Users group thread where R.I. Pienaar said that he felt > that using create_resources() was bad: > https://groups.google.com/forum/?fromgroups#!searchin/puppet-users/create_resources$20pienaar/puppet-users/lxYDKf7dgc0/TppS_7BFB9IJ >
For the record, then, R.I. said "I dont tend to use create_resources as I consider it about as bad as eval() :) ". I hardly find that an emphatic and categorical condemnation. In fact, I think that lines up relatively well with my own position on the matter, expressed earlier in this thread. > Responses to comments: > > 2. As far as I can see, I'm using class inheritance solely to make sure > that class parameters are available to the main and sub classes. Maybe you > are seeing that I'm using inheritance where it's not yet strictly needed? > I'll have to look more closely at my code and fix any instances of > inheritance where it's unnecessary. Thanks. > > I think I was looking primarily at class kvm::virtnet. It is not parameterized itself and it does not contain any resource parameter overrides, so it cannot have any need to inherit from class kvm. Moreover, class kvm is parameterized, so *nobody* should inherit from it. It looks like you may be inheriting simply to avoid prefixing class kvm's variables with 'kvm::' where you reference them, but that's poor form even when you do use inheritance. If you are concerned about a possibility that class kvm::virtnet will be evaluated before class kvm, so that the references to kvm's variables are not resolved correctly, then 'include' class kvm instead of inheriting from it. But that's dangerous and nearly pointless. It is dangerous because if class kvm is declared via a parameterized-style declaration, and class kvm::virtnet really is evaluated first, then catalog compilation will fail -- as it would also do under the same circumstances with classes as you present. It is nearly pointless because if you can rely on class kvm being evaluated first so that catalog compilation succeeds, then class kvm::virtnet doesn't need to inherit, include, or do anything else along those lines to work properly. The caveat is that if class kvm is declared via 'include' or (I think) hiera_include(), and class kvm::virtnet is also independently declared, then it is possible for class kvm::virtnet to be evaluated first without the catalog compiler crashing later. One possible approach to that problem is basically just to say "don't do that". If class kvm::virtnet is intended only for internal use by the module, as appears may be the case, then document that clearly and be done with it. None of this is an issue with respect to class kvm::virtnet being declared by class kvm, by the way; if that's the only declaration of class kvm::virtnet then class kvm is certain to be evaluated first. 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+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-users/35a23857-cc2c-445e-adb0-aa8ce404e760%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.