very odd Duplicate declaration problem.

422 views
Skip to first unread message

Nathan Earixson

unread,
Dec 17, 2013, 3:35:58 PM12/17/13
to puppet...@googlegroups.com
puppet 3.3.2 on RHEL6

If I run puppet on a node:
# sudo puppet agent --test --noop

I get the following error:

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Duplicate declaration: Package[bind] is already declared in file /etc/puppet/modules/site/manifests/dns_test.pp:4; cannot redeclare at /etc/puppet/modules/site/manifests/dns.pp:4 on node bushlnxadm01.chicagobooth.edu
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run



That's weird. That node isn't a DNS server and shouldn't even be thinking about running bind.

If I open /etc/puppet/manifests/site.pp and save the file, the error goes away on next puppet agent run.

After about 15 minutes the node starts trying to apply the classes from /etc/puppet/modules/site/manifests/dns_test.pp and after another 5 or so minutes I start getting the duplicate declaration error again.

If I save the manifest the puppet agent command works as expected for another 15 minutes or so.



I can't even begin to think of where to start looking on this. Any thoughts would be appreciated.
This seems to be happening on every node.


-n

Jeff Bachtel

unread,
Dec 17, 2013, 8:25:37 PM12/17/13
to puppet...@googlegroups.com
Do you have use_cached_catalog set on puppet agents or puppetmaster? Are you using storeconfigs / puppetdb?

Offhand, I'd guess that when you modify mtime of site.pp by saving, that forces puppet to invalidate the cached catalog and temporarily resolve the problem.

If necessary, are you able to update to the latest 3.4rc (agent might suffice) for testing?

Jeff
--
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...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-users/74814870-7ff7-49f1-b764-a155afd31168%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

jcbollinger

unread,
Dec 18, 2013, 9:52:57 AM12/18/13
to puppet...@googlegroups.com


Strange caching behavior sometimes results when you have declarations at top level in a manifest other than site.pp or one directly or indirectly 'import'ed by site.pp.  For instance,

<module_path>/my_module/manifests/init.pp:
----
class my_module {
  # doesn't matter
}

# Oops:
include dns_test

# Also oops:
Class['dns'] -> Class['my_module']
----

That sort of thing is very bad form because any declaration at top scope (i.e. outside any class, node, or type definition) applies, in principle, to all nodes, but manifests that are (only) autoloaded are may not actually be evaluated for every node.  The manifest author's intention is often that the top-scope declaration apply only to nodes that declare the class or type associated with the manifest, but that's not the actual semantics.

Behavior much like what you describe can result: everything works as intended when the master first starts, but after a node checks in that declares a certain class or type, nodes that subsequently check in get cached top-scope declarations that were not intended for them.


John

Nathan Earixson

unread,
Dec 19, 2013, 7:04:29 PM12/19/13
to puppet...@googlegroups.com
storeconfigs and use_cached_catalog are both false on the puppet master and on the puppet agents.

I think you're right but I don't understand the 'drift' in the cached catalog.

I updated to 3.4rc2 on an agent and the same behavior persists.

Nathan Earixson

unread,
Dec 19, 2013, 8:15:38 PM12/19/13
to puppet...@googlegroups.com
aha. this was it. I had:
package { "bind":
 ensure => "installed"
}


OUTSIDE of the "class site::dns_test {" declaration. Thank you very much for the help.

-n
Reply all
Reply to author
Forward
0 new messages