While I’m yet to find the holy grail of getting a KVM host to be aware of which ‘dom0’ its being hosted on, this bit of ruby for a custom puppet facts is a step there, the other way around:
(vms-running.rb) download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
require 'facter'
begin
Facter . compute_node
rescue
Facter . loadfacts ()
end
unless `rpm -qa | grep ruby-libvirt` . empty?
if ( Facter . value ( "puppet_class_kvm_host" ) == "true" ) then
Facter . add ( "kvm_vms" ) do
setcode do
require 'libvirt'
conn = Libvirt :: open ( 'qemu:///system' )
if ( conn . num_of_domains == 0 ) then
kvm_vms = "NO VMS"
conn . close
kvm_vms
else
vm_doms = Array . new
conn . list_domains . each do | domid |
dom = conn . lookup_domain_by_id ( domid )
vm_doms . push ( dom . name )
end
vm_doms = vm_doms . join ( " " )
conn . close
vm_doms
end
end
end
end
end
Which will return a nice fact like:
kvm_vms => Host1 Host2 Host 3
or if none are running:
kvm_vms => NO VMS
its ugly, but it works!