aboutsummaryrefslogtreecommitdiffstats
path: root/modules/auto_installation/manifests/init.pp
blob: 1c4fbbd1d942e4b37ce612db759a944a903d4916 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# what should be possible :
# install a base system 
#   - mandriva
#   - mageia
#   - others ? ( for testing package ? )

# install a server 
#   - by name, with a valstart 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 lenght 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 ressources
        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 )

}