From 85c9fb169df1f167457d17f697bc9f0a717e1776 Mon Sep 17 00:00:00 2001 From: Jamie Cameron Date: Thu, 25 Sep 2014 19:11:45 -0700 Subject: [PATCH] Start/stop functions --- iscsi-tgtd/atboot.cgi | 25 ++++++++++ iscsi-tgtd/config | 1 - iscsi-tgtd/config.info | 1 - iscsi-tgtd/images/icon.gif | Bin 0 -> 2305 bytes iscsi-tgtd/index.cgi | 94 +++++++++++++++++++++++++++++++++++ iscsi-tgtd/install_check.pl | 15 ++++++ iscsi-tgtd/iscsi-tgtd-lib.pl | 39 +++++++++++++++ iscsi-tgtd/lang/en | 26 ++++++++-- iscsi-tgtd/module.info | 4 +- iscsi-tgtd/restart.cgi | 12 +++++ iscsi-tgtd/start.cgi | 12 +++++ iscsi-tgtd/stop.cgi | 12 +++++ 12 files changed, 234 insertions(+), 7 deletions(-) create mode 100755 iscsi-tgtd/atboot.cgi create mode 100755 iscsi-tgtd/images/icon.gif create mode 100644 iscsi-tgtd/index.cgi create mode 100755 iscsi-tgtd/install_check.pl create mode 100755 iscsi-tgtd/restart.cgi create mode 100755 iscsi-tgtd/start.cgi create mode 100755 iscsi-tgtd/stop.cgi diff --git a/iscsi-tgtd/atboot.cgi b/iscsi-tgtd/atboot.cgi new file mode 100755 index 000000000..412ef978c --- /dev/null +++ b/iscsi-tgtd/atboot.cgi @@ -0,0 +1,25 @@ +#!/usr/local/bin/perl +# Change if the iscsi server is started at boot or not + +use strict; +use warnings; +require './iscsi-tgtd-lib.pl'; +&foreign_require("init"); +our (%text, %config, %in); +&ReadParse(); +&error_setup($text{'atboot_err'}); + +my $old = &init::action_status($config{'init_name'}); +if ($old != 2 && $in{'boot'}) { + # Enable at boot + $old == 1 || &error(&text('atboot_einit', + "$config{'init_name'}")); + &init::enable_at_boot($config{'init_name'}); + &webmin_log("atboot"); + } +elsif ($old == 2 && !$in{'boot'}) { + # Disable at boot + &init::disable_at_boot($config{'init_name'}); + &webmin_log("delboot"); + } +&redirect(""); diff --git a/iscsi-tgtd/config b/iscsi-tgtd/config index 2e3337962..ad12ac110 100644 --- a/iscsi-tgtd/config +++ b/iscsi-tgtd/config @@ -1,4 +1,3 @@ config_file=/etc/tgt/tgtd.conf tgtadm=tgtadm -pid_file=/var/run/tgtd.pid init_name=tgtd diff --git a/iscsi-tgtd/config.info b/iscsi-tgtd/config.info index 018118023..9ea58443c 100644 --- a/iscsi-tgtd/config.info +++ b/iscsi-tgtd/config.info @@ -1,4 +1,3 @@ config_file=iSCSI TGTD configuration file,0 tgtadm=Full path to tgtadm command,0 -pid_file=Full path to PID file(s),0 init_name=Bootup script name,0 diff --git a/iscsi-tgtd/images/icon.gif b/iscsi-tgtd/images/icon.gif new file mode 100755 index 0000000000000000000000000000000000000000..f994193ca741f175ab5c79abab4eef3af63f6c49 GIT binary patch literal 2305 zcmV+c3I6s+Nk%w1VK4wN0O$Vz0096300jyI0RadL2oV?z5fcg)AQBlL3mqm79xNFh z9}Ocm6eBSiBQ6yrGZQB|8!9;%EI$-4M;|RbC@(cGFD)N3MiVts8Z=BIHAyQrK_EF& zBRWVbIY}ElSt&eGF+4{zK1m@%TN_1UEJ9E&K~^b3TQWgWCPiZ*N@q7lRyIjqElX)D zOl3YvRVh(!D^qYYRBby`Z7)`ILsDWtRb)a{YD!gMIazWvT6jQPZ#P|gMO$k|U3frX zc{^c%MPPM5WP?Rzepq8~LTH9aXo5>?ge9jZjPyHldN%(tZkCAWR$>bmAibC zqlJ;4b(FASn8|vTtaF#RX_>`^l&5%?vv!)idYZO)oxXjYxPqOuYoXJIovwk+IH&wBd}j&xE(#n6t`}wbz`q#fZ1$nzqf0y61_!;+eVDk-OraxzVAy%8tG3 zskzLJz~_~}=cB&Wki+VyztNb&>a4)bo5bv=!`hU`?X1JqoyPB>#^{>J>6XdxuEy7- z$?KiV?5WA-y2jJ8$=jyO?zqU@xXjq8&hfU*-?Pu=uh8wm&D*Nd?z_+2tkv+d)9}R5 z-onx4zti8f)$_a8?!VXRxY+i?*WHiF61`r+;S=kNIH@AB#L`|tGj?DhTf z_xknw{r~^}A^s6Va%Ew3Wn>_CX>@2HM@dak03rDV0SW;B04x9i001xmFaQ7u{s8|8 z97wRB!Gj1BDqJXV&?8KkIDJyJiJ`@XapJ&%g9lEXjd<`NdNgR$sEQXYen|rcO&vgp zV#;*nXwsxhF&{lbnew2MmM>*0ib?b4rK6sbdYYtDQqO`;T*4&kh?3DuO0$yMn#z-- zL8G4jb0TsQB}zw;X7vOL)K*fd;=Xzn>lLX%pL#k$ly+^>t)@=FjhkvNU0Sjd=aNMz zuSG4C{+cqisSzbL?v*uf{6^9l*+LvwH!d5+E zIOtVkS+G6px}{53=+Vf13A+tU7%^hTpc^yh>9j&w#)~KCgM5$e+&{xO*Rl_6Adp4 zd1E0s-9YHzf&~_sjWr-f7$G(hW|$#11}Rw^o>06yyFgwE|Q}pju(Q%q=n+(IO8;eEYwUr_S7SfJn$Haq&Z-QDW;g@jHx6! zwcM}}B;VkJ&pr3lqa~L{x^pCpEUtqmi|Vk`=bqD4!NEdhxN?p@{OIE*oLFkvdL8~k6(9=(@{ph-@KE0Aksy_D&d zoRLKnKZvk^1uHP*1|v|wV1ypS3?qskeE6})9)0v-Nd6*xOCrf8CUufX*jWfs0s|J< zfB{2hoB@d$Is8CICUf8IhaZJ3vPdG4L}H01nwT_7B6@J4Lk0!ikVFg~M8FUQVyxi?B)!;C#11|X@dOu~ z(oy&2dbn{07f%#{LkutU5C#=Epx{9Q3{}v>8tT?E&NF|AF+~(nOyU0%NeG}4p5VVJ zWFZS;u)`mw@Piqk00RSHh!-Ycg*NDc6*Jq$Gi;HGMrf`OnbTY&I`=tN)Pfayh=LLt zhynvBfFZU3K?}H`2UlkV<#5z zhAEJs003}75;l;5MXmu7u7KPQjKBmgxWNy6Tf_)`rwKofVib+of(i}*00JBV3Ms&V z3M>+aHLQUV&~U{Rgir(}Fo6kA$O8A+;089Ffec(=f)74`fB_7E26>}K!h2L00Sk?NJ1$p!Gs;W00kvT2^LOucgv&h65+Q^_;C|` zcmo%d00gBHWDat0L*Dv;IT4Z&bf0L&Ciaj8D0uZCQjo$H#JaoA0j`##hy)$XP=&WH b{'name'} eq 'target' } @$conf; +my @crlinks = ( &ui_link("edit_target.cgi?new=1",$text{'index_add'}) ); +if (@targets) { + unshift(@crlinks, &select_all_link("d"), &select_invert_link("d")); + print &ui_form_start("delete_targets.cgi"); + print &ui_links_row(\@crlinks); + my @tds = ( "width=5" ); + print &ui_columns_start([ + "", $text{'index_target'}, $text{'index_lun'}, + $text{'index_size'}, $text{'index_users'}, + ], 100, 0, \@tds); + foreach my $t (@targets) { + my @luns; + my $size = 0; + foreach my $l (&find($t->{'members'}, "Lun")) { + if ($l->{'value'} =~ /Path=([^, ]+)/) { + push(@luns, &mount::device_name("$1")); + $size += &get_device_size("$1"); + } + elsif ($l->{'value'} =~ /Sectors=(\d+)/) { + push(@luns, &text('index_nullio', "$1")); + } + } + my @users = map { $_->{'values'}->[0] } + &find($t->{'members'}, "IncomingUser"); + if (@users > 5) { + @users = (@users[0 .. 4], "..."); + } + print &ui_checked_columns_row([ + "".$t->{'value'}."", + join(" , ", @luns) || "$text{'index_noluns'}", + $size ? &nice_size($size) : "", + join(" , ", @users) || "$text{'index_nousers'}" + ], + \@tds, "d", $t->{'value'}); + } + print &ui_columns_end(); + print &ui_links_row(\@crlinks); + print &ui_form_end([ [ undef, $text{'index_delete'} ] ]); + } +else { + print "$text{'index_none'}

\n"; + print &ui_links_row(\@crlinks); + } + +print &ui_hr(); +print &ui_buttons_start(); + +# Show start/stop/restart buttons +my $pid = &is_tgtd_running(); +if ($pid) { + print &ui_buttons_row("restart.cgi", $text{'index_restart'}, + $text{'index_restartdesc'}); + print &ui_buttons_row("stop.cgi", $text{'index_stop'}, + $text{'index_stopdesc'}); + } +else { + print &ui_buttons_row("start.cgi", $text{'index_start'}, + $text{'index_startdesc'}); + } + +# Show start at boot button +&foreign_require("init"); +my $starting = &init::action_status($config{'init_name'}); +print &ui_buttons_row("atboot.cgi", + $text{'index_atboot'}, + $text{'index_atbootdesc'}, + undef, + &ui_radio("boot", $starting == 2 ? 1 : 0, + [ [ 1, $text{'yes'} ], [ 0, $text{'no'} ] ])); + +print &ui_buttons_end(); + +&ui_print_footer("/", $text{'index'}); diff --git a/iscsi-tgtd/install_check.pl b/iscsi-tgtd/install_check.pl new file mode 100755 index 000000000..a8ea780c6 --- /dev/null +++ b/iscsi-tgtd/install_check.pl @@ -0,0 +1,15 @@ +# install_check.pl + +do 'iscsi-tgtd-lib.pl'; + +# is_installed(mode) +# For mode 1, returns 2 if the server is installed and configured for use by +# Webmin, 1 if installed but not configured, or 0 otherwise. +# For mode 0, returns 1 if installed, 0 if not +sub is_installed +{ +my ($mode) = @_; +my $err = &check_config(); +return $err ? 0 : $mode + 1; +} + diff --git a/iscsi-tgtd/iscsi-tgtd-lib.pl b/iscsi-tgtd/iscsi-tgtd-lib.pl index 1c9c12206..54570592d 100644 --- a/iscsi-tgtd/iscsi-tgtd-lib.pl +++ b/iscsi-tgtd/iscsi-tgtd-lib.pl @@ -102,4 +102,43 @@ foreach my $l (@$lref) { return \@rv; } +# is_tgtd_running() +# Returns the PID if the server process is running, or 0 if not +sub is_tgtd_running +{ +my $pid = &find_byname("tgtd"); +return $pid; +} + +# start_iscsi_tgtd() +# Run the init script to start the server +sub start_iscsi_tgtd +{ +&foreign_require("init"); +my ($ok, $out) = &init::start_action($config{'init_name'}); +return $ok ? undef : $out; +} + +# stop_iscsi_tgtd() +# Run the init script to stop the server +sub stop_iscsi_tgtd +{ +&foreign_require("init"); +my ($ok, $out) = &init::stop_action($config{'init_name'}); +return $ok ? undef : $out; +} + +# restart_iscsi_tgtd() +# Sends a HUP signal to re-read the configuration +sub restart_iscsi_tgtd +{ +&stop_iscsi_tgtd(); +# Wait for process to exit +for(my $i=0; $i<20; $i++) { + last if (!&is_tgtd_running()); + sleep(1); + } +return &start_iscsi_tgtd(); +} + 1; diff --git a/iscsi-tgtd/lang/en b/iscsi-tgtd/lang/en index 8e3b06763..d904e2401 100644 --- a/iscsi-tgtd/lang/en +++ b/iscsi-tgtd/lang/en @@ -1,5 +1,25 @@ -check_econfig=The iSCSI TGTD configuration file $1 was not found on your system. -check_etgtadm=The iSCSI TGTD administration command $1 was not found on your system. +check_econfig=The iSCSI TGTd configuration file $1 was not found on your system. +check_etgtadm=The iSCSI TGTd administration command $1 was not found on your system. check_einit=Bootup action $1 does not exist -index_title=iSCSI TGTD +index_title=iSCSI TGTd +index_clink=Maybe it is not installed, or your module configuration is incorrect. +index_stop=Stop iSCSI TGTd +index_stopdesc=Click this button to stop the running iSCSI target. All shared devices will no longer be accessible to clients. +index_start=Start iSCSI TGTd +index_startdesc=Click this button to start the iSCSI target, so that shared devices are accessible to clients. +index_restart=Restart iSCSI TGTd +index_restartdesc=Click this button to apply the current configuration by restarting the iSCSI target. +index_atboot=Start at boot? +index_atbootdesc=Change this option to control whether the iSCSI target is started at boot time or not. If it is not currently started at boot and Yes is chosen, a new init script will be created. +index_return=list of targets +index_none=No iSCSI targets to export have been defined yet. +index_add=Add a new iSCSI target. +index_target=Target name +index_delete=Delete Selected Targets + +start_err=Failed to start iSCSI TGTd +stop_err=Failed to stop iSCSI TGTd +restart_err=Failed to restart iSCSI TGTd +atboot_err=Failed to enable at boot +atboot_einit=Init script $1 does not exist diff --git a/iscsi-tgtd/module.info b/iscsi-tgtd/module.info index 67987709a..8d2f52d98 100644 --- a/iscsi-tgtd/module.info +++ b/iscsi-tgtd/module.info @@ -1,5 +1,5 @@ -desc=iSCSI TGTD +desc=iSCSI TGTd category=hardware os_support=*-linux depends=fdisk lvm raid init -longdesc=Share disk devices across the network using the iSCSI protocol with the tgtd package. +longdesc=Share disk devices across the network using the iSCSI protocol with the TGTd package. diff --git a/iscsi-tgtd/restart.cgi b/iscsi-tgtd/restart.cgi new file mode 100755 index 000000000..fd51479a3 --- /dev/null +++ b/iscsi-tgtd/restart.cgi @@ -0,0 +1,12 @@ +#!/usr/local/bin/perl +# Stop and then re-start the iSCSI server process + +use strict; +use warnings; +require './iscsi-tgtd-lib.pl'; +our (%text); +&error_setup($text{'restart_err'}); +my $err = &restart_iscsi_tgtd(); +&error("".&html_escape($err)."") if ($err); +&webmin_log("restart"); +&redirect(""); diff --git a/iscsi-tgtd/start.cgi b/iscsi-tgtd/start.cgi new file mode 100755 index 000000000..779a42368 --- /dev/null +++ b/iscsi-tgtd/start.cgi @@ -0,0 +1,12 @@ +#!/usr/local/bin/perl +# Start the iSCSI server process + +use strict; +use warnings; +require './iscsi-tgtd-lib.pl'; +our (%text); +&error_setup($text{'start_err'}); +my $err = &start_iscsi_tgtd(); +&error("".&html_escape($err)."") if ($err); +&webmin_log("start"); +&redirect(""); diff --git a/iscsi-tgtd/stop.cgi b/iscsi-tgtd/stop.cgi new file mode 100755 index 000000000..40ffc16a2 --- /dev/null +++ b/iscsi-tgtd/stop.cgi @@ -0,0 +1,12 @@ +#!/usr/local/bin/perl +# Kill the running iscsi server process + +use strict; +use warnings; +require './iscsi-tgtd-lib.pl'; +our (%text); +&error_setup($text{'stop_err'}); +my $err = &stop_iscsi_tgtd(); +&error($err) if ($err); +&webmin_log("stop"); +&redirect("");