Why virtual and not create a ```foreman::compute```:
```puppet
define foreman::compute(
  $package = "foreman-${title}",
) {
  package { $package:
    ensure => installed,
    before => Class['foreman::config'],
    notify => Class['foreman::service'],
  }
}
```

Then rewrite ```foreman::compute::libvirt``` to:
```puppet
class foreman::compute::libvirt {
  foreman::compute {'libvirt':
  }
}
```

Then you can also simplify the notification chain in init.pp.