Hey all,

I'm not sure if I've made a fundamental misunderstanding of Puppet
namespacing and include resolution or whether there's a bug.

Background:
I have a modules, called kerberos, that configures a client for working
on my kerberos domain. I then have a module called ssh that sets up a
basic sshd. I wanted to create a ssh::kerberos class in the ssh module
that extends my ssh setup with kerberos support. I wanted to put a
dependency on the kerberos module. However things fell apart and there
was lots of hair tearing thinking I'd done something stupid (e.g. a
typo.) I now believe it's not that simple...

[Contrived, simplistic example]
Take a module called "t" that creates a folder:
/etc/puppet/modules/t/manifests/init.pp:
  class t {
    file { '/tmp/t': ensure => directory }
  }

Create another module called test, that creates a file in that directory:
/etc/puppet/modules/test/manifests/init.pp
  class test {
    include t
    file { '/tmp/t/foo':
      ensure => file,
      require => File['/tmp/t'],
    }

Everything's super happy and fine. I have /tmp/t/foo. puppet agent
--test --debug:
info: Caching catalog for debian.localdomain
debug: Creating default schedules
debug: Loaded state in 0.00 seconds
debug: /Stage[main]/Test/File[/tmp/t/foo]/require: requires File[/tmp/t]
info: Applying configuration version '1293188258'
notice: /Stage[main]/T/File[/tmp/t]/ensure: created
notice: /Stage[main]/Test/File[/tmp/t/foo]/ensure: created
debug: Finishing transaction -615069188
debug: Storing state
debug: Stored state in 0.01 seconds
notice: Finished catalog run in 0.03 seconds

Now, create a test::t class.
/etc/puppet/modules/test/manifests/t.pp:
  class test::t {
  }

It falls apart. Puppet resolves the "include t" as being the subclass of
test, rather than the module:
info: Caching catalog for debian.localdomain
debug: Creating default schedules
err: Could not run Puppet configuration client: Could not find
dependency File[/tmp/t] for File[/tmp/t/foo] at
/etc/puppet/modules/test/manifests/init.pp:6

Replacing the require with Class['t'] is rather more telling in the debug:
info: Caching catalog for debian.localdomain
debug: Creating default schedules
debug: Loaded state in 0.00 seconds
debug: /Stage[main]/Test/File[/tmp/t/foo]/require: requires Class[Test::T]
info: Applying configuration version '1293188643'
err: /Stage[main]/Test/File[/tmp/t/foo]/ensure: change from absent to
file failed: Could not set 'file on ensure: No such file or directory -
/tmp/t/foo at /etc/puppet/modules/test/manifests/init.pp:6
debug: Finishing transaction -614790778
debug: Storing state
debug: Stored state in 0.01 seconds
notice: Finished catalog run in 0.03 seconds

Is this by design? If so, how do I specify module, not subclass, in the
include/require?
Is there a bug?

Cheers,

Dan

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To post to this group, send email to puppet-us...@googlegroups.com.
To unsubscribe from this group, send email to 
puppet-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/puppet-users?hl=en.

Reply via email to