$OpenBSD: patch-lib_src_facts_resolvers_virtualization_resolver_cc,v 1.1 2015/08/11 20:20:35 jasper Exp $
--- lib/src/facts/resolvers/virtualization_resolver.cc.orig	Tue Aug  4 21:03:42 2015
+++ lib/src/facts/resolvers/virtualization_resolver.cc	Tue Aug  4 21:04:18 2015
@@ -45,4 +45,33 @@ namespace facter { namespace facts { namespace resolve
         return hypervisors.count(hypervisor) == 0;
     }
 
+    string virtualization_resolver::get_product_name_vm(collection& facts)
+    {
+        static vector<tuple<string, string>> vms = {
+            make_tuple("VMware",            string(vm::vmware)),
+            make_tuple("VirtualBox",        string(vm::virtualbox)),
+            make_tuple("Parallels",         string(vm::parallels)),
+            make_tuple("KVM",               string(vm::kvm)),
+            make_tuple("Virtual Machine",   string(vm::hyperv)),
+            make_tuple("RHEV Hypervisor",   string(vm::redhat_ev)),
+            make_tuple("oVirt Node",        string(vm::ovirt)),
+            make_tuple("HVM domU",          string(vm::xen_hardware)),
+            make_tuple("Bochs",             string(vm::bochs)),
+        };
+
+        auto product_name = facts.get<string_value>(fact::product_name);
+        if (!product_name) {
+            return {};
+        }
+
+        auto const& value = product_name->value();
+
+        for (auto const& vm : vms) {
+            if (value.find(get<0>(vm)) != string::npos) {
+                return get<1>(vm);
+            }
+        }
+        return {};
+    }
+
 }}}  // namespace facter::facts::resolvers
