Previously in Puppet, the values of facts used to be all strings. In Puppet 4, facts can have various proper data types like booleans, arrays and hashes. In Puppet 3, you can get the same behavior by setting the option
stringify_facts = false on the agents.
Since the facts will be different, your Puppet code might behave differently. Especially in the case of booleans, you might previously have compared against
"true", where now it’s
true (use any2bool to support both).
To test the effects of the change before potentially breaking configuration, I turned to octocatalog-diff. It’s a tool by GitHub that shows the differences between two Puppet catalogues (the compiled output of your Puppet manifests, representing the configuration that will be applied).