[Fai-commit] r6245 - trunk/lib/setup-storage

Michael Tautschnig mt at alioth.debian.org
Fri Dec 17 14:20:05 UTC 2010


Author: mt
Date: 2010-12-17 14:19:58 +0000 (Fri, 17 Dec 2010)
New Revision: 6245

Modified:
   trunk/lib/setup-storage/Commands.pm
Log:
setup-storage/Commands.pm: Fix dependencies between disk and LVM commands.

Closes: #606113
Thanks: Mathieu Alorent <malorent at echo.fr>, Nicolas Courtel <courtel at cena.fr>


Modified: trunk/lib/setup-storage/Commands.pm
===================================================================
--- trunk/lib/setup-storage/Commands.pm	2010-12-17 14:18:15 UTC (rev 6244)
+++ trunk/lib/setup-storage/Commands.pm	2010-12-17 14:19:58 UTC (rev 6245)
@@ -181,13 +181,12 @@
   # as that may be created later on
   (-b $disk) or die "Specified disk $disk does not exist in this system!\n";
   # set the raid/lvm unless this is an entire disk flag
-  my $cmd = "parted -s $disk set $part_no $t on";
-  $cmd = "true" if ($part_no == -1);
+  return 0 if ($part_no == -1);
   my $pre = "exist_$d";
   $pre .= ",cleared2_$disk" if (defined($FAI::configs{"PHY_$disk"}));
-  &FAI::push_command( $cmd, "$pre", "type_${t}_$d" );
+  &FAI::push_command( "parted -s $disk set $part_no $t on", $pre, "type_${t}_$d" );
   if (defined($FAI::partition_table_deps{$disk}) &&
-    $FAI::partition_table_deps{$disk} ne "") {
+    $FAI::partition_table_deps{$disk} ne "") {
     $FAI::partition_table_deps{$disk} .= ",type_${t}_$d";
   } else {
     $FAI::partition_table_deps{$disk} = "type_${t}_$d";
@@ -397,16 +396,17 @@
     my $devs = "";
     # create all the devices
     foreach my $d (keys %{ $FAI::configs{$config}{devices} }) {
-      my $dev = &FAI::enc_name($d);
+      $d = &FAI::enc_name($d);
+      my $pre = ",exist_$d";
+      my ($i_p_d, $disk, $part_no) = &FAI::phys_dev($d);
+      $pre = ",pt_complete_$disk"
+        if (&FAI::set_partition_type_on_phys_dev($d, "lvm") &&
+          defined($FAI::configs{"PHY_$disk"}));
 
-      # set proper partition types for LVM
-      my $type_pre = "";
-      $type_pre .= ",type_lvm_$dev" if (&FAI::set_partition_type_on_phys_dev($dev, "lvm"));
-
-      &FAI::push_command( "pvcreate -ff -y $pv_create_options $dev",
-        "all_pv_sigs_removed,exist_$dev$type_pre", "pv_done_$dev");
-      $devs .= " $dev";
-      $pre_dev .= ",pv_done_$dev";
+      &FAI::push_command( "pvcreate -ff -y $pv_create_options $d",
+        "all_pv_sigs_removed$pre", "pv_done_$d");
+      $devs .= " $d";
+      $pre_dev .= ",pv_done_$d";
     }
     $pre_dev =~ s/^,//;
 
@@ -431,24 +431,32 @@
   my @new_devices = ();
 
   # create an undefined entry for each device
+  my $pre_dev = "vg_exists_$vg";
   foreach my $d (keys %{ $FAI::configs{$config}{devices} }) {
     my $denc = &FAI::enc_name($d);
     push @all_devices, $denc;
-    push @new_devices, $denc unless (exists($rm_devs{$denc}));
+    if (exists($rm_devs{$denc})) {
+      my ($i_p_d, $disk, $part_no) = &FAI::phys_dev($denc);
+      $pre_dev .= ($i_p_d && defined($FAI::configs{"PHY_$disk"})) ?
+        ",pt_complete_$disk" : ",exist_$denc";
+    } else {
+      push @new_devices, $denc;
+    }
   }
 
   # remove remaining devices from the list
   delete $rm_devs{$_} foreach (@all_devices);
 
   # create all the devices
-  my $pre_dev = "vg_exists_$vg";
   foreach my $dev (@new_devices) {
-    # set proper partition types for LVM
-    my $type_pre = "";
-    $type_pre .= ",type_lvm_$dev" if (&FAI::set_partition_type_on_phys_dev($dev, "lvm"));
+    my $pre = ",exist_$dev";
+    my ($i_p_d, $disk, $part_no) = &FAI::phys_dev($dev);
+    $pre = ",pt_complete_$disk"
+      if (&FAI::set_partition_type_on_phys_dev($dev, "lvm") &&
+        defined($FAI::configs{"PHY_$disk"}));
 
     &FAI::push_command( "pvcreate -ff -y $pv_create_options $dev",
-      "all_pv_sigs_removed,exist_$dev$type_pre", "pv_done_$dev");
+      "all_pv_sigs_removed$pre", "pv_done_$dev");
     $pre_dev .= ",pv_done_$dev";
   }
   $pre_dev =~ s/^,//;
@@ -898,11 +906,15 @@
     my $part = (\%FAI::configs)->{$config}->{partitions}->{$part_id};
     # get the existing id
     my $mapped_id = $part->{maps_to_existing};
-    # get the intermediate partition id
-    my $p = $FAI::current_config{$disk}{partitions}{$mapped_id}{new_id};
-    # anything to be done?
-    $pre_all_resize .= ",exist_" . &FAI::make_device_name($disk, $p) unless
-      $part->{size}->{resize};
+    # get the intermediate partition id; only available if
+    # rebuild_preserved_partitions was done
+    my $p = undef;
+    if ($needs_resize) {
+      $p = $FAI::current_config{$disk}{partitions}{$mapped_id}{new_id};
+      # anything to be done?
+      $pre_all_resize .= ",exist_" . &FAI::make_device_name($disk, $p) unless
+        $part->{size}->{resize};
+    }
     if ($part->{size}->{resize}) {
       warn &FAI::make_device_name($disk, $mapped_id) . " will be resized\n";
     } else {
@@ -1045,14 +1057,15 @@
       if ($part->{size}->{preserve} || $part->{size}->{resize});
     $fs = "" if ($fs eq "-");
 
-    my $pre = "";
-    $pre = ",exist_" . &FAI::make_device_name($disk, $prev_id) if ($prev_id > -1);
+    my $pre = "cleared2_$disk";
+    $pre .= ",exist_" . &FAI::make_device_name($disk, $prev_id) if ($prev_id > -1);
     # build a parted command to create the partition
     &FAI::push_command( "parted -s $disk mkpart $part_type \"$fs\" ${start}B ${end}B",
-      "cleared2_$disk$pre", "exist_" . &FAI::make_device_name($disk, $part_id) );
+      $pre, "exist_" . &FAI::make_device_name($disk, $part_id) );
     $prev_id = $part_id;
   }
 
+  ($prev_id > -1) or &FAI::internal_error("No partitions created");
   $FAI::partition_table_deps{$disk} = "cleared2_$disk,exist_"
     . &FAI::make_device_name($disk, $prev_id);
 




More information about the Fai-commit mailing list