[Stgt-devel] [PATCH] make config file not needed for most operations it tgt-admin

Tomasz Chmielewski mangoo
Mon Jul 28 12:14:33 CEST 2008


Make config file not needed for some current (and future) operations.

Parsing the config file is now a subroutine.

It also fixes "delete" operation when an alternative config file was given by using a new subroutine.



Signed-off-by: Tomasz Chmielewski <mangoo at wpkg.org>

diff --git a/scripts/tgt-admin b/scripts/tgt-admin
index 598bfb1..7461a2f 100755
--- a/scripts/tgt-admin
+++ b/scripts/tgt-admin
@@ -37,8 +37,8 @@ EOF
 	exit;
 }
 
+my %conf;
 my $param = $ARGV[0];
-
 my $execute = 0;
 my $delete = 0;
 my $show = 0;
@@ -52,7 +52,7 @@ my $result = GetOptions (
 	"e|execute" => \$execute,
 	"d|delete"  => \$delete,
 	"s|show"    => \$show,
-	"c|conf=s"    => \$alternate_conf,
+	"c|conf=s"  => \$alternate_conf,
 	"f|force"   => \$force,
 	"p|pretend" => \$pretend,
 	"dump"      => \$dump,
@@ -64,33 +64,68 @@ if (($help == 1) || ($param eq undef)) {
 	&usage
 }
 
-# Parse the config file with Config::General
-my %conf = ParseConfig(-ConfigFile => "$configfile", -UseApacheInclude => 1, -IncludeGlob => 1,);
-
 # Show all the targets and exit
 if ($show == 1) {
 	execute("tgtadm --lld iscsi --op show --mode target");
 	exit;
 }
 
-# Check if alternative configuration file was given
-if ($alternate_conf ne 0) {
-	# Check if alternative configuration file exist
-	if (-e $alternate_conf) {
-		execute("# Using $alternate_conf as configuration file\n");
-		%conf = ParseConfig(-ConfigFile => "$alternate_conf", -UseApacheInclude => 1, -IncludeGlob => 1,);
-	}
-	else {
-		die("file $alternate_conf not found. Exiting...\n");
-	}
-}
-
 # Some variables/arrays/hashes we will use globally
 my %tgtadm_output;
 my %tgtadm_output_tid;
 my @largest_tid;
 my $next_tid;
 
+# Look up which targets are configured
+sub process_targets {
+	# We need to run as root
+	if ( $> ) {
+		die("You must be root to run this program.\n");
+	}
+
+	my @show_target = `tgtadm --lld iscsi --op show --mode target`;
+	my $tid;
+	my $targetname;
+
+	# Here, we create hashes of target names (all target data) and target tids
+	foreach my $show_target_line (@show_target) {
+		if ( $show_target_line =~ m/^Target (\d*): (.+)/ ) {
+			$tid = $1;
+			$targetname = $2;
+			$tgtadm_output{$targetname} = $show_target_line;
+			$tgtadm_output_tid{$targetname} = $tid;
+		} else {
+			$tgtadm_output{$targetname} .= $show_target_line;
+		}
+	}
+	# What is the largest tid?
+	my @tids = values %tgtadm_output_tid;
+	@largest_tid = sort { $a <=> $b } @tids;
+	$next_tid = $largest_tid[$#largest_tid];
+}
+
+# Parse config file(s)
+sub parse_configs {
+	# Parse the config
+	if ($alternate_conf ne 0) {
+		# Check if alternative configuration file exist
+		if (-e "$alternate_conf") {
+			execute("# Using $alternate_conf as configuration file\n");
+			%conf = ParseConfig(-ConfigFile => "$alternate_conf", -UseApacheInclude => 1, -IncludeGlob => 1,);
+		}
+		else {
+			die("file $alternate_conf not found. Exiting...\n");
+		}
+	} else {
+		# Parse the config file with Config::General
+		if (-e "$configfile") {
+			%conf = ParseConfig(-ConfigFile => "$configfile", -UseApacheInclude => 1, -IncludeGlob => 1,);
+		} else {
+			die("Config file $configfile not found. Exiting...\n");
+		}
+	}
+}
+
 # Add targets, if they are not configured already
 my $target;
 my $option;
@@ -226,41 +261,11 @@ sub process_options {
 	}
 }
 
-# Look up which targets are configured
-sub process_configs {
-	# We need to run as root
-	if ( $> ) {
-		die("You must be root to run this program.\n");
-	}
-
-	my @show_target = `tgtadm --lld iscsi --op show --mode target`;
-	my $tid;
-	my $targetname;
-
-	# Here, we create hashes of target names (all target data) and target tids
-	foreach my $show_target_line (@show_target) {
-		if ( $show_target_line =~ m/^Target (\d*): (.+)/ ) {
-			$tid = $1;
-			$targetname = $2;
-			$tgtadm_output{$targetname} = $show_target_line;
-			$tgtadm_output_tid{$targetname} = $tid;
-		} else {
-			$tgtadm_output{$targetname} .= $show_target_line;
-		}
-	}
-
-	# What is the largest tid?
-	my @tids = values %tgtadm_output_tid;
-	@largest_tid = sort { $a <=> $b } @tids;
-	$next_tid = $largest_tid[$#largest_tid];
-}
-
-
 # If the target is configured, but not present in the config file,
 # offline it and try to remove it
 sub remove_targets {
 
-	&process_configs;
+	&process_targets;
 	my @all_targets = keys %tgtadm_output_tid;
 
 	foreach my $existing_target (@all_targets) {
@@ -289,7 +294,7 @@ sub remove_targets {
 # Dump current tgtd configuration
 sub dump_config {
 
-	&process_configs;
+	&process_targets;
 
 	my @all_targets = keys %tgtadm_output_tid;
 
@@ -377,14 +382,13 @@ sub execute {
 }
 
 if (($execute == 1) || ($pretend == 1)) {
-	&process_configs;
-
+	&process_targets;
+	&parse_configs;
 	&add_targets;
-
 	&remove_targets;
 } elsif ($delete == 1) {
 	&delete;
-	%conf = ParseConfig(-ConfigFile => "$configfile", -UseApacheInclude => 1, -IncludeGlob => 1,);
+	&parse_configs;
 	&remove_targets;
 } elsif ($dump == 1) {
 	&dump_config;



-- 
Tomasz Chmielewski 
http://wpkg.org



More information about the stgt mailing list