diff options
Diffstat (limited to 'modules/auto_installation/manifests')
| -rw-r--r-- | modules/auto_installation/manifests/download.rb | 21 | ||||
| -rw-r--r-- | modules/auto_installation/manifests/init.pp | 140 |
2 files changed, 161 insertions, 0 deletions
diff --git a/modules/auto_installation/manifests/download.rb b/modules/auto_installation/manifests/download.rb new file mode 100644 index 00000000..12cc53bf --- /dev/null +++ b/modules/auto_installation/manifests/download.rb @@ -0,0 +1,21 @@ +define "auto_installation::download::netboot_images", :path, :versions, :archs, :mirror_path, :files do + # example : + # mandriva : + # ftp://ftp.free.fr/pub/Distributions_Linux/MandrivaLinux/devel/%{version}/%{arch}/isolinux/alt0/ + for a in @archs do + for v in @versions do + # uncomment when ruby 1.9 will be stable and used + # mirror_file_path = @mirror_path % { :arch => a, :version => v } + mirror_file_path = @mirror_path.gsub(/%{arch}/, a) + mirror_file_path = mirror_file_path.gsub(/%{version}/, v) + for f in @files do + file_name = "#{@path}/#{@name}_#{v}_#{a}_#{f}" + create_resource(:exec, "wget -q #{mirror_file_path}/#{f} -O #{file_name}", + :creates => file_name) + end + end + end +end + + + diff --git a/modules/auto_installation/manifests/init.pp b/modules/auto_installation/manifests/init.pp new file mode 100644 index 00000000..642cddfd --- /dev/null +++ b/modules/auto_installation/manifests/init.pp @@ -0,0 +1,140 @@ +# 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 ) + +} |
