What's the difference between include and require in puppet
I have a class in puppet if I have the following code:
class A {
require B
....
}
I get circular dependencies error. If I have:
class A {
include B
....
}
everything works fine
They are very different things, actually. To say require B
means B
must come before A
(and, therefore, can lead to circular dependencies if something in B
turns out to require A
). And if B
is not included at all, it will lead to missing dependencies error.
On the other hand, include B
just says B
will be applied whenever A
gets applied: it says nothing of the order between them.
This was just asked (and answered) on the puppet mailing list:
The difference is evident when the catalog needs to be applied. With include you have evaluated its contents at the time of the include - but any resources must be depended on explicitly after the include. With a require - the dependency is created for you - but you have to be careful and ensure that this is your desired result
- Ken Barber in Require vs Include?