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
Include is to tell puppet to apply the class "ntp" to a node and class is to declare the class, the behavior of this class (like ensure file, package, user etc...)