Handle hostnames with upper-case letters
[webmin.git] / raid / raid_form.cgi
1 #!/usr/local/bin/perl
2 # raid_form.cgi
3 # Display a form for creating a raid device
4
5 require './raid-lib.pl';
6 &foreign_require("mount");
7 &foreign_require("lvm");
8 &ReadParse();
9 $conf = &get_raidtab();
10
11 # Create initial object
12 foreach $c (@$conf) {
13         if ($c->{'value'} =~ /md(\d+)$/) {
14                 $taken{$1} = 1;
15                 }
16         }
17 $max = 0;
18 while($taken{$max}) {
19         $max++;
20         }
21 $raid = { 'value' => "/dev/md$max",
22           'members' => [ { 'name' => 'raid-level',
23                            'value' => $in{'level'} },
24                          { 'name' => 'persistent-superblock',
25                            'value' => 1 }
26                        ] };
27
28 &ui_print_header(undef, $text{'create_title'}, "");
29
30 # Find available partitions
31 @disks = &find_free_partitions(undef, 1, 1);
32 if (!@disks) {
33         print "<p><b>$text{'create_nodisks'}</b> <p>\n";
34         &ui_print_footer("", $text{'index_return'});
35         exit;
36         }
37
38 print &ui_form_start("create_raid.cgi");
39 print &ui_hidden("idx", $in{'idx'});
40 print &ui_table_start($text{'create_header'}, undef, 2);
41
42 # Device name
43 print &ui_table_row($text{'create_device'}, "<tt>$raid->{'value'}</tt>");
44 print &ui_hidden("device", $raid->{'value'});
45
46 # RAID level
47 $lvl = &find_value('raid-level', $raid->{'members'});
48 print &ui_table_row($text{'create_level'},
49         $lvl eq 'linear' ? $text{'linear'} : $text{"raid$lvl"});
50 print &ui_hidden("level", $lvl);
51
52 # Create superblock?
53 $super = &find_value('persistent-superblock', $raid->{'members'});
54 print &ui_table_row($text{'create_super'},
55         &ui_yesno_radio("super", $super ? 1 : 0));
56
57 # Layout
58 if ($lvl == 5 || $lvl == 6) {
59         $layout = &find_value('parity-algorithm', $raid->{'members'});
60         print &ui_table_row($text{'create_parity'},
61                 &ui_select("layout", $layout,
62                         [ [ '', $text{'default'} ],
63                           'left-asymmetric', 'right-asymmetric',
64                           'left-symmetric', 'right-symmetric',
65                           'parity-first', 'parity-last' ]));
66         }
67
68 if ($lvl == 10) {
69         $layout = &find_value('parity-algorithm', $raid->{'members'});
70         print &ui_table_row($text{'create_parity'},
71                 &ui_select("layout", $layout,
72                         [ [ '', $text{'default'} ],
73                           'n2', 'o2', 'f2' ]));
74         }
75
76 # Chunk size
77 $chunk = &find_value('chunk-size', $raid->{'members'});
78 for($i=4; $i<=4096; $i*=2) { push(@chunks, [ $i, $i." kB" ]); }
79 print &ui_table_row($text{'create_chunk'},
80         &ui_select("chunk", $chunk, \@chunks));
81
82 # Display partitions in raid, spares and parity
83 print &ui_table_row($text{'create_disks'},
84         &ui_select("disks", undef, \@disks, 4, 1));
85
86 if ($lvl == 1 || $lvl == 4 || $lvl == 5 || $lvl == 6 || $lvl == 10) {
87         print &ui_table_row($text{'create_spares'},
88                 &ui_select("spares", undef, \@disks, 4, 1));
89         }
90
91 if ($lvl == 4 && $raid_mode ne 'mdadm') {
92         print &ui_table_row($text{'create_pdisk'},
93                 &ui_select("pdisk", '', [ [ '', $text{'create_auto'} ],
94                                           @disks ], 4, 1));
95         }
96
97 # Missing disk option
98 if ($lvl == 1 && $raid_mode eq 'mdadm') {
99         print &ui_table_row($text{'create_missing'},
100                 &ui_yesno_radio("missing", 0));
101         }
102
103 # Spare-group name option
104 if ($raid_mode eq 'mdadm') {
105         @opts = ( [ 0, $text{'create_nogroup'} ] );
106         @groups = ( );
107         foreach $c (@$conf) {
108                 $sg = &find_value("spare-group", $c->{'members'});
109                 push(@groups, $sg) if ($sg);
110                 }
111         if (@groups) {
112                 push(@opts, [ 1, $text{'create_oldgroup'},
113                               &ui_select("group", undef, \@groups) ]);
114                 }
115         push(@opts, [ 2, $text{'create_newgroup'},
116                       &ui_textbox("newgroup", undef, 30) ]);
117         print &ui_table_row($text{'create_group'},
118                 &ui_radio_table("group_mode", 0, \@opts, 1));
119         }
120
121 # Force creation
122 print &ui_table_row($text{'create_force'},
123         &ui_yesno_radio("force", 0));
124
125 # Assume clean
126 if ($raid_mode eq 'mdadm') {
127         print &ui_table_row($text{'create_assume'},
128                 &ui_yesno_radio("assume", 0));
129         }
130
131 print &ui_table_end();
132 print &ui_form_end([ [ undef, $text{'create'} ] ]);
133
134 &ui_print_footer("", $text{'index_return'});
135