Refactor code for VirtualFacts (#18122)
Refactor code for VirtualFacts (#18122)

The populate method is cut and paste on every subclass,
so we should push it up, and add a default method that is overloaded
thaim/ansible,thaim/ansible