chomp($nodename) or die;
my $myfqdn = "$nodename.$c{DnsDomain}";
+ $c{TftpDefaultScope} ||= "default";
+
$c{TftpPath} ||= "/tftpboot/";
- $c{TftpHost} ||= $myfqdn;
$c{TftpPxeDir} ||= "pxelinux.cfg/";
$c{TftpPxeTemplates} ||= '%ipaddrhex% 01-%etherhyph%';
$c{TftpPlayDir} ||= "$whoami/osstest/";
foreach my $kp (keys %{ $ho->{Flags} }) {
$kp =~ s/need-kernel-deb-// or next;
- my $d_i= $c{TftpPath}.'/'.$c{TftpDiBase}.'/'.$r{arch}.'/'.$c{TftpDiVersion}.'-'.$ho->{Suite};
+ my $d_i= $ho->{Tftp}{Path}.'/'.$ho->{Tftp}{DiBase}.'/'.$r{arch}.'/'.
+ $c{TftpDiVersion}.'-'.$ho->{Suite};
my $kurl = create_webfile($ho, "kernel", sub {
copy("$d_i/$kp.deb", $_[0])
}
$ho->{Ip}= $ho->{IpStatic};
+ #----- tftp -----
+
+ my $tftpscope = get_host_property($ho, 'TftpScope', $c{TftpDefaultScope});
+ logm("TftpScope is $tftpscope");
+ $ho->{Tftp} = { };
+ $ho->{Tftp}{$_} = $c{"Tftp${_}_${tftpscope}"} || $c{"Tftp${_}"}
+ foreach qw(Path TmpDir PxeDir PxeGroup PxeTemplates DiBase);
+
+ #----- finalise -----
+
$mjobdb->host_check_allocated($ho);
logm("host: selected $ho->{Name} ".
Guest => $gn,
Name => $r{"${gn}_hostname"},
CfgPath => $r{"${gn}_cfgpath"},
+ Tftp => $ho->{Tftp},
Host => $ho,
};
foreach my $opt (guest_var_commalist($gho,'options')) {
$v{'ipaddr'} = $ip;
$v{'ipaddrhex'} = sprintf "%02X%02X%02X%02X", split /\./, $ip;
}
- foreach my $pat (split /\s+/, $c{TftpPxeTemplates}) {
+ foreach my $pat (split /\s+/, $ho->{Tftp}{PxeTemplates}) {
# we skip patterns that contain any references to undefined %var%s
$pat =~ s{\%(\w*)\%}{
$1 eq '' ? '%' :
# and return the first pattern we managed to completely substitute
return $pat;
}
- die "no pxe template matched $c{TftpPxeTemplates} ".
+ die "no pxe template matched $ho->{Tftp}{PxeTemplates} ".
(join ",", sort keys %v)." ?";
}
sub setup_pxeboot ($$) {
my ($ho, $bootfile) = @_;
my $f= host_pxefile($ho);
- file_link_contents("$c{TftpPath}$c{TftpPxeDir}$f", $bootfile);
+ file_link_contents("$ho->{Tftp}{Path}$ho->{Tftp}{PxeDir}$f", $bootfile);
}
sub setup_pxeboot_local ($) {
where Xen takes really long time to boot (typically because of
the "Scrubbing free RAM" phase).
+HostProp_<testbox>_TftpScope
+ Defines the Tftp scope (i.e. subnet) where this host resides. See
+ "TftpFoo_<scope> and TftpFoo" below.
+
DebianPreseed
Text to add to the debian-installer preseed file. Optional
but you will need to set some NTP servers here if your firewall
DebianPreseed added to existing preseed file
+TftpFoo_<scope> and TftpFoo
+
+ Describes various properties relating to Tftp in a given <scope>,
+ where a <scope> is a given subnet, DHCP server etc. Valid
+ properties are:
+
+ Path The path to the root of the directory which is exposed by
+ the tftpserver (e.g. /tftpboot).
+ TmpDir A directory under `Path' to use for temporary files.
+
+ PxeDir The path under `Path' to the PXE configuration directory
+ (e.g. pxelinux.cfg)
+ PxeGroup The Unix group which should own files under `PxeDir'.
+ PxeTemplates See TftpPxeTemplates
+
+ DiBase The path under `Path' to the root of the debian installer
+ images.
+
+ For hosts in scope "default", TftpFoo_default (if set) takes
+ precedence over TftpFoo. TftpFoo is used when the setting Foo is
+ not defined for the host's scope.
+
TftpPxeTemplates
List (space-separated) of template filenames for writing
The templates contain variable substitutions %var%
$macdir =~ s/\:/-/g;
system_checked(<<END);
set -e
- cd $c{TftpPath}$c{TftpPxeDir}
- sudo chown root.$c{TftpPxeGroup} $macdir
+ cd $ho->{Tftp}{Path}$ho->{Tftp}{PxeDir}
+ sudo chown root.$ho->{Tftp}{PxeGroup} $macdir
sudo chmod 2775 $macdir
sudo rm -f $hn
sudo ln -s $macdir $hn
sub setup_pxeboot_firstboot($) {
my ($ps_url) = @_;
- my $d_i= $c{TftpDiBase}.'/'.$r{arch}.'/'.$c{TftpDiVersion}.'-'.$ho->{Suite};
+ my $d_i= $ho->{Tftp}{DiBase}.'/'.$r{arch}.'/'.$c{TftpDiVersion}.'-'.$ho->{Suite};
my @installcmdline= qw(vga=normal);
push @installcmdline, di_installcmdline_core($ho, $ps_url, %xopts);
my $src_initrd= "$d_i/initrd.gz";
- my @initrds= "$c{TftpPath}/$src_initrd";
+ my @initrds= "$ho->{Tftp}{Path}/$src_initrd";
my $kernel;
foreach my $fp (keys %{ $ho->{Flags} }) {
$fp =~ s/^need-firmware-deb-// or next;
- my $cpio= "$c{TftpPath}/$d_i/$fp.cpio.gz";
+ my $cpio= "$ho->{Tftp}{Path}/$d_i/$fp.cpio.gz";
if (stat $cpio) {
logm("using firmware from: $cpio");
push @initrds, $cpio;
foreach my $kp (keys %{ $ho->{Flags} }) {
$kp =~ s/need-kernel-deb-// or next;
- my $kern= "$c{TftpPath}/$d_i/linux.$kp";
+ my $kern= "$ho->{Tftp}{Path}/$d_i/linux.$kp";
if (stat $kern) {
logm("using kernel from: $kern");
$kernel = "/$d_i/linux.$kp";
die "$kp $kern $!";
}
- my $cpio= "$c{TftpPath}/$d_i/$kp.cpio.gz";
+ my $cpio= "$ho->{Tftp}{Path}/$d_i/$kp.cpio.gz";
if (stat $cpio) {
logm("using kernel modules from: $cpio");
push @initrds, $cpio;
push @initrds, "$initrd_overlay.cpio.gz";
logm("using initrds: @initrds");
- my $initrd= "$c{TftpTmpDir}$ho->{Name}--initrd.gz";
- system_checked("cat -- @initrds >$c{TftpPath}$initrd");
+ my $initrd= "$ho->{Tftp}{TmpDir}$ho->{Name}--initrd.gz";
+ system_checked("cat -- @initrds >$ho->{Tftp}{Path}$initrd");
push @installcmdline, ("initrd=/$initrd",
"domain=$c{TestHostDomain}",