2

I created a module named 'learn-tomcat' and it has a class named tomcat (in init.pp). When I try to include this class in a node definition, it does not work, all of following combination throw an error, the combinations are:

include learn-tomcat::tomcat
include learn-tomcat
include tomcat
include ::tomcat

And error is same with above combinations:

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find class

Now when I rename module directory learn-tomcat to tomcat, then following start working!

include tomcat
include ::tomcat
include tomcat::tomcat

Now I am confused about a few things:

  • Although Puppet enforces the name of module to be USERNAME-MODULENAME while creating - should one rename it after creation?
  • I could not find relevant documentation but what exactly is happening here?
Vishal Biyani
  • 4,297
  • 28
  • 55

1 Answers1

3

Here you have a comprehensive explanation how namespaces and scopes works in puppet.

According to the example from the article:

name:                   file path:
apache                  <modulepath>/apache/manifests/init.pp
apache::mod             <modulepath>/apache/manifests/mod.pp
apache::mod::passenger  <modulepath>/apache/manifests/mod/passenger.pp

So in your situation you can also do one of the following suggestion:

  1. In module learn-tomcat in init.pp, rename tomcat class to learn-tomcat, and than instance it by:

    include learn-tomcat

  2. Rename the file init.pp to tomcat.pp and than instance it by:

    include learn-tomcat::tomcat

Community
  • 1
  • 1
kkamil
  • 2,593
  • 11
  • 21