Puppet Smart Variable not overriding default

How do I configure smart variable under a particular Puppet module class so that the default value and matcher value will apply to different hosts? For example, I installed a Chronyd module and the default servers variable is empty and you are expected to override it with your own value. I created a ‘servers’ smart variable under the Chrond class and input in a default value. However, when I try to update the agent config it fails stating that it did not get a value. However, if I override the default value on the class level without using smart variable, it works.

I think you need to use Smart class parameter, not smart variable. Smart variable values are put into global namespace in ENC output, hence not passed to puppet class parameters. Normally the flow looks like this

Import smart class parameters from puppet master via smart proxy
Edit the imported smart class parameter, enabling “override” and setting the default value
Assign it’s puppet class to the host
If needed, override the default value on host level (or other object in the chain)

Hope this helps