User Tools

Site Tools


dns_add_script

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
dns_add_script [2009/08/17 21:11] jtdns_add_script [2009/08/25 04:43] jt
Line 2: Line 2:
 #!/usr/bin/perl -w #!/usr/bin/perl -w
 ##Jason Thomas ##Jason Thomas
 +##Last Modified 20090819
 +
 use strict; use strict;
 use lib '/home/jthomas/lib/perl5/site_perl/5.8.8/'; use lib '/home/jthomas/lib/perl5/site_perl/5.8.8/';
Line 7: Line 9:
 use IO::File; use IO::File;
 use Text::Template; use Text::Template;
 +use File::Grep qw( fgrep );
 +
  
-my $repository = "/home/jthomas/dns/master/";+##my $repository = "/home/jthomas/projects/qsp_dns_migration/qsp.us.zone/"; 
 +my $repository = "/home/jthomas/projects/dns/master/";
 my $dnsData = "data"; my $dnsData = "data";
  
 +##currently designed to read from file. however if fqdn is not before fqhn, it will not be able write
 +##the entry until db.fqdn is created
  
  
Line 17: Line 24:
  
 foreach my $entry (@dnsLine){ foreach my $entry (@dnsLine){
 +
  chomp ($entry);  chomp ($entry);
 +
  my ($hostName, $ipAddress) = split(' ', $entry);  my ($hostName, $ipAddress) = split(' ', $entry);
  my ($domainName, $subDomain) = findDomainName($hostName);  my ($domainName, $subDomain) = findDomainName($hostName);
- my $dbZoneFile = checkZoneExist($domainName, $subDomain, $ipAddress); + checkZoneExist($domainName, $subDomain, $ipAddress);
- addToZone($dbZoneFile, $subDomain, $ipAddress);+
 } }
  
Line 44: Line 51:
  return ($hostName, undef);  return ($hostName, undef);
  }  }
- +
  else{  else{
   
Line 52: Line 59:
  
  if ( ! defined($subDomain) ){  if ( ! defined($subDomain) ){
 +
  $subDomain=$tmp[$counter];  $subDomain=$tmp[$counter];
   
  }  }
 +
  else{  else{
 +
  $subDomain="$subDomain.$tmp[$counter]";  $subDomain="$subDomain.$tmp[$counter]";
   
  }  }
  }  }
 +
  return ($domainName, $subDomain);  return ($domainName, $subDomain);
  }  }
Line 69: Line 80:
  my $dbZoneFile = "db.$domainName";  my $dbZoneFile = "db.$domainName";
  my $userName = "jthomas";  my $userName = "jthomas";
- my $soa = "2009081701";+ my $soa = "2009081801    ";
  
  if ( -e $repository.$dbZoneFile ){  if ( -e $repository.$dbZoneFile ){
- ## print "File Exists!"; +  
 + ## write subdomain to file if file exists;  
 + addToZone($dbZoneFile, $subDomain, $ipAddress); 
 +
  }  }
   
- else+ elsif ( (! defined($subDomain)) ||  $subDomain eq ""){ 
- my ($tabs) = tabLength($domainName);+  
 + my ($tabs) = tabLength($domainName.".");
  makeZone("customArecord.tmpl", $dbZoneFile,  {soa => \$soa, userName => \$userName, domain => \"$domainName.", tabs => \$tabs, CUSTOMIP => $ipAddress });  makeZone("customArecord.tmpl", $dbZoneFile,  {soa => \$soa, userName => \$userName, domain => \"$domainName.", tabs => \$tabs, CUSTOMIP => $ipAddress });
 +
  }  }
   
- return $dbZoneFile; 
 } }
- 
- 
  
 sub makeZone{ sub makeZone{
   
- my ($templateSource,$dbZoneFile, $fillInHash) = @_;+ my ($templateSource, $dbZoneFile, $fillInHash) = @_;
  my $template = Text::Template->new(SOURCE => $templateSource) or die "Couldn't construct template: $Text::Template::ERROR";  my $template = Text::Template->new(SOURCE => $templateSource) or die "Couldn't construct template: $Text::Template::ERROR";
  my $result = $template->fill_in(HASH => $fillInHash);  my $result = $template->fill_in(HASH => $fillInHash);
 +
 +     if (! defined $result) {
 +        die "Couldn't fill in template: $Text::Template::ERROR";
 +    }
   
  open(DBFILE, ">$repository/$dbZoneFile") , or die $! ;  open(DBFILE, ">$repository/$dbZoneFile") , or die $! ;
Line 103: Line 120:
   
  my ($dbZoneFile,  $subDomain, $ipAddress) = @_ ;   my ($dbZoneFile,  $subDomain, $ipAddress) = @_ ; 
-  +
- +
- +
  if ( defined($subDomain) &&  $subDomain ne "www"){  if ( defined($subDomain) &&  $subDomain ne "www"){
- my ($tabs) = tabLength($subDomain); +  
- open(DBFILE, ">>$repository/$dbZoneFile") , or die $! ; + if ( fgrep {/^$subDomain\t/} $repository.$dbZoneFile ){ 
- print DBFILE "$subDomain$tabs"."IN\tA\t$ipAddress\n"; +  
- close (DBFILE);+ print "Record $subDomain is already in $dbZoneFile \n"; 
 +
 +  
 + else { 
 +  
 + my ($tabs) = tabLength($subDomain); 
 + open(DBFILE, ">>$repository/$dbZoneFile") , or die $!; 
 + print DBFILE "$subDomain$tabs"."IN\tA\t$ipAddress\n"; 
 + close (DBFILE); 
 +  
 + }
  }   }
 } }
Line 118: Line 143:
  my ($word) = @_;   my ($word) = @_; 
  my $tabs = "\t" x (((32 - length($word) + 6) / 8));  my $tabs = "\t" x (((32 - length($word) + 6) / 8));
- if (length($tabs) == 0) { + if (length($tabs) == 0){ 
-    $tabs = " "; + $tabs = "\t";
-   +
  }  }
-     return $tabs;+ return $tabs;
 } }
 +
 +
 +###########################################################################
 +# Help, info and correctional information.
 +###########################################################################
 +sub subUsage {
 +
 +    print "\nUsage: addZone.pl \[-Dn?\] <username> <hostname> <ipaddress>\n";
 +    print "       newZone.pl <username> <domain> <IP address>\n";
 +    print "addZone will create a new zone file, based on domain name. It will also add a new zone to the\n";
 +    print "list of zones governed by named-zones.conf. This file will be created and sent, if needed, by dnsPush.\n";
 +    print "Only use this to add a new zone and make sure you have the correct type (virtual, www or blank).\n\n";
 +    print "-D          Show debug information while running.\n";
 +    print "-n          Dryrun mode, make no changes, displays final zone file on screen.\n";
 +    print "-?          Help page, displays this page.\n\n";
 +    exit(0);
 +}
 +
 </code> </code>
dns_add_script.txt · Last modified: 2020/08/10 02:35 by 127.0.0.1