class libvirtd { class base { # make sure to use a recent enough version # dnsmasq-base -> for nat network # netcat-openbsd -> for ssh remote access # iptables -> for dhcp, message error was quite puzzling # python-* => needed for helper script if versioncmp($::lsbdistrelease, '7') < 0 { package {['libvirt-utils', 'dnsmasq-base', 'netcat-openbsd', 'iptables', 'python-libvirt', 'python-IPy']: } } else { package {['libvirt-utils', 'dnsmasq', 'netcat-openbsd', 'iptables', 'python2-libvirt', 'python-IPy']: } } service { 'libvirtd': require => Package['libvirt-utils'], } #TODO remove once libvirt package is fixed to manage the directory file { ['/etc/libvirt/storage', '/etc/libvirt/storage/autostart']: ensure => directory, require => Package['libvirt-utils'], } file { '/usr/local/bin/storage_add.py': mode => '0755', source => 'puppet:///modules/libvirtd/storage_add.py', } file { '/usr/local/bin/network_add.py': mode => '0755', source => 'puppet:///modules/libvirtd/network_add.py', } } class kvm inherits base { # pull cyrus-sasl, should be checked package { 'qemu': } } # see http://wiki.libvirt.org/page/SSHPolicyKitSetup define group_access() { # to pull polkit and create the directory include libvirtd::base file { "/etc/polkit-1/localauthority/50-local.d/50-${name}-libvirt-remote-access.pkla": content => template('libvirtd/50-template-libvirt-remote-access.pkla'), require => Package['libvirt-utils'], } # give access to /dev/kvm to people allowed to use libvirt file { '/dev/kvm': group => $name, owner => 'root', mode => '0660', } } define storage($path, $autostart = true) { include libvirtd::base exec { "/usr/local/bin/storage_add.py ${name} ${path}": creates => "/etc/libvirt/storage/${name}.xml", require => [File['/usr/local/bin/storage_add.py'], Package['python-libvirt'] ] } #TODO use API of libvirt file { "/etc/libvirt/storage/autostart/${name}.xml": ensure => $autostart ? { true => "/etc/libvirt/storage/${name}.xml", false => absent }, require => Package['libvirt-utils'], } } define network( $bridge_name = 'virbr0', $forward = 'nat', $forward_dev = 'eth0', $network = '192.168.122.0/24', $tftp_root = '', $disable_pxe = '', $autostart = true, $vm_type = 'qemu') { exec { '/usr/local/bin/network_add.py': environment => ["BRIDGE_NAME=${bridge_name}", "FORWARD=${forward}", "FORWARD_DEV=${forward_dev}", "NETWORK=${network}", "TFTP_ROOT=${tftp_root}", "DISABLE_PXE=\"${disable_pxe}\""], creates => "/etc/libvirt/${vm_type}/networks/${name}.xml", require => [File['/usr/local/bin/network_add.py'], Package['python-IPy'], Package['python-libvirt'] ] } #TODO use API of libvirt file { "/etc/libvirt/${vm_type}/networks/autostart/${name}.xml": ensure => $autostart ? { true => "/etc/libvirt/${vm_type}/networks/${name}.xml", false => absent }, require => Package['libvirt-utils'], } } }