mirror of
https://github.com/webmin/webmin.git
synced 2026-06-19 10:50:21 +01:00
Front page ui-lib-ification and re-design
This commit is contained in:
@@ -6,3 +6,5 @@ Added support for LVM2, as used in the new 2.6 Linux kernel.
|
||||
When viewing a physical volume, the space used by each logical volume on it is displayed. Similarly, when viewing a logical volume, the amount of space contributed by each physical volume is displayed.
|
||||
---- Changes since 1.290 ----
|
||||
Fixed display of space used on each physical volume by a logical volume for LVM version 2.
|
||||
---- Changes since 1.390 ----
|
||||
Re-designed the module's main page to use tabs, and added an option to show volumes and groups in tables (with more information) instead of using icons.
|
||||
|
||||
1
lvm/config
Normal file
1
lvm/config
Normal file
@@ -0,0 +1 @@
|
||||
show_table=0
|
||||
1
lvm/config.info
Normal file
1
lvm/config.info
Normal file
@@ -0,0 +1 @@
|
||||
show_table=Show volumes and groups as,1,1-Table,0-Icons
|
||||
233
lvm/index.cgi
233
lvm/index.cgi
@@ -3,10 +3,11 @@
|
||||
# Display a table of all volumne groups and their physical and logical volumes.
|
||||
|
||||
require './lvm-lib.pl';
|
||||
&ReadParse();
|
||||
|
||||
if (!&has_command("vgdisplay")) {
|
||||
&lvm_header();
|
||||
print "<p>",&text('index_ecommands', "<tt>vgdisplay</tt>"),"<p>\n";
|
||||
print &text('index_ecommands', "<tt>vgdisplay</tt>"),"<p>\n";
|
||||
&ui_print_footer("/", $text{'index'});
|
||||
exit;
|
||||
}
|
||||
@@ -18,7 +19,7 @@ if ($lvm_version && $lvm_version < 2) {
|
||||
}
|
||||
if (!-d $lvm_proc) {
|
||||
&lvm_header();
|
||||
print "<p>",&text('index_emodule', "<tt>$lvm_proc</tt>",
|
||||
print &text('index_emodule', "<tt>$lvm_proc</tt>",
|
||||
"<tt>lvm-mod</tt>"),"<p>\n";
|
||||
&ui_print_footer("/", $text{'index'});
|
||||
exit;
|
||||
@@ -26,76 +27,184 @@ if ($lvm_version && $lvm_version < 2) {
|
||||
}
|
||||
if (!$lvm_version) {
|
||||
&lvm_header();
|
||||
print "<p>",&text('index_eversion', "<tt>vgdisplay --version</tt>",
|
||||
print &text('index_eversion', "<tt>vgdisplay --version</tt>",
|
||||
"<pre>$out</pre>"),"<p>\n";
|
||||
&ui_print_footer("/", $text{'index'});
|
||||
exit;
|
||||
}
|
||||
&lvm_header();
|
||||
|
||||
# Show table of volume groups
|
||||
@vgs = &list_volume_groups();
|
||||
if (@vgs) {
|
||||
print "<table border width=100%>\n";
|
||||
print "<tr $tb> <td><b>$text{'index_vgs'}</b></td> ",
|
||||
"<td><b>$text{'index_pvs'}</b></td> ",
|
||||
"<td><b>$text{'index_lvs'}</b></td> </tr>\n";
|
||||
foreach $v (sort { $a->{'number'} <=> $b->{'number'} } @vgs) {
|
||||
# Show volume group icon
|
||||
print "<tr $cb> <td valign=top width=20%>\n";
|
||||
&icons_table( [ "edit_vg.cgi?vg=".&urlize($v->{'name'}) ],
|
||||
[ &html_escape($v->{'name'}).
|
||||
"<br>".&nice_size($v->{'size'}*1024) ],
|
||||
[ "images/vg.gif" ], 1);
|
||||
print &ui_links_row([
|
||||
"<a href='edit_vg.cgi'>$text{'index_add'}</a>" ]);
|
||||
print "</td> <td valign=top width=40%>\n";
|
||||
# Start tabs for volume groups, physical volumes and logical volumes
|
||||
@tabs = ( [ 'vgs', $text{'index_vgs'}, 'index.cgi?mode=vgs' ],
|
||||
[ 'pvs', $text{'index_pvs'}, 'index.cgi?mode=pvs' ],
|
||||
[ 'lvs', $text{'index_lvs'}, 'index.cgi?mode=lvs' ] );
|
||||
print &ui_tabs_start(\@tabs, "mode", $in{'mode'} || 'vgs', 1);
|
||||
|
||||
# Show physical volume icons
|
||||
local @pvs = sort { $a->{'number'} <=> $b->{'number'} }
|
||||
&list_physical_volumes($v->{'name'});
|
||||
if (@pvs) {
|
||||
local (@icons, @titles, @links);
|
||||
@icons = map { "images/pv.gif" } @pvs;
|
||||
@titles = map { &html_escape($_->{'device'}).
|
||||
"<br>".&nice_size($_->{'size'}*1024) } @pvs;
|
||||
@links = map { "edit_pv.cgi?vg=".&urlize($v->{'name'}).
|
||||
"&pv=".&urlize($_->{'name'}) } @pvs;
|
||||
&icons_table(\@links, \@titles, \@icons, 3);
|
||||
# Show volume groups
|
||||
print &ui_tabs_start_tab("mode", "vgs");
|
||||
print $text{'index_vgsdesc'},"<p>\n";
|
||||
@vgs = sort { $a->{'number'} <=> $b->{'number'} } @vgs;
|
||||
@links = ( "<a href='edit_vg.cgi'>$text{'index_add'}</a>" );
|
||||
if ($config{'show_table'}) {
|
||||
# As table
|
||||
print &ui_links_row(\@links);
|
||||
print &ui_columns_start([ $text{'index_vgname'},
|
||||
$text{'index_vgsize'},
|
||||
$text{'index_vgtotal'},
|
||||
$text{'index_vgtotal2'} ], 100);
|
||||
foreach $v (@vgs) {
|
||||
print &ui_columns_row([
|
||||
"<a href='edit_vg.cgi?vg=".
|
||||
&urlize($v->{'name'})."'>".
|
||||
&html_escape($v->{'name'})."</a>",
|
||||
&nice_size($v->{'size'}*1024),
|
||||
&text('lv_petotals', $v->{'pe_alloc'},
|
||||
$v->{'pe_total'}),
|
||||
&text('lv_petotals',
|
||||
&nice_size($v->{'pe_alloc'}*$v->{'pe_size'}*1024),
|
||||
&nice_size($v->{'pe_total'}*$v->{'pe_size'}*1024))
|
||||
]);
|
||||
}
|
||||
else {
|
||||
print "<b>$text{'index_nopvs'}</b><p>\n";
|
||||
}
|
||||
print &ui_links_row([
|
||||
"<a href='edit_pv.cgi?vg=".&urlize($v->{'name'}).
|
||||
"'>$text{'index_addpv'}</a>" ]);
|
||||
|
||||
# Show logical volume icons
|
||||
print "</td> <td valign=top width=40%>\n";
|
||||
local @lvs = sort { $a->{'number'} <=> $b->{'number'} }
|
||||
&list_logical_volumes($v->{'name'});
|
||||
if (@lvs) {
|
||||
@icons = map { $_->{'is_snap'} ? "images/snap.gif"
|
||||
: "images/lv.gif" } @lvs;
|
||||
@titles = map { &html_escape($_->{'name'}).
|
||||
"<br>".&nice_size($_->{'size'}*1024) } @lvs;
|
||||
@links = map { "edit_lv.cgi?vg=".&urlize($v->{'name'}).
|
||||
"&lv=".&urlize($_->{'name'}) } @lvs;
|
||||
&icons_table(\@links, \@titles, \@icons, 3);
|
||||
}
|
||||
else {
|
||||
print "<b>$text{'index_nolvs'}</b><p>\n";
|
||||
}
|
||||
print &ui_links_row([
|
||||
"<a href='edit_lv.cgi?vg=".&urlize($v->{'name'}).
|
||||
"'>$text{'index_addlv'}</a>",
|
||||
@lvs ? (
|
||||
"<a href='edit_lv.cgi?vg=".&urlize($v->{'name'}).
|
||||
"&snap=1'>$text{'index_addsnap'}</a>" ) : ( )
|
||||
]);
|
||||
print "</td> </tr>\n";
|
||||
print &ui_columns_end();
|
||||
}
|
||||
print "</table><p>\n";
|
||||
else {
|
||||
# As icons
|
||||
print &ui_links_row(\@links);
|
||||
foreach $v (@vgs) {
|
||||
push(@vgicons, "edit_vg.cgi?vg=".&urlize($v->{'name'}));
|
||||
push(@vgtitles, &html_escape($v->{'name'}).
|
||||
"<br>".&nice_size($v->{'size'}*1024));
|
||||
push(@vglinks, "images/vg.gif");
|
||||
}
|
||||
&icons_table(\@vgicons, \@vgtitles, \@vglinks);
|
||||
}
|
||||
print &ui_links_row(\@links);
|
||||
print &ui_tabs_end_tab();
|
||||
|
||||
# Show physical volumes
|
||||
print &ui_tabs_start_tab("mode", "pvs");
|
||||
print $text{'index_pvsdesc'},"<p>\n";
|
||||
foreach $v (@vgs) {
|
||||
push(@allpvs, &list_physical_volumes($v->{'name'}));
|
||||
}
|
||||
@allpvs = sort { $a->{'name'} cmp $b->{'name'} } @allpvs;
|
||||
@links = ( );
|
||||
foreach $v (@vgs) {
|
||||
push(@links, "<a href='edit_pv.cgi?vg=".&urlize($v->{'name'}).
|
||||
"'>".&text('index_addpv2', $v->{'name'})."</a>");
|
||||
}
|
||||
if (!@allpvs) {
|
||||
# None yet
|
||||
print "<b>$text{'index_nopvs2'}</b><p>\n";
|
||||
}
|
||||
elsif ($config{'show_table'}) {
|
||||
# Show table of PVs
|
||||
print &ui_links_row(\@links);
|
||||
print &ui_columns_start([ $text{'index_pvname'},
|
||||
$text{'index_pvvg'},
|
||||
$text{'index_pvsize'},
|
||||
$text{'index_pvtotal'},
|
||||
$text{'index_pvtotal2'} ], 100);
|
||||
foreach $p (@allpvs) {
|
||||
($v) = grep { $_->{'name'} eq $p->{'vg'} } @vgs;
|
||||
print &ui_columns_row([
|
||||
"<a href='edit_pv.cgi?vg=".&urlize($v->{'name'}).
|
||||
"&pv=".&urlize($p->{'name'})."'>$p->{'name'}</a>",
|
||||
$v->{'name'},
|
||||
&nice_size($p->{'size'}*1024),
|
||||
&text('lv_petotals', $p->{'pe_alloc'},
|
||||
$p->{'pe_total'}),
|
||||
&text('lv_petotals',
|
||||
&nice_size($p->{'pe_alloc'}*$p->{'pe_size'}*1024),
|
||||
&nice_size($p->{'pe_total'}*$p->{'pe_size'}*1024)),
|
||||
]);
|
||||
}
|
||||
print &ui_columns_end();
|
||||
}
|
||||
else {
|
||||
# Show PV icons
|
||||
print &ui_links_row(\@links);
|
||||
foreach $p (@allpvs) {
|
||||
($v) = grep { $_->{'name'} eq $p->{'vg'} } @vgs;
|
||||
push(@pvicons, "edit_pv.cgi?vg=".&urlize($v->{'name'}).
|
||||
"&pv=".&urlize($p->{'name'}));
|
||||
push(@pvtitles, &html_escape($p->{'name'}).
|
||||
"<br>".&nice_size($p->{'size'}*1024));
|
||||
push(@pvlinks, "images/vg.gif");
|
||||
}
|
||||
&icons_table(\@pvicons, \@pvtitles, \@pvlinks);
|
||||
}
|
||||
print &ui_links_row(\@links);
|
||||
print &ui_tabs_end_tab();
|
||||
|
||||
# Show logical volumes
|
||||
print &ui_tabs_start_tab("mode", "lvs");
|
||||
print $text{'index_lvsdesc'},"<p>\n";
|
||||
foreach $v (@vgs) {
|
||||
push(@alllvs, &list_logical_volumes($v->{'name'}));
|
||||
}
|
||||
@alllvs = sort { $a->{'name'} cmp $b->{'name'} } @alllvs;
|
||||
@links = ( );
|
||||
foreach $v (@vgs) {
|
||||
push(@links, "<a href='edit_lv.cgi?vg=".&urlize($v->{'name'}).
|
||||
"'>".&text('index_addlv2', $v->{'name'})."</a>");
|
||||
push(@links, "<a href='edit_lv.cgi?vg=".&urlize($v->{'name'}).
|
||||
"&snap=1'>".&text('index_addlv2s', $v->{'name'})."</a>");
|
||||
}
|
||||
if (!@alllvs) {
|
||||
# None yet
|
||||
print "<b>$text{'index_nolvs2'}</b><p>\n";
|
||||
}
|
||||
elsif ($config{'show_table'}) {
|
||||
# Show table of LVs
|
||||
print &ui_links_row(\@links);
|
||||
print &ui_columns_start([ $text{'index_lvname'},
|
||||
$text{'index_lvvg'},
|
||||
$text{'index_lvsize'},
|
||||
$text{'index_lvuse'} ], 100);
|
||||
foreach $l (@alllvs) {
|
||||
($v) = grep { $_->{'name'} eq $l->{'vg'} } @vgs;
|
||||
if ($lv->{'is_snap'}) {
|
||||
($snapof) = grep {
|
||||
$_->{'size'} == $l->{'size'} &&
|
||||
$_->{'vg'} eq $l->{'vg'} &&
|
||||
$_->{'has_snap'} } @alllvs;
|
||||
}
|
||||
else {
|
||||
$snapof = undef;
|
||||
}
|
||||
@stat = &device_status($l->{'device'});
|
||||
print &ui_columns_row([
|
||||
"<a href='edit_lv.cgi?vg=".&urlize($v->{'name'}).
|
||||
"&lv=".&urlize($l->{'name'})."'>$l->{'name'}</a>",
|
||||
$v->{'name'},
|
||||
&nice_size($l->{'size'}*1024),
|
||||
(@stat ? &device_message(@stat) : undef).
|
||||
($snap ? " ".&text('index_snapof', $snap->{'name'})
|
||||
: ""),
|
||||
]);
|
||||
}
|
||||
print &ui_columns_end();
|
||||
}
|
||||
else {
|
||||
# Show PV icons
|
||||
print &ui_links_row(\@links);
|
||||
foreach $l (@alllvs) {
|
||||
($v) = grep { $_->{'name'} eq $l->{'vg'} } @vgs;
|
||||
push(@lvicons, "edit_lv.cgi?vg=".&urlize($v->{'name'}).
|
||||
"&lv=".&urlize($l->{'name'}));
|
||||
push(@lvtitles, &html_escape($l->{'name'}).
|
||||
"<br>".&nice_size($l->{'size'}*1024));
|
||||
push(@lvlinks, "images/lv.gif");
|
||||
}
|
||||
&icons_table(\@lvicons, \@lvtitles, \@lvlinks);
|
||||
}
|
||||
print &ui_links_row(\@links);
|
||||
print &ui_tabs_end_tab();
|
||||
|
||||
print &ui_tabs_end(1);
|
||||
}
|
||||
else {
|
||||
print "<b>$text{'index_none'}</b> <p>\n";
|
||||
@@ -112,7 +221,7 @@ else {
|
||||
|
||||
sub lvm_header
|
||||
{
|
||||
&ui_print_header(undef, $text{'index_title'}, "", undef, 0, 1, 0,
|
||||
&ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1, 0,
|
||||
&help_search_link("lvm", "man", "doc", "google"), undef, undef,
|
||||
$lvm_version ? &text('index_version', $lvm_version) : undef);
|
||||
}
|
||||
|
||||
24
lvm/lang/en
24
lvm/lang/en
@@ -8,13 +8,35 @@ index_none=No volume groups were found on your system.
|
||||
index_add=Add a new volume group.
|
||||
index_nolvs=This volume group has<br>no logical volumes yet.
|
||||
index_nopvs=This volume group has<br>no physical volumes yet.
|
||||
index_addpv=Add a physical volume to the group.
|
||||
i2ndex_addpv=Add a physical volume to the group.
|
||||
index_addpv2=Add a physical volume to <tt>$1</tt>.
|
||||
index_addlv2=Create a logical volume in <tt>$1</tt>.
|
||||
index_addlv2s=Create a snapshot in <tt>$1</tt>.
|
||||
index_addlv=Create a new logical volume.
|
||||
index_addsnap=Create a new snapshot.
|
||||
index_return=volume groups
|
||||
index_init=This may be because LVM has not been activated yet. <a href='$1'>Activate it now</a> to view all volume groups.
|
||||
index_eversion=Webmin only supports LVM versions 1.0 and above. The output from $1 on your system was : $2
|
||||
index_version=LVM version $1
|
||||
index_vgname=Volume group name
|
||||
index_vgsize=Total size
|
||||
index_vgtotal=Blocks used
|
||||
index_vgtotal2=Size used
|
||||
index_nopvs2=No physical volumes have been added to any volume groups yet.
|
||||
index_nolvs2=No logical volumes have been created from any volume groups yet.
|
||||
index_pvname=Physical volume device
|
||||
index_pvvg=In volume group
|
||||
index_pvsize=Device size
|
||||
index_pvtotal=Blocks used
|
||||
index_pvtotal2=Size used
|
||||
index_vgsdesc=A volume group is a set of disks that can be allocated to one or more logical volumes. Most systems will have only one.
|
||||
index_pvsdesc=A physical volume is a disk partition or RAID device that is part of a volume group. Its disk space can then be used by one or more logical volumes.
|
||||
index_lvsdesc=A logical volume is a virtual partition created from the combined disk space of a volume group. Each can have a filesystem which is then mounted to store files.
|
||||
index_lvname=Logical volume
|
||||
index_lvvg=Volume group
|
||||
index_lvsize=Size
|
||||
index_lvuse=Used for
|
||||
index_snapof=(Snapshot of $1)
|
||||
|
||||
lv_edit=Edit Logical Volume
|
||||
lv_edit_snap=Edit Snapshot
|
||||
|
||||
@@ -42,6 +42,7 @@ if (-d $lvm_proc) {
|
||||
else {
|
||||
# Use pvdisplay command
|
||||
local $pv;
|
||||
local $_;
|
||||
open(DISPLAY, "pvdisplay |");
|
||||
while(<DISPLAY>) {
|
||||
s/\r|\n//g;
|
||||
@@ -258,6 +259,7 @@ if (-d $lvm_proc) {
|
||||
else {
|
||||
# Use the lvdisplay command
|
||||
local $lv;
|
||||
local $_;
|
||||
open(DISPLAY, "lvdisplay |");
|
||||
while(<DISPLAY>) {
|
||||
s/\r|\n//g;
|
||||
|
||||
Reference in New Issue
Block a user