added server::as_hash_for $ip to get server configuration
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 2 Jan 2010 17:20:40 +0000 (17:20 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 2 Jan 2010 17:20:40 +0000 (17:20 +0000)
with local override from conf/ip/$ip/server.yaml

Makefile.PL
lib/PXElator/config.pm
lib/PXElator/dhcpd.pm
lib/PXElator/server.pm
lib/PXElator/t/server.t

index ad66dd0..48560ba 100644 (file)
@@ -18,6 +18,7 @@ requires      'Regexp::Common';
 requires       'Data::Structure::Util';
 requires       'XML::Simple';
 requires       'File::Slurp';
+requires       'YAML';
 
 features(
        'ssh' => [
index 286b966..9d1c2a6 100644 (file)
@@ -147,8 +147,11 @@ sub nfsroot {
 
                system "sudo debootstrap --arch i386 lenny $debootstrap $debian_mirror";
 
-               file::append "$debootstrap/etc/kernel-img.conf", "do_initrd = Yes\n" &&
-               in_chroot     $debootstrap => 'apt-get install -y --force-yes atl2-modules-2.6-686';
+               file::append "$debootstrap/etc/apt/sources.list.d/non-free.list", "deb $debian_mirror lenny non-free\n";
+               in_chroot     $debootstrap => 'apt-get update';
+
+               file::append "$debootstrap/etc/kernel-img.conf", "do_initrd = Yes\n";
+               in_chroot     $debootstrap => 'apt-get install -y --force-yes atl2-modules-2.6-686 firmware-bnx2';
                in_chroot     $debootstrap => 'apt-get -f install -y --force-yes locales';      # linux-image-2.6-686
 
                file::append "$debootstrap/etc/initramfs-tools/modules", "atl2\n";
index df6df27..0f29af5 100644 (file)
@@ -121,14 +121,7 @@ sub process_packet {
 
        config::for_ip( $ip );
 
-       my $server;
-       map { $server->{ $_ } = eval '$server::' . $_ } ( 'ip', 'netmask', 'bcast', 'domain' );
-
-       if ( my $force = client::conf( $ip => 'dhcpd.pl' ) ) {
-               eval $force;
-               die "$force\n$@" if $@;
-               warn "force server ", dump $server;
-       }
+       my $server = server::as_hash_for $ip;
 
        my $packet = {
                Op              => BOOTREPLY(),
index ec904e5..e12872d 100644 (file)
@@ -3,6 +3,9 @@ package server;
 use warnings;
 use strict;
 
+use Data::Dump qw(dump);
+use YAML qw();
+
 our $base_dir = '/srv/pxelator';
 
 use ties;
@@ -56,6 +59,18 @@ sub conf_default { shared($_[0]) || $_[1] }
 
 sub debug { shared('debug', @_) || 0 }
 
+sub as_hash_for {
+       my $ip = shift;
+
+       my $server;
+       map { $server->{ $_ } = eval '$server::' . $_ } ( 'ip', 'netmask', 'bcast', 'domain' );
+
+       my $server_path = "$server::conf/ip/$ip/server.yaml";
+       $server =  YAML::LoadFile $server_path if -e $server_path;
+
+       return $server;
+}
+
 warn "loaded";
 
 1;
index f2deb05..ad1cea7 100755 (executable)
@@ -4,7 +4,7 @@ use warnings;
 use strict;
 use autodie;
 
-use Test::More tests => 4;
+use Test::More tests => 5;
 use Data::Dump qw/dump/;
 
 use_ok 'server';
@@ -15,3 +15,5 @@ cmp_ok( $test, '==', server::shared( 'test' ), 'get shared' );
 
 cmp_ok( $test, '==', server::conf_default( 'test' ), 'get conf_default' );
 
+ok( my $server = server::as_hash_for( '10.60.0.200' ), 'as_hash_for' );
+diag dump $server;