I tested $is_virtual on one of my VMs, and it does not report correctly.  Packstack has found the same thing, and has worked around it with their own fact.  We may need to do that same thing.  Also, I don't think this (old) change does everything needed.  When I have tried it in the past, I was still unable to launch instances with the altered compute node.  Have you had more success?  Also, if you want to implement this (and I am not against it, was considering the same myself), I think you should look at the changes packstack has[1].  Then, whatever of those makes sense for us, I would rather see in a separate module, which is optionally pulled into compute_common id the machine is virtual (possibly with custom fact, as mentioned earlier).

I am thinking something like:
compute
|
---virtual.pp
---common.pp (this one for later, not havana)

I have started taking this approach recently, see my pull request #121 as an example.  I think this will be more conducive the the mix and match approach we are trying to move toward.

[1] https://raw.github.com/stackforge/packstack/master/packstack/puppet/templates/nova_compute.pp