From ff11c68efa6fac9a20ae62f0d7049b6e60ed9c4f Mon Sep 17 00:00:00 2001 From: Bob Gilligan Date: Mon, 11 Jan 2010 17:05:26 -0800 Subject: Add image name completion for two system image commands. The two commands are: "set system image default-boot" and "delete system image". --- scripts/vyatta-boot-image.pl | 79 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 61 insertions(+), 18 deletions(-) (limited to 'scripts') diff --git a/scripts/vyatta-boot-image.pl b/scripts/vyatta-boot-image.pl index 304f35c..c3040b4 100755 --- a/scripts/vyatta-boot-image.pl +++ b/scripts/vyatta-boot-image.pl @@ -178,10 +178,13 @@ sub getBootList { return \@list; } -# Prints the boot list generated by getBootList(). + +# Prints the boot list generated by getBootList(). If the argument +# $brief is set, display the entries for machine instead of human +# consumption: One entry per line showing the the version string only. # sub displayBootList { - my ($didx, $entries) = @_; + my ($didx, $entries, $brief) = @_; my $running_ver = curVer(); for my $i (0 .. $#{$entries}) { my $di = $i + 1; @@ -195,7 +198,11 @@ sub displayBootList { $m .= ' (running version)'; } - printf " %2d: %s%s\n", $di, $ver, $m; + if (defined($brief)) { + print "$ver\n"; + } else { + printf " %2d: %s%s\n", $di, $ver, $m; + } } } @@ -203,9 +210,19 @@ sub displayBootList { # number passed in. # sub doSelect { - my ($resp, $def_ver, $bentries) = @_; - my $new_idx = $ {$bentries}[$resp]->{'idx'}; - my $new_ver = $ {$bentries}[$resp]->{'ver'}; + my ($resp, $def_ver, $bentries, $new_ver) = @_; + my $new_idx; + if (defined($new_ver)) { + for my $i (0 .. $#{$bentries}) { + if ($ {$bentries}[$i]->{'ver'} eq $new_ver) { + $new_idx = $ {$bentries}[$i]->{'idx'}; + last; + } + } + } else { + $new_idx = $ {$bentries}[$resp]->{'idx'}; + $new_ver = $ {$bentries}[$resp]->{'ver'}; + } if ($new_ver eq $def_ver) { print "The default boot image has not been changed.\n"; exit 0; @@ -311,15 +328,18 @@ sub del_non_image_files { system ("echo done at: `date` >> $logfile"); } - -# Takes the boot list entry number selected by the user and deletes -# the corresponding image. Deletes all of the grub config file entries -# associated with that image and deletes the files associated -# with that entry. +# Deletes all of the grub config file entries associated with that +# image and deletes the files associated with that entry. If caller +# provides the version string of the image to be deleted ($del_ver), +# that version is targetted. Otherwise, the caller must provide the +# index into the boot entries list ($resp) to identify the image to be +# deleted. # sub doDelete { - my ($resp, $orig_def_ver, $def_ter, $bentries) = @_; - my $del_ver = $ {$bentries}[$resp]->{'ver'}; + my ($resp, $orig_def_ver, $def_ter, $bentries, $del_ver) = @_; + if (!defined($del_ver)) { + $del_ver = $ {$bentries}[$resp]->{'ver'}; + } my $boot_dir; my $cver = curVer(); @@ -394,12 +414,13 @@ sub doDelete { # Main section # -my ($show, $del, $sel) = (undef, undef, undef); +my ($show, $del, $sel, $list) = (undef, undef, undef, undef); GetOptions( 'show' => \$show, - 'delete' => \$del, - 'select' => \$sel + 'delete:s' => \$del, + 'select:s' => \$sel, + 'list' => \$list ); if (-e $UNION_GRUB_CFG) { @@ -433,6 +454,25 @@ if ($#{$bentries} < 0) { exit 1; } +if (defined($list)) { + displayBootList($def_idx, $bentries, 1); + exit 0; +} + +if (defined($sel) && ($sel ne "")) { + # User has specified entry to select + doSelect(0, $def_ver, $bentries, $sel); + print "Done.\n"; + exit 0; +} + +if (defined($del) && ($del ne "")) { + # User has specified entry to delete + doDelete(0, $def_ver, $def_term, $bentries, $del); + print "Done.\n"; + exit 0; +} + my $msg = 'The system currently has the following image(s) installed:'; if (defined($del)) { # doing delete @@ -469,10 +509,13 @@ print "\n"; $resp -= 1; -if ($sel) { +if (defined($sel)) { doSelect($resp, $def_ver, $bentries); -} elsif ($del) { +} elsif (defined($del)) { doDelete($resp, $def_ver, $def_term, $bentries); +} else { + print "Unknown command.\n"; + exit 1; } exit 0; -- cgit v1.2.3