# what should be possible : # install a base system # - mandriva # - mageia # - others ? ( for testing package ? ) # install a server # - by name, with a valstar clone class auto_installation { class variables { $pxe_dir = "/var/lib/pxe" # m/ for menu. There is limitation on the path length so # while we will likely not hit the limit, it may be easier $pxe_menu_dir = "${pxe_dir}/pxelinux.cfg/m/" } class download { import "download.rb" } class pxe_menu inherits variables { package { 'syslinux': } file { $pxe_dir: ensure => directory, } file { "${pxe_dir}/pxelinux.0": ensure => "/usr/lib/syslinux/pxelinux.0", } file { "${pxe_dir}/menu.c32": ensure => "/usr/lib/syslinux/menu.c32" } file { "${pxe_dir}/pxelinux.cfg": ensure => directory, } # m for menu, there is some limitation on the path length so I # prefer to file { "${pxe_menu_dir}": ensure => directory, } # TODO make it tag aware $menu_entries = list_exported_ressources('Auto_installation::Pxe_menu_base') # default file should have exported resources file { "${pxe_dir}/pxelinux.cfg/default": ensure => present, content => template('auto_installation/default'), } Auto_installation::Pxe_menu_base <<| tag == $fqdn |>> } define pxe_menu_base($content) { include auto_installation::variables file { "${auto_installation::variables::pxe_menu_dir}/${name}": ensure => present, content => $content, } } define pxe_menu_entry($kernel_path, $append, $label) { @@auto_installation::pxe_menu_base { $name: tag => $fqdn, content => template('auto_installation/menu'), } } # define pxe_linux_entry # meant to be exported # name # label # kernel # append class netinst_storage { # to ease the creation of test iso $netinst_path = "/var/lib/libvirt/netinst" file { $netinst_path: ensure => directory, require => Package[libvirt-utils], } libvirtd::storage { "netinst": path => $netinst_path, require => File[$netinst_path], } } define download_file($destination_path, $download_url) { exec { "wget -q -O ${destination_path}/${name} ${download_url}/${name}": creates => "${destination_path}/${name}", } } define mandriva_installation_entry($version, $arch = 'x86_64') { include netinst_storage $protocol = "ftp" $server = "ftp.free.fr" $mirror_url_base = "/pub/Distributions_Linux/MandrivaLinux/" $mirror_url_middle = $version ? { "cooker" => "devel/cooker/${arch}/", default => "official/${version}/${arch}/" } $mirror_url = "${mirror_url_base}/${mirror_url_middle}" $mirror_url_end = "isolinux/alt0" $destination_path = "${netinst_storage::netinst_path}/${name}" file { "${destination_path}": ensure => directory, } $download_url = "${protocol}\\://${server}/${mirror_url}/${mirror_url_end}" download_file { ['all.rdz','vmlinuz']: destination_path => $destination_path, download_url => $download_url, require => File[$destination_path], } pxe_menu_entry { "mandriva_${version}_${arch}": kernel_path => "${name}/vmlinuz", label => "Mandriva ${version} ${arch}", #TODO add autoinst.cfg append => "${name}/all.rdz useless_thing_accepted=1 lang=fr automatic=int:eth0,netw:dhcp,met:${protocol},ser:${server},dir:${mirror_url} ", } } # # define a template for autoinst # - basic installation # - server installation ( with server name as a parameter ) }