Hi Fraser,

On 20 Dec 2015, at 10:00, Fraser Goffin <[email protected]> wrote:

> Forgot to mention, if I run puppet lint over the RedHat::install.pp manifest 
> this error occurs (I don't know whether this is because I am running that on 
> Windows - with osfamily set to 'RedHat' or not) :-
> 
> ..\manifests\RedHat\install.pp - ERROR: docker_registry_host not in autoload 
> module layout on line 4

Manifests (and directories) may consist of lower case file names only!
You want to make use of stdlib lowercase($::osfamily) for class includes.

(Btw: osfamily on windows is always lowercase, versus RedHat, Debian, SuSE.)

Best,
Martin

> 
> Fraser.
> 
> On Sunday, 20 December 2015 08:47:25 UTC, Fraser Goffin wrote:
> Puppet: 4.2.1
> OS: RHEL/Centos 7 (can also simulate on Windows if I set osfamily to 'RedHat')
> 
> Most of the time I develop Puppet modules to run only on Windows but 
> sometimes I want them to be able usable on other OS's particularly RHEL. 
> Sometimes there's a choice between adding a bunch of predicates to a manifest 
> to detect the current OS and just maintaining separate manifests. 
> Notwithstanding the argumant for or against, in this particular case I 
> decided to follow the latter and encountered a problem I haven't seen before.
> 
> Specifically it *appears* that using the OSFAMILY name as part of a class 
> name[space] causes an error. Or more precisely, since I have already used 
> this approach successfully with 'windows' being part of a class namespace, an 
> error occurs if I use 'RedHat'.
> 
> Example:
> 
> docker_registry_host/manifests/init.pp :-
> 
> class docker_registry_host {
>   ...
> 
>     notice('CLASS: docker_registry_host')
>     notice('---------------------------')
> 
>     notice("osfamily = ${::osfamily}")
> 
>   ...
>     include "::docker_registry_host::${::osfamily}::install"
>   ...
> }
> 
> docker_registry_host/manifests/RedHat/install.pp :-
> 
> class docker_registry_host::RedHat::install {
> 
>     notice('CLASS: docker_registry_host::RedHat::install')
>     notice('--------------------------------------------')
> 
> }
> 
> Produces this error (full stack trace below) :-
> 
> Notice: Scope(Class[Docker_registry_host]): CLASS: docker_registry_host
> Notice: Scope(Class[Docker_registry_host]): ---------------------------
> Notice: Scope(Class[Docker_registry_host]):
> Notice: Scope(Class[Docker_registry_host]): osfamily = RedHat
> 
> Debug: importing 
> 'E:/Data/git/docker_registry/puppet/environments/production/modules/docker_registry_host/manifests/RedHat/install.pp'
>  in environment production
> 
> Error: Illegal fully qualified class reference at 
> E:/Data/git/docker_registry/puppet/environments/production/modules/docker_registry_host/manifests/RedHat/install.pp:4:38
>  on node lt032064.xxx.com
> C:/Apps/puppet/puppet/lib/puppet/pops/parser/lexer_support.rb:32:in 
> `lex_error'
> C:/Apps/puppet/puppet/lib/puppet/pops/parser/lexer2.rb:536:in `lex_token'
> C:/Apps/puppet/puppet/lib/puppet/pops/parser/lexer2.rb:284:in `scan'
> C:/Apps/puppet/sys/ruby/lib/ruby/2.1.0/racc/parser.rb:319:in `_racc_yyparse_c'
> C:/Apps/puppet/sys/ruby/lib/ruby/2.1.0/racc/parser.rb:319:in `yyparse'
> ...
> 
> So no problem finding the docker_registry_host::RedHat::install class, but 
> also ... Error: Illegal fully qualified class reference ??
> 
> If I change that part of the class namespace 'foo' everything works fine :-
> 
> ... so in init.pp if I use :-
> 
>     include "::docker_registry_host::foo::install"
> 
> and have the class : docker_registry_host/manifests/foo/install.pp :-
> 
> class docker_registry_host::foo::install {
> 
>     notice('CLASS: docker_registry_host::foo::install')
>     notice('--------------------------------------------')
>     notice('')
> }
> 
> Output as expected and no error at all.
> 
> As I mentioned above, I have used include and contain statements with 
> ${::osfamily} in them many times before when the osfamily value resolves to 
> 'windows'. For example in another module I have an install class called :-
> 
> class sonatype_nexus::windows::install {
> 
> .. and it works just fine.
> 
> 
> So I guess I'm wondering why this error occurs when osfamily resolves to 
> 'RedHat'.
> 
> In case it makes a difference, when I'm testing locally I'm using Centos 
> rather than full-blown RHEL but running 'facter osfamily' still returns 
> 'RedHat'
> 
> Any ideas why this is happening (is 'RedHat' illegal in a class name[space] 
> or a reserved word, or ...) ?
> 
> Kind Regards
> 
> Fraser.
> 
> 
> Full stack trace :-
> 
> Error: Illegal fully qualified class reference at 
> E:/Data/git/docker_registry/puppet/environments/production/modules/docker_registry_host/manifests/RedHat/install.pp:4:38
>  on node lt032064.xxx.com
> C:/Apps/puppet/puppet/lib/puppet/pops/parser/lexer_support.rb:32:in 
> `lex_error'
> C:/Apps/puppet/puppet/lib/puppet/pops/parser/lexer2.rb:536:in `lex_token'
> C:/Apps/puppet/puppet/lib/puppet/pops/parser/lexer2.rb:284:in `scan'
> C:/Apps/puppet/sys/ruby/lib/ruby/2.1.0/racc/parser.rb:319:in `_racc_yyparse_c'
> C:/Apps/puppet/sys/ruby/lib/ruby/2.1.0/racc/parser.rb:319:in `yyparse'
> C:/Apps/puppet/puppet/lib/puppet/pops/parser/parser_support.rb:230:in `_parse'
> C:/Apps/puppet/puppet/lib/puppet/pops/parser/parser_support.rb:79:in 
> `parse_file'
> C:/Apps/puppet/puppet/lib/puppet/pops/parser/evaluating_parser.rb:35:in 
> `parse_file'
> C:/Apps/puppet/puppet/lib/puppet/parser/e4_parser_adapter.rb:31:in `parse'
> C:/Apps/puppet/puppet/lib/puppet/parser/type_loader.rb:86:in `parse_file'
> C:/Apps/puppet/puppet/lib/puppet/parser/type_loader.rb:123:in `block in 
> load_files'
> C:/Apps/puppet/puppet/lib/puppet/parser/type_loader.rb:107:in `each'
> C:/Apps/puppet/puppet/lib/puppet/parser/type_loader.rb:107:in `load_files'
> C:/Apps/puppet/puppet/lib/puppet/parser/type_loader.rb:97:in 
> `import_from_modules'
> C:/Apps/puppet/puppet/lib/puppet/parser/type_loader.rb:68:in `block in 
> try_load_fqname'
> C:/Apps/puppet/puppet/lib/puppet/parser/type_loader.rb:66:in `each'
> C:/Apps/puppet/puppet/lib/puppet/parser/type_loader.rb:66:in `try_load_fqname'
> C:/Apps/puppet/puppet/lib/puppet/resource/type_collection.rb:167:in 
> `find_or_load'
> C:/Apps/puppet/puppet/lib/puppet/resource/type_collection.rb:116:in 
> `find_hostclass'
> C:/Apps/puppet/puppet/lib/puppet/parser/scope.rb:252:in `find_hostclass'
> C:/Apps/puppet/puppet/lib/puppet/parser/compiler.rb:207:in `block in 
> evaluate_classes'
> C:/Apps/puppet/puppet/lib/puppet/parser/compiler.rb:206:in `collect'
> C:/Apps/puppet/puppet/lib/puppet/parser/compiler.rb:206:in `evaluate_classes'
> C:/Apps/puppet/puppet/lib/puppet/parser/functions/contain.rb:33:in `block in 
> <top (required)>'
> C:/Apps/puppet/puppet/lib/puppet/parser/functions.rb:162:in `block (2 levels) 
> in newfunction'
> C:/Apps/puppet/puppet/lib/puppet/util/profiler/around_profiler.rb:58:in 
> `profile'
> C:/Apps/puppet/puppet/lib/puppet/util/profiler.rb:51:in `profile'
> C:/Apps/puppet/puppet/lib/puppet/parser/functions.rb:155:in `block in 
> newfunction'
> C:/Apps/puppet/puppet/lib/puppet/pops/evaluator/runtime3_support.rb:281:in 
> `call_function'
> C:/Apps/puppet/puppet/lib/puppet/pops/evaluator/evaluator_impl.rb:836:in 
> `call_function_with_block'
> C:/Apps/puppet/puppet/lib/puppet/pops/evaluator/evaluator_impl.rb:816:in 
> `eval_CallNamedFunctionExpression'
> C:/Apps/puppet/puppet/lib/puppet/pops/visitor.rb:67:in `visit_this_1'
> C:/Apps/puppet/puppet/lib/puppet/pops/evaluator/evaluator_impl.rb:73:in 
> `evaluate'
> C:/Apps/puppet/puppet/lib/puppet/pops/evaluator/evaluator_impl.rb:569:in 
> `block in eval_BlockExpression'
> C:/Apps/puppet/puppet/lib/puppet/pops/evaluator/evaluator_impl.rb:569:in 
> `each'
> C:/Apps/puppet/puppet/lib/puppet/pops/evaluator/evaluator_impl.rb:569:in 
> `eval_BlockExpression'
> C:/Apps/puppet/puppet/lib/puppet/pops/visitor.rb:46:in `block in visit_this'
> C:/Apps/puppet/puppet/lib/puppet/pops/visitor.rb:42:in `each'
> C:/Apps/puppet/puppet/lib/puppet/pops/visitor.rb:42:in `visit_this'
> C:/Apps/puppet/puppet/lib/puppet/pops/visitor.rb:69:in `visit_this_1'
> C:/Apps/puppet/puppet/lib/puppet/pops/evaluator/evaluator_impl.rb:73:in 
> `evaluate'
> C:/Apps/puppet/puppet/lib/puppet/pops/parser/evaluating_parser.rb:57:in 
> `evaluate'
> C:/Apps/puppet/puppet/lib/puppet/parser/ast/pops_bridge.rb:32:in `evaluate'
> C:/Apps/puppet/puppet/lib/puppet/parser/ast.rb:31:in `safeevaluate'
> C:/Apps/puppet/puppet/lib/puppet/resource/type.rb:120:in `evaluate_code'
> C:/Apps/puppet/puppet/lib/puppet/parser/resource.rb:79:in `evaluate'
> C:/Apps/puppet/puppet/lib/puppet/parser/compiler.rb:220:in `each'
> C:/Apps/puppet/puppet/lib/puppet/parser/compiler.rb:220:in `evaluate_classes'
> C:/Apps/puppet/puppet/lib/puppet/parser/functions/include.rb:33:in `block in 
> <top (required)>'
> C:/Apps/puppet/puppet/lib/puppet/parser/functions.rb:162:in `block (2 levels) 
> in newfunction'
> C:/Apps/puppet/puppet/lib/puppet/util/profiler/around_profiler.rb:58:in 
> `profile'
> C:/Apps/puppet/puppet/lib/puppet/util/profiler.rb:51:in `profile'
> C:/Apps/puppet/puppet/lib/puppet/parser/functions.rb:155:in `block in 
> newfunction'
> C:/Apps/puppet/puppet/lib/puppet/pops/evaluator/runtime3_support.rb:281:in 
> `call_function'
> C:/Apps/puppet/puppet/lib/puppet/pops/evaluator/evaluator_impl.rb:836:in 
> `call_function_with_block'
> C:/Apps/puppet/puppet/lib/puppet/pops/evaluator/evaluator_impl.rb:816:in 
> `eval_CallNamedFunctionExpression'
> C:/Apps/puppet/puppet/lib/puppet/pops/visitor.rb:46:in `block in visit_this'
> C:/Apps/puppet/puppet/lib/puppet/pops/visitor.rb:42:in `each'
> C:/Apps/puppet/puppet/lib/puppet/pops/visitor.rb:42:in `visit_this'
> C:/Apps/puppet/puppet/lib/puppet/pops/visitor.rb:69:in `visit_this_1'
> C:/Apps/puppet/puppet/lib/puppet/pops/evaluator/evaluator_impl.rb:73:in 
> `evaluate'
> C:/Apps/puppet/puppet/lib/puppet/pops/evaluator/evaluator_impl.rb:640:in 
> `eval_Program'
> C:/Apps/puppet/puppet/lib/puppet/pops/visitor.rb:46:in `block in visit_this'
> C:/Apps/puppet/puppet/lib/puppet/pops/visitor.rb:42:in `each'
> C:/Apps/puppet/puppet/lib/puppet/pops/visitor.rb:42:in `visit_this'
> C:/Apps/puppet/puppet/lib/puppet/pops/visitor.rb:69:in `visit_this_1'
> C:/Apps/puppet/puppet/lib/puppet/pops/evaluator/evaluator_impl.rb:73:in 
> `evaluate'
> C:/Apps/puppet/puppet/lib/puppet/pops/parser/evaluating_parser.rb:57:in 
> `evaluate'
> C:/Apps/puppet/puppet/lib/puppet/parser/ast/pops_bridge.rb:105:in `evaluate'
> C:/Apps/puppet/puppet/lib/puppet/parser/ast.rb:31:in `safeevaluate'
> C:/Apps/puppet/puppet/lib/puppet/resource/type.rb:120:in `evaluate_code'
> C:/Apps/puppet/puppet/lib/puppet/parser/resource.rb:79:in `evaluate'
> C:/Apps/puppet/puppet/lib/puppet/parser/compiler.rb:409:in `evaluate_main'
> C:/Apps/puppet/puppet/lib/puppet/parser/compiler.rb:131:in `block (2 levels) 
> in compile'
> C:/Apps/puppet/puppet/lib/puppet/util/profiler/around_profiler.rb:58:in 
> `profile'
> C:/Apps/puppet/puppet/lib/puppet/util/profiler.rb:51:in `profile'
> C:/Apps/puppet/puppet/lib/puppet/parser/compiler.rb:131:in `block in compile'
> C:/Apps/puppet/puppet/lib/puppet/context.rb:64:in `override'
> C:/Apps/puppet/puppet/lib/puppet.rb:223:in `override'
> C:/Apps/puppet/puppet/lib/puppet/parser/compiler.rb:121:in `compile'
> C:/Apps/puppet/puppet/lib/puppet/parser/compiler.rb:34:in `compile'
> C:/Apps/puppet/puppet/lib/puppet/indirector/catalog/compiler.rb:93:in `block 
> (2 levels) in compile'
> C:/Apps/puppet/puppet/lib/puppet/util/profiler/around_profiler.rb:58:in 
> `profile'
> C:/Apps/puppet/puppet/lib/puppet/util/profiler.rb:51:in `profile'
> C:/Apps/puppet/puppet/lib/puppet/indirector/catalog/compiler.rb:91:in `block 
> in compile'
> C:/Apps/puppet/puppet/lib/puppet/util.rb:129:in `block in benchmark'
> C:/Apps/puppet/sys/ruby/lib/ruby/2.1.0/benchmark.rb:294:in `realtime'
> C:/Apps/puppet/puppet/lib/puppet/util.rb:128:in `benchmark'
> C:/Apps/puppet/puppet/lib/puppet/indirector/catalog/compiler.rb:90:in 
> `compile'
> C:/Apps/puppet/puppet/lib/puppet/indirector/catalog/compiler.rb:50:in `find'
> C:/Apps/puppet/puppet/lib/puppet/indirector/indirection.rb:194:in `find'
> C:/Apps/puppet/puppet/lib/puppet/application/apply.rb:256:in `block in main'
> C:/Apps/puppet/puppet/lib/puppet/context.rb:64:in `override'
> C:/Apps/puppet/puppet/lib/puppet.rb:223:in `override'
> C:/Apps/puppet/puppet/lib/puppet/application/apply.rb:225:in `main'
> C:/Apps/puppet/puppet/lib/puppet/application/apply.rb:170:in `run_command'
> C:/Apps/puppet/puppet/lib/puppet/application.rb:344:in `block in run'
> C:/Apps/puppet/puppet/lib/puppet/util.rb:446:in `exit_on_fail'
> C:/Apps/puppet/puppet/lib/puppet/application.rb:344:in `run'
> C:/Apps/puppet/puppet/lib/puppet/util/command_line.rb:128:in `run'
> C:/Apps/puppet/puppet/lib/puppet/util/command_line.rb:72:in `execute'
> C:/Apps/puppet/puppet/bin/puppet:5:in `<main>'
> 
> -- 
> 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 [email protected].
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/puppet-users/4b49c8fc-ce23-47a9-a7cf-b2cf33b1d838%40googlegroups.com.
> 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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/8F91E7DB-7E23-4F48-885A-703F24584A08%40gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to