User Tools

Site Tools


dns_add_script

Differences

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

Link to this comparison view

Next revision
Previous revision
dns_add_script [2009/08/14 20:45]
jt created
dns_add_script [2009/08/25 04:43]
jt
Line 1: Line 1:
 <code perl> <code perl>
- 
 #​!/​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 File::Copy; use File::Copy;
 use IO::File; use IO::File;
-##use Text::​Template;​+use Text::​Template
 +use File::Grep qw( fgrep );
  
-my $entry; + 
-my $hostName; +##my $repository = "/​home/​jthomas/​projects/​qsp_dns_migration/​qsp.us.zone/"​
-my $ipAddress;​ +my $repository = "/​home/​jthomas/projects/dns/master/";
-my $domainName;​ +
-my $subDomain;​ +
-my $dbZoneFile+
-my $repository = "/​home/​jthomas/​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
 +
 +
 open (DATA, $dnsData), or die $!; open (DATA, $dnsData), or die $!;
 my @dnsLine = <​DATA>;​ my @dnsLine = <​DATA>;​
  
-foreach $entry (@dnsLine){ +foreach ​my $entry (@dnsLine){ 
 +
  chomp ($entry);  chomp ($entry);
- ($hostName,​ $ipAddress) = split('​ ', $entry); +  
- $subDomain = findDomainName($hostName)+ my ($hostName, $ipAddress) = split('​ ', $entry); 
-## print "​$domainName\n"​+ my ($domainName, ​$subDomain= findDomainName($hostName);​ 
- checkZoneExist($domainName); + checkZoneExist($domainName,​ $subDomain, $ipAddress);​
- +
- if ( defined($subDomain) && ​ $subDomain ne "​www"​){ +
- addToZone($dbZoneFile, $subDomain, $ipAddress);​ +
- }+
 } }
  
 close (DATA); close (DATA);
- 
 exit (0); exit (0);
  
 sub findDomainName{ sub findDomainName{
  
- my $hostName = shift;+ my ($hostName@_; 
 + my $domainName;
  my $subDomain;  my $subDomain;
  my $size;  my $size;
Line 46: Line 46:
  @tmp = split('​\.',​ $hostName);  @tmp = split('​\.',​ $hostName);
  $size = @tmp - 2;   $size = @tmp - 2; 
-## print "size of array: $size.\n";​ 
  
- if ( @tmp==2){ + if ( @tmp == 2){ 
- $domainName = "​$tmp[0].$tmp[1]";​ + 
- return undef+ return ​($hostName, ​undef);
-## print "​$domainName\n"​;+
  }  }
 +
  else{  else{
 +
  $domainName = "​$tmp[@tmp-2].$tmp[@tmp-1]";​  $domainName = "​$tmp[@tmp-2].$tmp[@tmp-1]";​
  
Line 59: Line 59:
  
  if ( ! defined($subDomain) ){  if ( ! defined($subDomain) ){
 +
  $subDomain=$tmp[$counter];​  $subDomain=$tmp[$counter];​
 +
  }  }
 +
  else{  else{
 +
  $subDomain="​$subDomain.$tmp[$counter]";​  $subDomain="​$subDomain.$tmp[$counter]";​
 +
  }  }
  }  }
-## print "​$subDomain.$domainName\n"; +  
- return ​$subDomain;+ return ($domainName$subDomain);
  }  }
 } }
Line 72: Line 77:
 sub checkZoneExist{ sub checkZoneExist{
  
- my $domainName = shift;+ my ($domainName, $subDomain, $ipAddress) ​@_;
  my $dbZoneFile = "​db.$domainName";​  my $dbZoneFile = "​db.$domainName";​
 + my $userName = "​jthomas";​
 + my $soa = "​2009081801 ​   ";
  
  if ( -e $repository.$dbZoneFile ){  if ( -e $repository.$dbZoneFile ){
- ## print "$dbZoneFile ​exists\n"​;+  
 + ## write subdomain to file if file exists;  
 + addToZone($dbZoneFile, $subDomain, $ipAddress); 
 +
  }  }
- else+  
- ##​ print ​"​$dbZoneFile ​does not exists\n"; + elsif ( (! defined($subDomain)) ||  $subDomain eq ""​)
 +  
 + my ($tabs) = tabLength($domainName."."); 
 + 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 $template = Text::​Template->​new(SOURCE => $templateSource) or die "​Couldn'​t construct template: $Text::​Template::​ERROR";​ 
 + 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 $! ; 
 + print DBFILE $result;  
 + close (DBFILE); 
 +  
 + print "​\[Info\] Zone file $dbZoneFile created.\n";​
  
 } }
Line 96: Line 118:
 sub addToZone{ sub addToZone{
   
- $dbZoneFile = shift; ​ 
- $subDomain = shift; 
- $ipAddress = shift; 
   
- print "​$subDomain\t\tIN\tA\t$ipAddress\n";​+ my ($dbZoneFile, ​ $subDomain, $ipAddress) = @_ ;  
 +  
 + if ( defined($subDomain) && ​ $subDomain ne "www"​){ 
 +  
 + if ( fgrep {/^$subDomain\t/} $repository.$dbZoneFile ){ 
 +  
 + 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); 
 +  
 +
 + }  
 +}
  
 +sub tabLength{
 +
 + my ($word) = @_; 
 + my $tabs = "​\t"​ x (((32 - length($word) + 6) / 8));
 + if (length($tabs) == 0){
 + $tabs = "​\t";​
 + }
 + 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 (external edit)