In Puppet, what is the difference between 'include' and 'class'?

I can either write

include '::ntp'

or I can write

class { '::ntp':}

What is the difference between them, or do I need both?


There are differences, here are two big ones:

Using include allows multiple declarations of a class. The class declaration can only be used once or you'll see a duplicate resource declaration error.

include will use external data, e.g. hiera, for parameters. Declaring class allows you to specify the parameters.

See https://puppet.com/docs/puppet/latest/lang_classes.html#the-include-function