X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=installcheck%2FInstallcheck%2FConfig.pm;h=2fc3918677f6996d0d2171a67c2ea133142b15ce;hb=fd48f3e498442f0cbff5f3606c7c403d0566150e;hp=f6b2f23e4f699499a0632c990b0b8f36e5ae19cc;hpb=96f35b20267e8b1a1c846d476f27fcd330e0b018;p=debian%2Famanda diff --git a/installcheck/Installcheck/Config.pm b/installcheck/Installcheck/Config.pm index f6b2f23..2fc3918 100644 --- a/installcheck/Installcheck/Config.pm +++ b/installcheck/Installcheck/Config.pm @@ -1,5 +1,5 @@ # vim:ft=perl -# Copyright (c) 2005-2008 Zmanda Inc. All Rights Reserved. +# Copyright (c) 2008,2009 Zmanda, Inc. All Rights Reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 as published @@ -14,10 +14,11 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -# Contact information: Zmanda Inc, 465 S Mathlida Ave, Suite 300 +# Contact information: Zmanda Inc, 465 S. Mathilda Ave., Suite 300 # Sunnyvale, CA 94086, USA, or: http://www.zmanda.com package Installcheck::Config; +use Installcheck; use Amanda::Paths; use Amanda::Constants; use File::Path; @@ -33,7 +34,9 @@ Installcheck::Config - set up amanda configurations for installcheck testing my $testconf = Installcheck::Config->new(); $testconf->add_param("runtapes", "5"); - $testconf->add_subsec("tapetype", "DUCKTAPE", { length => "10G", filemark => "4096k" }); + $testconf->add_tapetype("DUCKTAPE", [ + length => "10G", filemark => "4096k", + ]); # ... $testconf->write(); @@ -41,7 +44,7 @@ The resulting configuration is always named "TESTCONF". The basic configuration contains only a few parameters that are necessary just to run Amanda applications in the test environment. It also contains a tapetype, C. To change tapetype parameters, -call C<$cf->add_tapetype> with a new definition of C. +call C<< $cf->add_tapetype >> with a new definition of C. Note that it's quite possible to produce an invalid configuration with this package (and, in fact, some of the tests do just that). @@ -69,6 +72,7 @@ sub new { my $infofile = "$CONFIG_DIR/TESTCONF/curinfo"; my $logdir = "$CONFIG_DIR/TESTCONF/log"; my $indexdir = "$CONFIG_DIR/TESTCONF/index"; + my $org = "DailySet1"; my $self = { 'infofile' => $infofile, @@ -85,6 +89,7 @@ sub new { 'infofile' => "\"$infofile\"", 'logdir' => "\"$logdir\"", 'indexdir' => "\"$indexdir\"", + 'org' => "\"$org\"", # (this is actually added while writing the config file, if not # overridden by the caller) @@ -93,8 +98,8 @@ sub new { # global client config 'client_params' => [ - 'amandates' => "\"$AMANDA_TMPDIR/TESTCONF/amandates\"", - 'gnutar_list_dir' => "\"$AMANDA_TMPDIR/TESTCONF/gnutar_listdir\"", + 'amandates' => "\"$Installcheck::TMP/TESTCONF/amandates\"", + 'gnutar_list_dir' => "\"$Installcheck::TMP/TESTCONF/gnutar_listdir\"", ], # config-specific client config @@ -108,10 +113,11 @@ sub new { 'dumptypes' => [ ], 'interfaces' => [ ], 'holdingdisks' => [ ], - 'application-tool' => [ ], - 'script-tool' => [ ], + 'application' => [ ], + 'script' => [ ], 'devices' => [ ], 'changers' => [ ], + 'text' => '', 'dles' => [ ], }; @@ -126,9 +132,9 @@ sub new { =item C -Add the given parameter to the configuration file, overriding any -previous value. Note that strings which should be quoted in the configuration -file itself must be double-quoted here, e.g., +Add the given parameter to the configuration file. Note that strings which +should be quoted in the configuration file itself must be double-quoted here, +e.g., $testconf->add_param('org' => '"MyOrganization"'); @@ -143,11 +149,10 @@ sub add_param { =item C, C -Add the given parameter to the client configuration file, overriding any -previous value, as C does for the server configuration file. -C addresses the global client configuration file, while -C inserts parmeters into -C. +Add the given parameter to the client configuration file, as C does +for the server configuration file. C addresses the global +client configuration file, while C inserts parmeters +into C. $testconf->add_client_param('auth' => '"krb2"'); $testconf->add_client_config_param('client_username' => '"freddy"'); @@ -168,70 +173,121 @@ sub add_client_config_param { push @{$self->{'client_config_params'}}, $param, $value; } +=item C + +Remove the given parameter from the config file. + +=cut + +sub remove_param { + my $self = shift; + my ($param) = @_; + + my @new_params; + + while (@{$self->{'params'}}) { + my ($p, $v) = (shift @{$self->{'params'}}, shift @{$self->{'params'}}); + next if $p eq $param; + push @new_params, $p, $v; + } + + $self->{'params'} = \@new_params; +} + =item C =item C =item C +=item C =item C =item C =item C =item C =item C -Add the given subsection to the configuration file, including all -values in the arrayref. The values should be specified as alternating -key/value pairs. +Add the given subsection to the configuration file, including all values in the +arrayref. The values should be specified as alternating key/value pairs. +Since holdingdisk definitions usually don't have a "define" keyword, +C does not add one, but C does. =cut sub _add_subsec { my $self = shift; - my ($subsec, $name, $values_arrayref) = @_; + my ($subsec, $name, $use_define, $values) = @_; # first delete any existing subsections with that name @{$self->{$subsec}} = grep { $_->[0] ne $name } @{$self->{$subsec}}; # and now push the new subsection definition on the end - push @{$self->{$subsec}}, [$name, @$values_arrayref]; + push @{$self->{$subsec}}, [$name, $use_define, $values]; } sub add_tapetype { my $self = shift; - $self->_add_subsec("tapetypes", @_); + my ($name, $values) = @_; + $self->_add_subsec("tapetypes", $name, 1, $values); } sub add_dumptype { my $self = shift; - $self->_add_subsec("dumptypes", @_); + my ($name, $values) = @_; + $self->_add_subsec("dumptypes", $name, 1, $values); } +# by default, holdingdisks don't have the "define" keyword sub add_holdingdisk { my $self = shift; - $self->_add_subsec("holdingdisks", @_); + my ($name, $values) = @_; + $self->_add_subsec("holdingdisks", $name, 0, $values); +} + +# add a holdingdisk definition only (use "define" keyword) +sub add_holdingdisk_def { + my $self = shift; + my ($name, $values) = @_; + $self->_add_subsec("holdingdisks", $name, 1, $values); } sub add_interface { my $self = shift; - $self->_add_subsec("interfaces", @_); + my ($name, $values) = @_; + $self->_add_subsec("interfaces", $name, 1, $values); } sub add_application { my $self = shift; - $self->_add_subsec("application-tool", @_); + my ($name, $values) = @_; + $self->_add_subsec("application", $name, 1, $values); } sub add_script { my $self = shift; - $self->_add_subsec("script-tool", @_); + my ($name, $values) = @_; + $self->_add_subsec("script", $name, 1, $values); } sub add_device { my $self = shift; - $self->_add_subsec("devices", @_); + my ($name, $values) = @_; + $self->_add_subsec("devices", $name, 1, $values); } sub add_changer { my $self = shift; - $self->_add_subsec("changers", @_); + my ($name, $values) = @_; + $self->_add_subsec("changers", $name, 1, $values); +} + +=item C + +Add arbitrary text to the config file. + +=cut + +sub add_text { + my $self = shift; + my ($text) = @_; + $self->{'text'} .= $text; } =item C @@ -256,18 +312,17 @@ files necessary to run Amanda. sub write { my $self = shift; + cleanup(); + my $testconf_dir = "$CONFIG_DIR/TESTCONF"; - if (-e $testconf_dir) { - rmtree($testconf_dir) or die("Could not remove '$testconf_dir'"); - } mkpath($testconf_dir); # set up curinfo dir, etc. mkpath($self->{'infofile'}) or die("Could not create infofile directory"); mkpath($self->{'logdir'}) or die("Could not create logdir directory"); mkpath($self->{'indexdir'}) or die("Could not create indexdir directory"); - my $amandates = $AMANDA_TMPDIR . "/TESTCONF/amandates"; - my $gnutar_listdir = $AMANDA_TMPDIR . "/TESTCONF/gnutar_listdir"; + my $amandates = $Installcheck::TMP . "/TESTCONF/amandates"; + my $gnutar_listdir = $Installcheck::TMP . "/TESTCONF/gnutar_listdir"; if (! -d $gnutar_listdir) { mkpath($gnutar_listdir) or die("Could not create '$gnutar_listdir'"); @@ -330,13 +385,14 @@ sub _write_amanda_conf { # write out subsections $self->_write_amanda_conf_subsection($amanda_conf, "tapetype", $self->{"tapetypes"}); - $self->_write_amanda_conf_subsection($amanda_conf, "application-tool", $self->{"application-tool"}); - $self->_write_amanda_conf_subsection($amanda_conf, "script-tool", $self->{"script-tool"}); + $self->_write_amanda_conf_subsection($amanda_conf, "application", $self->{"application"}); + $self->_write_amanda_conf_subsection($amanda_conf, "script", $self->{"script"}); $self->_write_amanda_conf_subsection($amanda_conf, "dumptype", $self->{"dumptypes"}); $self->_write_amanda_conf_subsection($amanda_conf, "interface", $self->{"interfaces"}); $self->_write_amanda_conf_subsection($amanda_conf, "holdingdisk", $self->{"holdingdisks"}); $self->_write_amanda_conf_subsection($amanda_conf, "device", $self->{"devices"}); $self->_write_amanda_conf_subsection($amanda_conf, "changer", $self->{"changers"}); + print $amanda_conf "\n", $self->{'text'}, "\n"; close($amanda_conf); } @@ -346,18 +402,20 @@ sub _write_amanda_conf_subsection { my ($amanda_conf, $subsec_type, $subsec_ref) = @_; for my $subsec_info (@$subsec_ref) { - my ($subsec_name, @values) = @$subsec_info; + my ($subsec_name, $use_define, $values) = @$subsec_info; - if ($subsec_type eq "holdingdisk") { - print $amanda_conf "\nholdingdisk $subsec_name {\n"; - } else { - print $amanda_conf "\ndefine $subsec_type $subsec_name {\n"; - } + my $define = $use_define? "define " : ""; + print $amanda_conf "\n$define$subsec_type $subsec_name {\n"; + my @values = @$values; # make a copy while (@values) { $param = shift @values; $value = shift @values; - print $amanda_conf "$param $value\n"; + if ($param eq "inherit") { + print $amanda_conf "$value\n"; + } else { + print $amanda_conf "$param $value\n"; + } } print $amanda_conf "}\n"; } @@ -413,4 +471,17 @@ sub _write_amanda_client_config_conf { close($amanda_client_conf); } +=item C (callable as a package method too) + +Clean up by deleting the configuration directory. + +=cut + +sub cleanup { + my $testconf_dir = "$CONFIG_DIR/TESTCONF"; + if (-e $testconf_dir) { + rmtree($testconf_dir) or die("Could not remove '$testconf_dir'"); + } +} + 1;