Merge pull request #709 from wllacer/master
Solves issue #689. Attribute Error.'None type' has no attribute 'form…
This commit is contained in:
commit
273b7aaa99
|
|
@ -1,9 +1,11 @@
|
|||
import os
|
||||
import json
|
||||
import logging
|
||||
import time
|
||||
from ..exceptions import DiskError
|
||||
from ..output import log
|
||||
from ..general import SysCommand
|
||||
from ..storage import storage
|
||||
|
||||
GIGA = 2 ** 30
|
||||
|
||||
|
|
@ -213,6 +215,15 @@ class BlockDevice:
|
|||
self.part_cache = {}
|
||||
|
||||
def get_partition(self, uuid):
|
||||
for partition in self:
|
||||
if partition.uuid == uuid:
|
||||
return partition
|
||||
count = 0
|
||||
while count < 5:
|
||||
for partition in self:
|
||||
if partition.uuid == uuid:
|
||||
return partition
|
||||
else:
|
||||
log(f"uuid {uuid} not found. Waiting for {count +1} time",level=logging.DEBUG)
|
||||
time.sleep(float(storage['arguments'].get('disk-sleep', 0.2)))
|
||||
count += 1
|
||||
else:
|
||||
log(f"Could not find {uuid} in disk after 5 retries",level=logging.INFO)
|
||||
raise DiskError(f"New partition {uuid} never showed up after adding new partition on {self}")
|
||||
|
|
|
|||
|
|
@ -167,17 +167,21 @@ class Filesystem:
|
|||
parted_string = f'{self.blockdevice.device} mkpart {partition_type} {start} {end}'
|
||||
|
||||
if self.parted(parted_string):
|
||||
start_wait = time.time()
|
||||
|
||||
while previous_partition_uuids == {partition.uuid for partition in self.blockdevice.partitions.values()}:
|
||||
if time.time() - start_wait > 10:
|
||||
raise DiskError(f"New partition never showed up after adding new partition on {self} (timeout 10 seconds).")
|
||||
time.sleep(0.025)
|
||||
|
||||
# Todo: Find a better way to detect if the new UUID of the partition has showed up.
|
||||
# But this will address (among other issues)
|
||||
time.sleep(float(storage['arguments'].get('disk-sleep', 2.0))) # Let the kernel catch up with quick block devices (nvme for instance)
|
||||
return self.blockdevice.get_partition(uuid=(previous_partition_uuids ^ {partition.uuid for partition in self.blockdevice.partitions.values()}).pop())
|
||||
count = 0
|
||||
while count < 10:
|
||||
new_uuid = None
|
||||
new_uuid_set = (previous_partition_uuids ^ {partition.uuid for partition in self.blockdevice.partitions.values()})
|
||||
if len(new_uuid_set) > 0:
|
||||
new_uuid = new_uuid_set.pop()
|
||||
if new_uuid:
|
||||
return self.blockdevice.get_partition(new_uuid)
|
||||
else:
|
||||
count += 1
|
||||
log(f"Could not get uuid for partition. Waiting for the {count} time",level=logging.DEBUG)
|
||||
time.sleep(float(storage['arguments'].get('disk-sleep', 0.2)))
|
||||
else:
|
||||
log("Add partition exiting due to excesive wait time",level=logging.INFO)
|
||||
raise DiskError(f"New partition never showed up after adding new partition on {self}.")
|
||||
|
||||
def set_name(self, partition: int, name: str):
|
||||
return self.parted(f'{self.blockdevice.device} name {partition + 1} "{name}"') == 0
|
||||
|
|
|
|||
Loading…
Reference in New Issue