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 revision Previous revision
Next revision
Previous revision
dns_add_script [2009/08/17 17:11]
jt
dns_add_script [2009/08/25 00: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: 2009/08/25 00:43 by jt