define virtual::kvm::kvmx::instance( $vg, $size, $ram, $shell, $iface, $udev = false, $supervise = '1', ) { virtual::kvm::instance { $name: udev => $udev, iface => $iface, shell => $shell ? { undef => '/usr/local/bin/kvmx-restricted-shell', default => $shell, }, } exec { "kvmx-lvcreate-${name}": command => "/sbin/lvcreate --name ${name} --size ${size} ${vg}", user => root, creates => "/dev/${vg}/${name}", #onlyif => "test ! -e /dev/${vg}/${name}" } exec { "kvmx-init-${name}": command => "/usr/local/bin/kvmx init", user => $name, environment => [ "HOME=/home/${name}" ], cwd => "/home/${name}/vms/${name}", creates => "/home/${name}/vms/${name}/kvmxfile", require => Virtual::Kvm::Instance["$name"], } virtual::kvm::kvmx::config { "${name}-memory": vm => $name, param => 'memory', value => $ram, } virtual::kvm::kvmx::config { "${name}-size": vm => $name, param => 'size', value => $size, } virtual::kvm::kvmx::config { "${name}-image": vm => $name, param => 'image', value => "\$HOME/vms/${name}/box.img", } virtual::kvm::kvmx::config { "${name}-net": vm => $name, param => 'net', value => "tap", } virtual::kvm::kvmx::config { "${name}-spice": vm => $name, param => 'spice', value => "0", } virtual::kvm::kvmx::config { "${name}-run_spice_client": vm => $name, param => 'run_spice_client', value => "0", } virtual::kvm::kvmx::config { "${name}-graphics": vm => $name, param => 'graphics', value => "-nographic", } virtual::kvm::kvmx::config { "${name}-sound": vm => $name, param => 'sound', value => "0", } virtual::kvm::kvmx::config_unset { "${name}-shared_folder": vm => $name, param => 'shared_folder', } virtual::kvm::kvmx::config { "${name}-format": vm => $name, param => 'format', value => "raw", } virtual::kvm::kvmx::config { "${name}-ssh_support": vm => $name, param => 'ssh_support', value => "n", } virtual::kvm::kvmx::config { "${name}-drive_interface": vm => $name, param => 'drive_interface', value => "virtio,cache=none,index=0,format=raw", } virtual::kvm::kvmx::config { "${name}-supervise_manage": vm => $name, param => 'supervise_manage', value => "${supervise}", } }