# HG changeset patch # User Heiko Schlittermann # Date 1295195341 -3600 # Node ID c47953192c5ce5dae865281be6c02ef1a5c1e4dd # Parent 7c94598b76497e7e8b270c9668ff731ef324092a using get_config() with default list of config files diff -r 7c94598b7649 -r c47953192c5c Build.PL --- a/Build.PL Sun Jan 16 17:28:48 2011 +0100 +++ b/Build.PL Sun Jan 16 17:29:01 2011 +0100 @@ -6,11 +6,13 @@ my $build = Module::Build->new( module_name => "dnstools", - author => "schlittermann.de", + dist_author => "schlittermann.de", dist_version => "0.1", - license => "perl", + create_license => 1, + license => "gpl", requires => { perl => "5.10.0", }, build_requires => { "Pod::Coverage" => 0, }, + script_files => [glob "bin/*"], # avoid .swp files ); $build->create_build_script; diff -r 7c94598b7649 -r c47953192c5c bin/dnssec-keytool --- a/bin/dnssec-keytool Sun Jan 16 17:28:48 2011 +0100 +++ b/bin/dnssec-keytool Sun Jan 16 17:29:01 2011 +0100 @@ -3,7 +3,6 @@ use v5.10; use warnings; use strict; -use FindBin; use File::Temp; use Getopt::Long; use Pod::Usage; @@ -23,7 +22,7 @@ MAIN: { ### reading config - my %conf = get_config("$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf"); + my %conf = get_config(); my ($cmd, @zones) = read_argv($conf{master_dir}); diff -r 7c94598b7649 -r c47953192c5c bin/update-serial --- a/bin/update-serial Sun Jan 16 17:28:48 2011 +0100 +++ b/bin/update-serial Sun Jan 16 17:29:01 2011 +0100 @@ -4,7 +4,6 @@ use strict; use warnings; -use FindBin; use File::Basename; use Pod::Usage; use Getopt::Long; @@ -51,7 +50,8 @@ ) or pod2usage; # merge the config and the defined options from commandline - %config = get_config("$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf", \%opt); + %config = get_config("$ENV{DNSTOOLS_CONF}", "dnstools.conf", + "$ENV{HOME}/.dnstools.conf", "/etc/dnstools.conf", \%opt); our $bind_dir = $config{bind_dir}; our $conf_dir = $config{zone_conf_dir}; diff -r 7c94598b7649 -r c47953192c5c bin/zone-ls --- a/bin/zone-ls Sun Jan 16 17:28:48 2011 +0100 +++ b/bin/zone-ls Sun Jan 16 17:29:01 2011 +0100 @@ -5,7 +5,6 @@ use warnings; use Pod::Usage; use File::Basename; -use FindBin; use Time::Local; use Getopt::Long; use if $ENV{DEBUG} => "Smart::Comments"; @@ -29,7 +28,7 @@ }, ) or pod2usage; - %config = get_config("$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf"); + %config = get_config(); die "$config{master_dir}: $!\n" if not -d $config{master_dir}; foreach my $dir (grep { -d } glob "$config{master_dir}/*") { diff -r 7c94598b7649 -r c47953192c5c bin/zone-mk --- a/bin/zone-mk Sun Jan 16 17:28:48 2011 +0100 +++ b/bin/zone-mk Sun Jan 16 17:29:01 2011 +0100 @@ -13,7 +13,6 @@ } # 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" @@ -36,7 +35,7 @@ } -%config = get_config(@configs); +%config = get_config(); my $primary = $config{primary}; my $secondary = $config{secondary}; diff -r 7c94598b7649 -r c47953192c5c bin/zone-rm --- a/bin/zone-rm Sun Jan 16 17:28:48 2011 +0100 +++ b/bin/zone-rm Sun Jan 16 17:29:01 2011 +0100 @@ -3,11 +3,10 @@ use warnings; use strict; use File::Path; -use FindBin; use DNStools::Config qw(get_config); # liest die Konfiguration ein -my %config = get_config("$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf"); +my %config = get_config(); my $master_dir = $config{"master_dir"}; my $conf_dir = $config{"zone_conf_dir"}; diff -r 7c94598b7649 -r c47953192c5c lib/DNStools/Config.pm --- a/lib/DNStools/Config.pm Sun Jan 16 17:28:48 2011 +0100 +++ b/lib/DNStools/Config.pm Sun Jan 16 17:29:01 2011 +0100 @@ -11,7 +11,13 @@ sub get_config(@) { # read configuration - my @configs = @_; + my @configs = + @_ + ? @_ + : ( + $ENV{DNSTOOLS_CONF}, "dnstools.conf", + "$ENV{HOME}/.dnstools.conf", "/etc/dnstools.conf" + ); my %config; # the first config FILE @@ -47,6 +53,7 @@ =head1 SYNOPSIS use DNStools::Config qw(get_config); + %config = get_config(); %config = get_config($file1, $file2, ...); =head1 DESCRIPTION @@ -66,6 +73,10 @@ Read the first file of the list (or dies if none of the files is found). Returns a hash with the config keys and values. +If the list is empty, the configuration file is search in some default +locations: C<$DNSTOOLS_CONF>, F<./dnstools.conf>, +F<$HOME/.dnstools.conf>, F. + =back =cut diff -r 7c94598b7649 -r c47953192c5c t/00-config.t --- a/t/00-config.t Sun Jan 16 17:28:48 2011 +0100 +++ b/t/00-config.t Sun Jan 16 17:29:01 2011 +0100 @@ -12,15 +12,13 @@ can_ok("DNStools::Config" => "get_config"); -# should die if there is no config -eval { get_config() }; -ok($@, "dies on missing file names"); - eval { get_config("xxx|xxx", "yyy|yyy") }; ok($@, "dies on missing config"); +my ($tmp, %cf); + # prepare some simple sample config -my $tmp = File::Temp->new(); +$tmp = File::Temp->new(); print {$tmp} <<__EOF; # comment abc = xyz @@ -28,9 +26,18 @@ __EOF close($tmp); -my %cf = get_config($tmp->filename); +# the files is specified, it should find the first +# existing +%cf = get_config("xxx|xxx", $tmp->filename); ok(%cf, "got config"); +is($cf{abc} => "xyz", "simple value"); +is($cf{other} => "valuewithspace", "spaced value"); +# it should find the file specified in $ENV{DNSTOOLS_CONF} +$ENV{DNSTOOLS_CONF} = $tmp->filename; +%cf = (); +%cf = get_config("xxx|xxx", $tmp->filename); +ok(%cf, "got config from env"); is($cf{abc} => "xyz", "simple value"); is($cf{other} => "valuewithspace", "spaced value");