remove password from amt link title
[pxelator] / lib / PXElator / client.pm
index e826380..4a51714 100644 (file)
@@ -6,11 +6,13 @@ use autodie;
 
 use File::Slurp;
 use Data::Dump qw/dump/;
+use File::Path;
 
 use server;
 use format;
 use ip;
 use ping;
+use kvm;
 
 our $debug = $server::debug;
 
@@ -83,6 +85,13 @@ sub next_ip($) {
        my $mac = shift;
        $mac = format::mac($mac);
 
+       if ( $server::new_clients > 0 ) {
+               warn "# clients left: ", --$server::new_clients;
+       } else {
+               warn "W: no new clients accepted";
+               return '0.0.0.0';
+       }
+
        my $prefix = $server::ip;
        $prefix =~ s{\.\d+$}{.};
        my $addr = $server::ip_from || die;
@@ -104,7 +113,7 @@ sub next_ip($) {
 sub save_ip_mac {
        my ($ip,$mac) = @_;
        $mac = format::mac($mac);
-       return if $mac eq '00:00:00:00:00:00';
+       return if $mac eq '00:00:00:00:00:00' || $ip eq '0.0.0.0';
 
        mkdir ip_path($ip) unless -e ip_path($ip);
 
@@ -157,6 +166,7 @@ sub all_ips {
        map {
                my $ip = $_;
                $ip =~ s{^.+/ip/}{};
+               autocreate_params( $ip );
                $ip;
        } glob("$server::conf/ip/*") 
 }
@@ -167,7 +177,7 @@ sub remove {
        if ( my $mac = mac_from_ip $ip ) {
                unlink "$server::conf/mac/$mac";
        }
-       rmdir "$server::conf/ip/$ip";
+       rmtree "$server::conf/ip/$ip";
 }
 
 sub arp_mac_dev {
@@ -186,4 +196,25 @@ sub arp_mac_dev {
        return $arp;
 }
 
+sub rebuild_mac_links {
+       warn "# rebuild mac links";
+       foreach my $ip ( all_ips ) {
+               my $mac = ip_path $ip, 'mac';
+               if ( -e $mac ) {
+                       $mac = read_file $mac;
+                       save_ip_mac( $ip, $mac );
+                       warn "## $ip $mac\n";
+               }
+       }
+}
+
+sub autocreate_params {
+       my $ip = shift;
+       my $mac = mac_from_ip $ip;
+       if ( $mac =~ m{^AC:DE:48:00:00} && ! defined conf( $ip, 'kvm' ) ) {
+               conf( $ip, 'kvm', default => kvm::nr_from_mac( $mac ) );
+               warn "# create kvm for $ip";
+       }
+}
+
 1;