define virtual::kvm::kvmx::instance( $vg, $size, $ram, $shell, $iface, $ip, $gateway, $create = false, $guest_domain = 'example.org', $dns = 'host', $netmask = '255.255.255.0', $initial_user = 'user', $udev = false, $supervise = '1', $ssh_custom_pubkey = '', ) { 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}" require => Virtual::Kvm::Instance["$name"], # due to udev rule } 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}-user": vm => $name, param => 'user', value => $initial_user, } 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}-datadir": vm => $name, param => 'datadir', value => "\$HOME/vms/${name}", } virtual::kvm::kvmx::config { "${name}-net": vm => $name, param => 'net', value => "tap", } virtual::kvm::kvmx::config { "${name}-net_ip": vm => $name, param => 'net_ip', value => "$ip", } virtual::kvm::kvmx::config { "${name}-net_mask": vm => $name, param => 'net_mask', value => "$netmask", } virtual::kvm::kvmx::config { "${name}-net_gateway": vm => $name, param => 'net_gateway', value => "$gateway", } virtual::kvm::kvmx::config { "${name}-net_dns": vm => $name, param => 'net_dns', value => "$dns", } virtual::kvm::kvmx::config { "${name}-domain": vm => $name, param => 'domain', value => "$guest_domain", } 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}-image_type": vm => $name, param => 'image_type', value => "device", } 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}", } if $ssh_custom_pubkey == '' { $ssh_custom_pubkey_set = "" $ssh_custom_pubkey_unset = "${name}-ssh_custom_pubkey" virtual::kvm::kvmx::config_unset { "${name}-ssh_custom_pubkey": vm => $name, param => 'ssh_custom_pubkey', } } else { $ssh_custom_pubkey_set = "${name}-ssh_custom_pubkey" $ssh_custom_pubkey_unset = "" virtual::kvm::kvmx::config { "${name}-ssh-custom_pubkey": vm => $name, param => 'ssh_custom_pubkey', value => $ssh_custom_pubkey, } } #file { "/home/${name}/vms/${name}/box.img": # ensure => "/dev/mapper/${name}", # require => Virtual::Kvm::Instance["$name"], #} #if $create == true { # exec { "kvmx-lvcreate-${name}": # command => "/usr/local/bin/kvmx create && chown -R ${name}: /home/${names}/vms/${name}", # user => root, # cwd => "/home/${name}/vms/${name}", # creates => "/home/${name}/vms/${name}/box.img", # require => [ # Exec["kvmx-lvcreate-${name}", "kvmx-init-${name}"], # File["/home/${name}/vms/${name}/box.img"], # Virtual::Kvm::Instance["$name"], # Virtual::Kvm::Kvmx::Config[ # "${name}-user", # "${name}-memory", # "${name}-size", # "${name}-image", # "${name}-datadir", # "${name}-net", # "${name}-net_ip", # "${name}-net_mask", # "${name}-net_gateway", # "${name}-net_dns", # "${name}-domain", # "${name}-spice", # "${name}-run_spice_client", # "${name}-graphics", # "${name}-sound", # "${name}-shared_folder", # "${name}-format", # "${name}-image_type", # "${name}-ssh_support", # "${name}-drive_interface", # "${name}-supervise_manage", # "${ssh_custom_pubkey_set}" # ], # Virtual::Kvm::Kvmx::Config_unset[ # "${ssh_custom_pubkey_unset}" # ], # ], # } #} }