When running facter as unprivileged user, virtual fact is falsely set to physical, although correct value can be deduced from lspci system command.
Unfortunately, regex matching of lspci output in lib/facter/virtual.rb is done on lowercase value:
Example of real lspci output on affected instance follows:
As a side effect, none of ec2_* facts are available, as they are evaluated only when vitual is xen or kvm.
My guess is that easiest fix is to make aforementioned regex case-insensitive:
FACT-711 with the same problem happening on Ubuntu Linux.