3 # vim:expandtab:shiftwidth=4:softtabstop=4:tabstop=4:
6 # convert an lmc batch file to a csv file for lustre_config
8 use strict; use warnings;
15 for (my $i = 0; $i <= $#$aref; $i++) {
16 if ($$aref[$i] eq "--" . $arg) {
17 my @foo = splice(@$aref, $i, 2);
26 for (my $i = 0; $i <= $#$aref; $i++) {
27 if ($$aref[$i] eq "--" . $arg) {
28 splice(@$aref, $i, 1);
38 $net->{"node"} = get_arg_val("node", \@_);
39 $net->{"nid"} = get_arg_val("nid", \@_);
40 $net->{"nettype"} = get_arg_val("nettype", \@_);
41 $net->{"port"} = get_arg_val("port", \@_);
43 print STDERR "Unknown arguments to \"--add net\": @_\n";
51 $mds->{"node"} = get_arg_val("node", \@_);
52 $mds->{"mds"} = get_arg_val("mds", \@_);
53 $mds->{"fstype"} = get_arg_val("fstype", \@_);
54 $mds->{"dev"} = get_arg_val("dev", \@_);
55 $mds->{"size"} = get_arg_val("size", \@_);
57 print STDERR "Unknown arguments to \"--add mds\": @_\n";
65 $lov->{"lov"} = get_arg_val("lov", \@_);
66 $lov->{"mds"} = get_arg_val("mds", \@_);
67 $lov->{"stripe_sz"} = get_arg_val("stripe_sz", \@_);
68 $lov->{"stripe_cnt"} = get_arg_val("stripe_cnt", \@_);
69 $lov->{"stripe_pattern"} = get_arg_val("stripe_pattern", \@_);
71 print STDERR "Unknown arguments to \"--add lov\": @_\n";
79 $ost->{"node"} = get_arg_val("node", \@_);
80 $ost->{"ost"} = get_arg_val("ost", \@_);
81 $ost->{"fstype"} = get_arg_val("fstype", \@_);
82 $ost->{"dev"} = get_arg_val("dev", \@_);
83 $ost->{"size"} = get_arg_val("size", \@_);
84 $ost->{"lov"} = get_arg_val("lov", \@_);
85 $ost->{"mountfsoptions"} = get_arg_val("mountfsoptions", \@_);
86 $ost->{"failover"} = get_arg("failover", \@_);
88 print STDERR "Unknown arguments to \"--add ost\": @_\n";
96 $mtpt->{"node"} = get_arg_val("node", \@_);
97 $mtpt->{"path"} = get_arg_val("path", \@_);
98 $mtpt->{"mds"} = get_arg_val("mds", \@_);
99 $mtpt->{"lov"} = get_arg_val("lov", \@_);
101 print STDERR "Unknown arguments to \"--add mtpt\": @_\n";
115 foreach my $obj (@objs) {
116 if ($obj->{$key} eq $value) {
125 my $options_str = "options lnet networks=" . $net->{"nettype"} .
127 if (defined($net->{"port"})) {
128 $options_str .= " accept_port=" . $net->{"port"};
139 my $MOUNTPT = "/mnt";
140 if (defined($ENV{"MOUNTPT"})) {
141 $MOUNTPT = $ENV{"MOUNTPT"};
147 for (my $i = 0; $i <= $#args; $i++) {
148 if ($args[$i] eq "--add") {
149 my $type = "$args[$i + 1]";
150 my $subref = "add_$type";
151 splice(@args, $i, 2);
152 push(@{$objs{$type}}, &$subref(@args));
156 print STDERR "I don't know how to handle @args\n";
163 foreach my $lov (@{$objs{"lov"}}) {
164 my $mds = find_obj("mds", "mds", $lov->{"mds"}, @{$objs{"mds"}});
165 $mds->{"lov"} = $lov;
167 # XXX could find failover pairs of osts and mdts here and link them to
168 # one another and then fill in their details in the csv generators below
170 foreach my $mds (@{$objs{"mds"}}) {
171 # find the net for this node
172 my $net = find_obj("net", "node", $mds->{"node"}, @{$objs{"net"}});
173 my $lov = $mds->{"lov"};
175 if (defined($lov->{"stripe_sz"})) {
176 $mkfs_options .= "lov.stripesize=" . $lov->{"stripe_sz"} . " ";
178 if (defined($lov->{"stripe_cnt"})) {
179 $mkfs_options .= "lov.stripecount=" . $lov->{"stripe_cnt"} . " ";
181 if (defined($lov->{"stripe_pattern"})) {
182 $mkfs_options .= "lov.stripetype=" . $lov->{"stripe_pattern"} . " ";
185 if ($mkfs_options ne "") {
186 $mkfs_options = " --param=\"$mkfs_options\"";
191 printf "%s,%s,%s,$MOUNTPT/%s,mgs|mdt,,,,--device-size=%s --noformat%s,,noauto\n",
199 push(@mgses, $net->{"nid"});
202 printf "%s,%s,%s,$MOUNTPT/%s,mdt,,\"%s\",,--device-size=%s --noformat,,noauto\n",
213 foreach my $ost (@{$objs{"ost"}}) {
214 # find the net for this node
215 my $mount_opts="noauto";
216 if (defined($ost->{"mountfsoptions"})) {
217 $mount_opts .= "," . $ost->{"mountfsoptions"};
219 my $net = find_obj("net", "node", $ost->{"node"}, @{$objs{"net"}});
220 printf "%s,%s,%s,$MOUNTPT/%s,ost,,\"%s\",,--device-size=%s --noformat,,\"%s\"\n",