This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
dns_add_script [2009/08/17 21:11] jt |
dns_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> |