In Puppet 6.x, facter reports the is_virtual fact as a boolean:
But in Puppet 7.0.0, facter reports the is_virtual fact as a string:
This is almost certainly a regression, as the 7.0.0 documentation continues to state that the is_virtual fact is a boolean.
This is going to cause major breakage for any code that tests is_virtual as a boolean; e.g.:
In the above code, the do stuff for VMs block will always be executed, even for physical hosts, because the boolean evaluation of the String class is true if the length of the string is nonzero and false otherwise, and is_virtual will always have a nonzero length (either "true" or "false").
The easiest work-around for now is to test against the virtual fact instead; e.g.:
But again, this regression is going to burn people who have any code that tests against is_virtual.