Add a possibility to change the state (offline or ready) of targets.

It is possible to offline/ready all targets, target specified with its name 
(i.e. iqn.2008-08.com.example:some.target) or tid.

This is an example usage help for the --offline option (--ready works in the 
same way):

# ./tgt-admin --offline help
"./tgt-admin --offline <value>" - offline all or selected targets.

Example usage:
        --offline help  - display this help
        --offline ALL   - offline all targets
        --offline tid=4 - offline target 4 (target with tid 4)
        --offline iqn.2008-08.com.example:some.target - offline this target


Signed-off-by: Tomasz Chmielewski <[EMAIL PROTECTED]>

diff --git a/scripts/tgt-admin b/scripts/tgt-admin
index 162cac2..eceea83 100755
--- a/scripts/tgt-admin
+++ b/scripts/tgt-admin
@@ -25,6 +25,10 @@ This tool configures tgt targets.
 
   -e, --execute              read $configfile and execute tgtadm commands
   -d, --delete               delete all the targets
+      --offline <value>      put all or selected targets in offline state
+                             (see "--offline help" for more info)
+      --ready <value>        put all or selected targets in ready state
+                             (see "--ready help" for more info)
   -s, --show                 show all the targets
   -c, --conf <conf file>     specify an alternative configuration file
   -f, --force                don't exit on tgtadm errors
@@ -41,6 +45,8 @@ my %conf;
 my $param = $ARGV[0];
 my $execute = 0;
 my $delete = 0;
+my $offline = 0;
+my $ready = 0;
 my $show = 0;
 my $alternate_conf="0";
 my $force = 0;
@@ -51,6 +57,8 @@ my $help = 0;
 my $result = GetOptions (
        "e|execute" => \$execute,
        "d|delete"  => \$delete,
+       "offline=s" => \$offline,
+       "ready=s"   => \$ready,
        "s|show"    => \$show,
        "c|conf=s"  => \$alternate_conf,
        "f|force"   => \$force,
@@ -403,6 +411,50 @@ sub dump_config {
        }
 }
 
+# Offline or ready targets
+sub ready_offline_targets {
+       my $var = $_[0]; # This variable is either "offline" or "ready"
+       my $off_ready;
+       if ($ready eq 0) {
+               $off_ready = $offline
+       } elsif ($offline eq 0) {
+               $off_ready = $ready
+       } else {
+               print "Invalid value (you can't use both ready and offline)!\n";
+               exit 1
+       }
+       if ($off_ready eq "help") {
+               print <<EOF;
+"$ENV{_} --$var <value>" - $var all or selected targets.
+
+Example usage:
+       --$var help  - display this help
+       --$var ALL   - $var all targets
+       --$var tid=4 - $var target 4 (target with tid 4)
+       --$var iqn.2008-08.com.example:some.target - $var this target
+
+EOF
+       } elsif ($off_ready eq "ALL") {
+               &process_targets;
+               # Run over all targets and offline/ready them
+               my @all_targets = keys %tgtadm_output_tid;
+               foreach my $existing_target (@all_targets) {
+                       execute("tgtadm --op update --mode target 
--tid=$tgtadm_output_tid{$existing_target} -n state -v $var");
+               }
+       } elsif ($off_ready =~ m/tid=(.+)/) {
+               &process_targets;
+               execute("tgtadm --op update --mode target --tid=$1 -n state -v 
$var");
+       } else {
+               &process_targets;
+               if (length $tgtadm_output_tid{$off_ready}) {
+                       execute("tgtadm --op update --mode target 
--tid=$tgtadm_output_tid{$off_ready} --name=\"$off_ready\" -n state -v $var");
+               } else {
+                       print "There is no target with name \"$off_ready\", 
can't $var it!\n";
+                       exit 1;
+               }
+       }
+}
+
 # Some checks
 sub check {
        if ( not defined $_[0] or not length $_[0] ) {
@@ -439,7 +491,7 @@ sub execute {
        }
 }
 
-if (($execute == 1) || ($pretend == 1)) {
+if ($execute == 1) {
        &process_targets;
        &parse_configs;
        &add_targets;
@@ -450,6 +502,10 @@ if (($execute == 1) || ($pretend == 1)) {
        &remove_targets;
 } elsif ($dump == 1) {
        &dump_config;
+} elsif ($offline ne 0) {
+       &ready_offline_targets("offline");
+} elsif ($ready ne 0) {
+       &ready_offline_targets("ready");
 } else {
        print "No action specified.\n";
 }




-- 
Tomasz Chmielewski 
http://wpkg.org
_______________________________________________
Stgt-devel mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/stgt-devel

Reply via email to