zone-mk.pl
branchhs12
changeset 39 8b46e7c48995
parent 30 5ac92c1ffdf9
child 40 512e12c40389
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/zone-mk.pl	Tue Dec 21 13:53:39 2010 +0100
@@ -0,0 +1,134 @@
+#!/usr/bin/perl -w
+
+use strict;
+use FindBin;
+
+if ( @ARGV < 2 ) {
+    print "usage: zone-mk kundennummer domain ... \n";
+    exit 1;
+}
+
+# oeffnet Konfigurations- und Templatefiles - relativ oder absolut
+my @configs = ( "$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf" );
+my @templc = (
+    "$FindBin::Bin/templates/named.config",
+    "/etc/dnstools/templates/named.config"
+);
+my @templz = (
+    "$FindBin::Bin/templates/named.zone",
+    "/etc/dnstools/templates/named.zone"
+);
+my %config;
+
+for ( grep {-f} @configs ) {
+    open( CONFIG, $_ ) or die "Can't open $_: $!\n";
+}
+unless ( seek( CONFIG, 0, 0 ) ) {
+    die "Can't open config (searched: @configs)\n";
+}
+
+for ( grep {-f} @templc ) {
+    open( TEMPCONF, $_ ) or die "Can't open $_: $!\n";
+}
+unless ( seek( TEMPCONF, 0, 0 ) ) {
+    die "Can't open template (searched: @templc)\n";
+}
+
+for ( grep {-f} @templz ) {
+    open( TEMPZONE, $_ ) or die "Can't open $_: $!\n";
+}
+unless ( seek( TEMPZONE, 0, 0 ) ) {
+    die "Can't open template (searched: @templz)\n";
+}
+
+while (<CONFIG>) {
+    chomp;
+    s/#.*//;
+    s/\t//g;
+    s/\s//g;
+    next unless length;
+    my ( $cname, $ccont ) = split( /\s*=\s*/, $_, 2 );
+    $config{$cname} = $ccont;
+}
+close(CONFIG);
+
+my $primary       = $config{primary};
+my $secondary     = $config{secondary};
+my $zone_conf_dir = $config{zone_conf_dir};
+my $master_dir    = $config{master_dir};
+my $customer      = shift @ARGV;
+chomp( my $primary_ip   = `dig +short $primary` );
+chomp( my $secondary_ip = `dig +short $secondary` );
+chomp( my $this_host    = `hostname -f` );
+chomp( my $this_ip      = `hostname -i` );
+chomp( my $this_domain  = `hostname -d` );
+chomp( my $time         = `date +%Y%m%d00` );
+chomp( my $start        = `date -I` );
+my $hostmaster = "hostmaster.$this_domain";
+
+unless ( -d $master_dir and -r $master_dir ) {
+    die "$master_dir: $!\n";
+}
+
+unless ( -d $zone_conf_dir and -r $zone_conf_dir ) {
+    die "$master_dir: $!\n";
+}
+
+# legt fuer jede domain in @ARGV ein verzeichnis in $master_dir an.
+# schreibt aus den angegebenen templates die dateien $zonefile und $config
+# in die entsprechenden verzeichnisse.
+for (@ARGV) {
+
+    chomp( my $domain = `idn --quiet "$_"` );
+    my $zonefile   = "$master_dir/$domain/$domain";
+    my $config     = "$zone_conf_dir/$domain";
+    my $utf8domain = "$_";
+
+    unless ( -d "$master_dir/$domain" ) {
+        `mkdir $master_dir/$domain`;
+    }
+
+    if ( -f $zonefile ) {
+        $zonefile =~ s#/.*/##;
+        print "$zonefile exists. Skipping $domain\n";
+        next;
+    }
+    if ( -f $config ) {
+        $config =~ s#/.*/##;
+        print "$config exists. Skipping $domain\n";
+        next;
+    }
+
+    print "$domain ($_) for $customer \n";
+
+    my @tempzone = <TEMPZONE>;
+    for (@tempzone) {
+        s#<start>#$start#;
+        s#<domain>#$domain#;
+        s#<time>#$time#;
+        s#<primary>#$primary#;
+        s#<secondary>#$secondary#;
+        s#<hostmaster>#$hostmaster#;
+        s#<customer>#$customer#;
+        s#<utf8domain>#$utf8domain#;
+    }
+
+    open( ZONEOUT, ">$zonefile" );
+    print ZONEOUT @tempzone;
+    close(ZONEOUT);
+
+    my @tempconf = <TEMPCONF>;
+    for (@tempconf) {
+        s#<domain>#$domain#;
+        s#<start>#$start#;
+        s#<customer>#$customer#;
+        s#<utf8domain>#$utf8domain#;
+        s#<file>#$master_dir/$domain/$domain#;
+        s#<primary_ip>#$primary_ip#;
+        s#<secondary_ip>#$secondary_ip#;
+    }
+
+    open( CONFOUT, ">$config" );
+    print CONFOUT @tempconf;
+    close(CONFOUT);
+}