[Stgt-devel] [PATCH] add dumping current tgtd configuration in tgt-admin

Tomasz Chmielewski mangoo
Mon Jul 28 10:08:55 CEST 2008


FUJITA Tomonori schrieb:
> On Fri, 25 Jul 2008 17:14:08 +0200
> Tomasz Chmielewski <mangoo at wpkg.org> wrote:
> 
>> Add dumping current tgtd configuration to stdout in tgt-admin.
>> The dumped config will not contain any passwords as tgtadm doesn't show 
>> them, they are currently substituted with some BIG FAT words.
>>
>> It currently adds a "driver" config option to each target (i.e. driver 
>> iscsi) in order to support more target types than just iscsi - I will 
>> add support to it in the rest of tgt-admin next week.
>>
>>
>> Signed-off-by: Tomasz Chmielewski (mangoo at wpkg.org)
> 
> Thanks!
> 
> But the patch is corrupted (tabs were replaced with spaces). Can you
> resend a proper one (if you can't as a plain text, an attachment is
> fine)?
> 
> I would appreciate if you could send a patch generated with git.

Here comes the git one:


diff --git a/scripts/tgt-admin b/scripts/tgt-admin
index 181a4fd..c47cf39 100755
--- a/scripts/tgt-admin
+++ b/scripts/tgt-admin
@@ -29,6 +29,7 @@ This tool configures tgt targets.
   -c, --conf <conf file>     specify an alternative configuration file
   -f, --force                don't exit on tgtadm errors
   -p, --pretend              only print tgtadm options
+      --dump                 dump current tgtd configuration
   -v, --verbose              increase verbosity (no effect in "pretend" mode)
   -h, --help                 show this help
 
@@ -44,6 +45,7 @@ my $show = 0;
 my $alternate_conf="0";
 my $force = 0;
 my $pretend = 0;
+my $dump = 0;
 my $verbose = 0;
 my $help = 0;
 my $result = GetOptions (
@@ -53,6 +55,7 @@ my $result = GetOptions (
 	"c|conf=s"    => \$alternate_conf,
 	"f|force"   => \$force,
 	"p|pretend" => \$pretend,
+	"dump"      => \$dump,
 	"v|verbose" => \$verbose,
 	"h|help"    => \$help,
 );
@@ -283,6 +286,70 @@ sub remove_targets {
 	}
 }
 
+# Dump current tgtd configuration
+sub dump_config {
+
+	&process_configs;
+	
+	my @all_targets = keys %tgtadm_output_tid;
+	
+	foreach my $target (@all_targets) {
+		foreach my $show_target_line ($tgtadm_output{$target}) {
+		    if ( $show_target_line =~ m/^Target (\d*): (.+)/ ) {
+			print "<target $2>\n";
+		    }
+
+		    if ( $show_target_line =~ m/\s+Driver: (.+)/ ) {
+			print "\tdriver $1\n";
+		    }
+
+		    if ( $show_target_line =~ m/\s+Backing store: (?!No backing store)(.+)/ ) {
+			print "\tbacking-store $1\n";
+		    }
+		}
+		
+		# Process account and ACL information
+		my $account_acl;
+
+		foreach my $show_target_line ($tgtadm_output{$target}) {
+		    $account_acl .= $show_target_line
+		}
+
+		# start with account information...
+		while ($account_acl =~ m{
+			\s+Account\ information:\n(.*)ACL\ information:
+			     }xmgs
+		      ) {
+
+			my @account = split(/\n/, $1);
+
+			foreach my $user (@account) {
+				my @var = split(/^\s+/, $user);
+				@var = split(/\s/, $var[1]);
+
+				if ( $var[1] eq "(outgoing)" ) {
+					print "\toutgoinguser $var[0] PLEASE_CORRECT_THE_PASSWORD\n";
+				} elsif ( ($var[0] ne "") && ($var[1] eq "") ) {
+					print "\tincominguser $var[0] PLEASE_CORRECT_THE_PASSWORD\n";
+				}
+			}
+		}
+
+		#...and finish with ACL information
+		while ($account_acl =~ m{
+			\s+ACL\ information:\n(.*)
+			     }xmgs
+		      ) {
+		    my @ini_addresses = split(/\n/, $1);
+		    foreach my $ini_address (@ini_addresses) {
+			my @var = split(/^\s+/, $ini_address);
+			print "\tinitiator-address $var[1]\n";
+			}
+		}
+		print "</target>\n\n";
+	}
+}
+
 # Execute or just print (or both) everything we start or would start
 sub execute {
 	if ($pretend == 0) {
@@ -319,6 +386,8 @@ if (($execute == 1) || ($pretend == 1)) {
 	&delete;
 	%conf = ParseConfig(-ConfigFile => "$configfile", -UseApacheInclude => 1, -IncludeGlob => 1,);
 	&remove_targets;
+} elsif ($dump == 1) {
+	&dump_config;
 } else {
 	print "No action specified.\n";
 }




-- 
Tomasz Chmielewski 
http://wpkg.org




More information about the stgt mailing list