Issue #11182 has been updated by Matt Robinson.

Assignee set to Matt Robinson
Branch set to 
https://github.com/mmrobins/puppet/tree/ticket/2.7.x/11182-list_modules

I've got a proof of concept in the attached branch.  The commit message 
mentions the work that's left to do, but I'll be working on this more as part 
of the upcoming improvements to the module face and forge.
----------------------------------------
Feature #11182: List modules, classes and types available when one can't be 
found
https://projects.puppetlabs.com/issues/11182

Author: Matt Robinson
Status: Accepted
Priority: Normal
Assignee: Matt Robinson
Category: error reporting
Target version: 2.7.x
Affected Puppet version: 
Keywords: module class type
Branch: https://github.com/mmrobins/puppet/tree/ticket/2.7.x/11182-list_modules


Right now if you install a module improperly, which is fairly easy to do, your 
puppet run will fail simply saying that the class or resource type you're 
trying to use couldn't be found.

    % puppet apply test.pp -v
    Could not find class wordpress for mattmac.puppetlabs.lan at 
/Users/matthewrobinson/work/puppet/test.pp:3 on node mattmac.puppetlabs.lan

It would be much more useful if we could list the modules, classes and/or types 
that were available.  This might be an overwhelming amount of info for large 
installations, so maybe do this only when at debug log level.

I briefly looked into this and it may be more than a trivial amount of work 
since the classes and types are lazy loaded, so known_resource_types won't have 
most of that info loaded when we're failing, and will never have info about 
classes or types that aren't used in your manifest:

    # lib/puppet/resource.rb:207
    if strict? and ! resource_type
      if @type == 'Class'
        raise ArgumentError, "Could not find declared class #{title}"
      else
        raise ArgumentError, "Invalid resource type #{type}"
      end
    end
 
While it would certainly be nice to have this info listed when you get the 
error, another compromise might be to add a face action (maybe on module) that 
lists the modules available and the classes and types they provide.  Then the 
error message could say to run that action `puppet module list` so that you 
could figure out why your manifest was failing.  I'm not sure that would be 
that much easier, but I imagine you wouldn't have to worry about being deep 
down in the resource.rb file when you need to handle listing all your modules.


-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://projects.puppetlabs.com/my/account

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

Reply via email to