future proofing is good, but...
since print() was made a function in py3, i can predict at some point that return will be made a func as well. sure, good. but "return()" *currently* returns an empty tuple. We want to explicitly return None for testing purposes.
This commit is contained in:
@@ -86,7 +86,7 @@ class Partition(object):
|
||||
else:
|
||||
continue
|
||||
self.flags.append(_BlockDev.PartFlag(flag_id))
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def _initFstype(self):
|
||||
_err = ('{0} is not a valid partition filesystem type; '
|
||||
@@ -102,7 +102,7 @@ class Partition(object):
|
||||
raise ValueError(_err)
|
||||
if self.fs_type not in aif.constants.GPT_GUID_IDX.keys():
|
||||
raise ValueError(_err)
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def format(self):
|
||||
# This is a safeguard. We do *not* want to partition a disk that is mounted.
|
||||
@@ -119,7 +119,7 @@ class Partition(object):
|
||||
if self.flags:
|
||||
for f in self.flags:
|
||||
_BlockDev.part.set_part_flag(self.device, self.devpath, f, True)
|
||||
return()
|
||||
return(None)
|
||||
|
||||
#
|
||||
# def detect(self):
|
||||
@@ -155,7 +155,7 @@ class Disk(object):
|
||||
self.is_hiformatted = False
|
||||
self.is_partitioned = False
|
||||
self.partitions = []
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def diskFormat(self):
|
||||
if self.is_lowformatted:
|
||||
@@ -170,7 +170,7 @@ class Disk(object):
|
||||
_BlockDev.part.create_table(self.devpath, self.table_type, True)
|
||||
self.is_lowformatted = True
|
||||
self.is_partitioned = False
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def getPartitions(self):
|
||||
# For GPT, this *technically* should be 34 -- or, more precisely, 2048 (see FAQ in manual), but the alignment
|
||||
@@ -196,11 +196,11 @@ class Disk(object):
|
||||
p = Partition(part, self.disk, start_sector, partnum, self.table_type, part_type = parttype)
|
||||
start_sector = p.end + 1
|
||||
self.partitions.append(p)
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def partFormat(self):
|
||||
if self.is_partitioned:
|
||||
return()
|
||||
return(None)
|
||||
if not self.is_lowformatted:
|
||||
self.diskFormat()
|
||||
# This is a safeguard. We do *not* want to partition a disk that is mounted.
|
||||
@@ -208,7 +208,7 @@ class Disk(object):
|
||||
if not self.partitions:
|
||||
self.getPartitions()
|
||||
if not self.partitions:
|
||||
return()
|
||||
return(None)
|
||||
for p in self.partitions:
|
||||
p.format()
|
||||
p.is_hiformatted = True
|
||||
|
||||
@@ -144,18 +144,18 @@ class Disk(object):
|
||||
self.is_hiformatted = False
|
||||
self.is_partitioned = False
|
||||
self.partitions = []
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def diskFormat(self):
|
||||
if self.is_lowformatted:
|
||||
return()
|
||||
return(None)
|
||||
# This is a safeguard. We do *not* want to low-format a disk that is mounted.
|
||||
aif.utils.checkMounted(self.devpath)
|
||||
self.disk.deleteAllPartitions()
|
||||
self.disk.commit()
|
||||
self.is_lowformatted = True
|
||||
self.is_partitioned = False
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def getPartitions(self):
|
||||
# For GPT, this *technically* should be 34 -- or, more precisely, 2048 (see FAQ in manual), but the alignment
|
||||
@@ -181,11 +181,11 @@ class Disk(object):
|
||||
p = Partition(part, self.disk, start_sector, partnum, self.table_type, part_type = parttype)
|
||||
start_sector = p.end + 1
|
||||
self.partitions.append(p)
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def partFormat(self):
|
||||
if self.is_partitioned:
|
||||
return()
|
||||
return(None)
|
||||
if not self.is_lowformatted:
|
||||
self.diskFormat()
|
||||
# This is a safeguard. We do *not* want to partition a disk that is mounted.
|
||||
@@ -193,11 +193,11 @@ class Disk(object):
|
||||
if not self.partitions:
|
||||
self.getPartitions()
|
||||
if not self.partitions:
|
||||
return()
|
||||
return(None)
|
||||
for p in self.partitions:
|
||||
self.disk.addPartition(partition = p, constraint = self.device.optimalAlignedConstraint)
|
||||
self.disk.commit()
|
||||
p.devpath = p.partition.path
|
||||
p.is_hiformatted = True
|
||||
self.is_partitioned = True
|
||||
return()
|
||||
return(None)
|
||||
|
||||
@@ -56,7 +56,7 @@ class FS(object):
|
||||
cmd.append(self.devpath)
|
||||
subprocess.run(cmd)
|
||||
self.formatted = True
|
||||
return()
|
||||
return(None)
|
||||
|
||||
|
||||
class Mount(object):
|
||||
@@ -86,7 +86,7 @@ class Mount(object):
|
||||
|
||||
def mount(self):
|
||||
if self.mounted:
|
||||
return()
|
||||
return(None)
|
||||
os.makedirs(self.target, exist_ok = True)
|
||||
opts = self._parseOpts()
|
||||
_BlockDev.fs.mount(self.source,
|
||||
@@ -94,21 +94,21 @@ class Mount(object):
|
||||
self.fs.fstype,
|
||||
(','.join(opts) if opts else None))
|
||||
self.mounted = True
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def unmount(self, lazy = False, force = False):
|
||||
self.updateMount()
|
||||
if not self.mounted and not force:
|
||||
return()
|
||||
return(None)
|
||||
_BlockDev.fs.unmount(self.target,
|
||||
lazy,
|
||||
force)
|
||||
self.mounted = False
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def updateMount(self):
|
||||
if self.source in [p.device for p in psutil.disk_partitions(all = True)]:
|
||||
self.mounted = True
|
||||
else:
|
||||
self.mounted = False
|
||||
return()
|
||||
return(None)
|
||||
|
||||
@@ -47,7 +47,7 @@ class FS(object):
|
||||
cmd.append(self.devpath)
|
||||
subprocess.run(cmd)
|
||||
self.formatted = True
|
||||
return()
|
||||
return(None)
|
||||
|
||||
|
||||
class Mount(object):
|
||||
@@ -76,7 +76,7 @@ class Mount(object):
|
||||
|
||||
def mount(self):
|
||||
if self.mounted:
|
||||
return()
|
||||
return(None)
|
||||
os.makedirs(self.target, exist_ok = True)
|
||||
opts = self._parseOpts()
|
||||
# TODO: logging
|
||||
@@ -87,12 +87,12 @@ class Mount(object):
|
||||
cmd.extend([self.source, self.target])
|
||||
subprocess.run(cmd)
|
||||
self.mounted = True
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def unmount(self, lazy = False, force = False):
|
||||
self.updateMount()
|
||||
if not self.mounted and not force:
|
||||
return()
|
||||
return(None)
|
||||
# TODO: logging
|
||||
cmd = ['/usr/bin/umount']
|
||||
if lazy:
|
||||
@@ -102,11 +102,11 @@ class Mount(object):
|
||||
cmd.append(self.target)
|
||||
subprocess.run(cmd)
|
||||
self.mounted = False
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def updateMount(self):
|
||||
if self.source in [p.device for p in psutil.disk_partitions(all = True)]:
|
||||
self.mounted = True
|
||||
else:
|
||||
self.mounted = False
|
||||
return()
|
||||
return(None)
|
||||
|
||||
@@ -40,7 +40,7 @@ class LuksSecretFile(LuksSecret):
|
||||
self.passphrase = secrets.token_bytes(self.size)
|
||||
if not isinstance(self.passphrase, bytes):
|
||||
self.passphrase = self.passphrase.encode('utf-8')
|
||||
return()
|
||||
return(None)
|
||||
|
||||
|
||||
class LUKS(object):
|
||||
@@ -72,7 +72,7 @@ class LUKS(object):
|
||||
'(aif.disk.luks.LuksSecretPassphrase or '
|
||||
'aif.disk.luks.LuksSecretFile)')
|
||||
self.secrets.append(secretobj)
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def createSecret(self, secrets_xml = None):
|
||||
if not secrets_xml: # Find all of them from self
|
||||
@@ -116,11 +116,11 @@ class LUKS(object):
|
||||
passphrase = None,
|
||||
bytesize = kf.attrib.get('size', 4096))
|
||||
self.secrets.append(secretobj)
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def create(self):
|
||||
if self.created:
|
||||
return()
|
||||
return(None)
|
||||
if not self.secrets:
|
||||
raise RuntimeError('Cannot create a LUKS volume with no secrets added')
|
||||
for idx, secret in enumerate(self.secrets):
|
||||
@@ -138,28 +138,28 @@ class LUKS(object):
|
||||
self.secrets[0].passphrase,
|
||||
secret.passphrase)
|
||||
self.created = True
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def lock(self):
|
||||
if not self.created:
|
||||
raise RuntimeError('Cannot lock a LUKS volume before it is created')
|
||||
if self.locked:
|
||||
return()
|
||||
return(None)
|
||||
_BlockDev.crypto.luks_close(self.name)
|
||||
self.locked = True
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def unlock(self, passphrase = None):
|
||||
if not self.created:
|
||||
raise RuntimeError('Cannot unlock a LUKS volume before it is created')
|
||||
if not self.locked:
|
||||
return()
|
||||
return(None)
|
||||
_BlockDev.crypto.luks_open_blob(self.source,
|
||||
self.name,
|
||||
self.secrets[0].passphrase,
|
||||
False) # read-only
|
||||
self.locked = False
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def updateInfo(self):
|
||||
if self.locked:
|
||||
@@ -177,7 +177,7 @@ class LUKS(object):
|
||||
info[k] = v
|
||||
info['_cipher'] = '{cipher}-{mode}'.format(**info)
|
||||
self.info = info
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def writeConf(self, conf = '/etc/crypttab'):
|
||||
if not self.secrets:
|
||||
@@ -204,4 +204,4 @@ class LUKS(object):
|
||||
if luksinfo not in conflines:
|
||||
with open(conf, 'a') as fh:
|
||||
fh.write('{0}\n'.format(luksinfo))
|
||||
return()
|
||||
return(None)
|
||||
|
||||
@@ -40,7 +40,7 @@ class LuksSecretFile(LuksSecret):
|
||||
self.passphrase = secrets.token_bytes(self.size)
|
||||
if not isinstance(self.passphrase, bytes):
|
||||
self.passphrase = self.passphrase.encode('utf-8')
|
||||
return()
|
||||
return(None)
|
||||
|
||||
|
||||
class LUKS(object):
|
||||
@@ -71,7 +71,7 @@ class LUKS(object):
|
||||
'(aif.disk.luks.LuksSecretPassphrase or '
|
||||
'aif.disk.luks.LuksSecretFile)')
|
||||
self.secrets.append(secretobj)
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def createSecret(self, secrets_xml = None):
|
||||
if not secrets_xml: # Find all of them from self
|
||||
@@ -115,11 +115,11 @@ class LUKS(object):
|
||||
passphrase = None,
|
||||
bytesize = kf.attrib.get('size', 4096))
|
||||
self.secrets.append(secretobj)
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def create(self):
|
||||
if self.created:
|
||||
return()
|
||||
return(None)
|
||||
if not self.secrets:
|
||||
raise RuntimeError('Cannot create a LUKS volume with no secrets added')
|
||||
for idx, secret in enumerate(self.secrets):
|
||||
@@ -147,13 +147,13 @@ class LUKS(object):
|
||||
subprocess.run(cmd, input = self.secrets[0].passphrase)
|
||||
os.remove(tmpfile[1])
|
||||
self.created = True
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def lock(self):
|
||||
if not self.created:
|
||||
raise RuntimeError('Cannot lock a LUKS volume before it is created')
|
||||
if self.locked:
|
||||
return()
|
||||
return(None)
|
||||
# TODO: logging
|
||||
cmd = ['cryptsetup',
|
||||
'--batch-mode',
|
||||
@@ -161,13 +161,13 @@ class LUKS(object):
|
||||
self.name]
|
||||
subprocess.run(cmd)
|
||||
self.locked = True
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def unlock(self, passphrase = None):
|
||||
if not self.created:
|
||||
raise RuntimeError('Cannot unlock a LUKS volume before it is created')
|
||||
if not self.locked:
|
||||
return()
|
||||
return(None)
|
||||
cmd = ['cryptsetup',
|
||||
'--batch-mode',
|
||||
'luksOpen',
|
||||
@@ -176,7 +176,7 @@ class LUKS(object):
|
||||
self.name]
|
||||
subprocess.run(cmd, input = self.secrets[0].passphrase)
|
||||
self.locked = False
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def updateInfo(self):
|
||||
if self.locked:
|
||||
@@ -225,7 +225,7 @@ class LUKS(object):
|
||||
elif k == 'uuid':
|
||||
v = uuid.UUID(hex = v)
|
||||
self.info = info
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def writeConf(self, conf = '/etc/crypttab'):
|
||||
if not self.secrets:
|
||||
@@ -252,4 +252,4 @@ class LUKS(object):
|
||||
if luksinfo not in conflines:
|
||||
with open(conf, 'a') as fh:
|
||||
fh.write('{0}\n'.format(luksinfo))
|
||||
return()
|
||||
return(None)
|
||||
|
||||
@@ -42,7 +42,7 @@ class PV(object):
|
||||
except _BlockDev.LVMError:
|
||||
self.meta = None
|
||||
self.is_pooled = False
|
||||
return()
|
||||
return(None)
|
||||
for k in dir(_meta):
|
||||
if k.startswith('_'):
|
||||
continue
|
||||
@@ -52,7 +52,7 @@ class PV(object):
|
||||
meta[k] = v
|
||||
self.meta = meta
|
||||
self.is_pooled = True
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def prepare(self):
|
||||
try:
|
||||
@@ -97,7 +97,7 @@ class PV(object):
|
||||
0,
|
||||
opts)
|
||||
self._parseMeta()
|
||||
return()
|
||||
return(None)
|
||||
|
||||
|
||||
class VG(object):
|
||||
@@ -130,7 +130,7 @@ class VG(object):
|
||||
raise ValueError('pvobj must be of type aif.disk.lvm.PV')
|
||||
pvobj.prepare()
|
||||
self.pvs.append(pvobj)
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def create(self):
|
||||
if not self.pvs:
|
||||
@@ -149,7 +149,7 @@ class VG(object):
|
||||
pv._parseMeta()
|
||||
self.created = True
|
||||
self.updateInfo()
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def createLV(self, lv_xml = None):
|
||||
if not self.created:
|
||||
@@ -165,21 +165,21 @@ class VG(object):
|
||||
lv.create()
|
||||
# self.lvs.append(lv)
|
||||
self.updateInfo()
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def start(self):
|
||||
_BlockDev.lvm.vgactivate(self.name)
|
||||
self.updateInfo()
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def stop(self):
|
||||
_BlockDev.lvm.vgdeactivate(self.name)
|
||||
self.updateInfo()
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def updateInfo(self):
|
||||
if not self.created:
|
||||
return()
|
||||
return(None)
|
||||
_info = _BlockDev.lvm.vginfo(self.name)
|
||||
# TODO: parity with lvm_fallback.VG.updateInfo
|
||||
# key names currently (probably) don't match and need to confirm the information's all present
|
||||
@@ -192,7 +192,7 @@ class VG(object):
|
||||
v = getattr(_info, k)
|
||||
info[k] = v
|
||||
self.info = info
|
||||
return()
|
||||
return(None)
|
||||
|
||||
|
||||
class LV(object):
|
||||
@@ -247,7 +247,7 @@ class LV(object):
|
||||
target = 'B'))
|
||||
if self.size >= _sizes['total']:
|
||||
self.size = 0
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def create(self):
|
||||
if not self.pvs:
|
||||
@@ -268,7 +268,7 @@ class LV(object):
|
||||
self.created = True
|
||||
self.updateInfo()
|
||||
self.vg.updateInfo()
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def start(self):
|
||||
_BlockDev.lvm.lvactivate(self.vg.name,
|
||||
@@ -276,18 +276,18 @@ class LV(object):
|
||||
True,
|
||||
None)
|
||||
self.updateInfo()
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def stop(self):
|
||||
_BlockDev.lvm.lvdeactivate(self.vg.name,
|
||||
self.name,
|
||||
None)
|
||||
self.updateInfo()
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def updateInfo(self):
|
||||
if not self.created:
|
||||
return()
|
||||
return(None)
|
||||
_info = _BlockDev.lvm.lvinfo(self.vg.name, self.name)
|
||||
# TODO: parity with lvm_fallback.LV.updateInfo
|
||||
# key names currently (probably) don't match and need to confirm the information's all present
|
||||
@@ -300,4 +300,4 @@ class LV(object):
|
||||
v = getattr(_info, k)
|
||||
info[k] = v
|
||||
self.info = info
|
||||
return()
|
||||
return(None)
|
||||
|
||||
@@ -43,7 +43,7 @@ class PV(object):
|
||||
if _meta.returncode != 0:
|
||||
self.meta = None
|
||||
self.is_pooled = False
|
||||
return()
|
||||
return(None)
|
||||
_meta = json.loads(_meta.stdout.decode('utf-8'))['report'][0]['pv'][0]
|
||||
for k, v in _meta.items():
|
||||
# We *could* regex this but the pattern would be a little more complex than idea,
|
||||
@@ -64,7 +64,7 @@ class PV(object):
|
||||
meta[k] = v
|
||||
self.meta = meta
|
||||
self.is_pooled = True
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def prepare(self):
|
||||
if not self.meta:
|
||||
@@ -80,7 +80,7 @@ class PV(object):
|
||||
self.devpath]
|
||||
subprocess.run(cmd)
|
||||
self._parseMeta()
|
||||
return()
|
||||
return(None)
|
||||
|
||||
|
||||
class VG(object):
|
||||
@@ -113,7 +113,7 @@ class VG(object):
|
||||
raise ValueError('pvobj must be of type aif.disk.lvm.PV')
|
||||
pvobj.prepare()
|
||||
self.pvs.append(pvobj)
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def create(self):
|
||||
if not self.pvs:
|
||||
@@ -129,7 +129,7 @@ class VG(object):
|
||||
pv._parseMeta()
|
||||
self.created = True
|
||||
self.updateInfo()
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def createLV(self, lv_xml = None):
|
||||
if not self.created:
|
||||
@@ -145,7 +145,7 @@ class VG(object):
|
||||
lv.create()
|
||||
# self.lvs.append(lv)
|
||||
self.updateInfo()
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def start(self):
|
||||
cmd = ['vgchange',
|
||||
@@ -154,7 +154,7 @@ class VG(object):
|
||||
self.name]
|
||||
subprocess.run(cmd)
|
||||
self.updateInfo()
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def stop(self):
|
||||
cmd = ['vgchange',
|
||||
@@ -163,7 +163,7 @@ class VG(object):
|
||||
self.name]
|
||||
subprocess.run(cmd)
|
||||
self.updateInfo()
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def updateInfo(self):
|
||||
info = {}
|
||||
@@ -178,7 +178,7 @@ class VG(object):
|
||||
if _info.returncode != 0:
|
||||
self.info = None
|
||||
self.created = False
|
||||
return()
|
||||
return(None)
|
||||
_info = json.loads(_info.stdout.decode('utf-8'))['report'][0]['vg'][0]
|
||||
for k, v in _info.items():
|
||||
# ints
|
||||
@@ -196,7 +196,7 @@ class VG(object):
|
||||
v = None
|
||||
info[k] = v
|
||||
self.info = info
|
||||
return()
|
||||
return(None)
|
||||
|
||||
|
||||
class LV(object):
|
||||
@@ -250,7 +250,7 @@ class LV(object):
|
||||
target = 'B'))
|
||||
if self.size >= _sizes['total']:
|
||||
self.size = 0
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def create(self):
|
||||
if not self.pvs:
|
||||
@@ -267,7 +267,7 @@ class LV(object):
|
||||
self.created = True
|
||||
self.updateInfo()
|
||||
self.vg.updateInfo()
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def start(self):
|
||||
cmd = ['lvchange',
|
||||
@@ -276,7 +276,7 @@ class LV(object):
|
||||
self.qualified_name]
|
||||
subprocess.run(cmd)
|
||||
self.updateInfo()
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def stop(self):
|
||||
cmd = ['lvchange',
|
||||
@@ -285,7 +285,7 @@ class LV(object):
|
||||
self.qualified_name]
|
||||
subprocess.run(cmd)
|
||||
self.updateInfo()
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def updateInfo(self):
|
||||
info = {}
|
||||
@@ -300,7 +300,7 @@ class LV(object):
|
||||
if _info.returncode != 0:
|
||||
self.info = None
|
||||
self.created = False
|
||||
return()
|
||||
return(None)
|
||||
_info = json.loads(_info.stdout.decode('utf-8'))['report'][0]['vg'][0]
|
||||
for k, v in _info.items():
|
||||
# ints
|
||||
@@ -330,4 +330,4 @@ class LV(object):
|
||||
v = None
|
||||
info[k] = v
|
||||
self.info = info
|
||||
return()
|
||||
return(None)
|
||||
|
||||
@@ -44,7 +44,7 @@ class Member(object):
|
||||
except _BlockDev.MDRaidError:
|
||||
self.is_superblocked = False
|
||||
self.superblock = None
|
||||
return()
|
||||
return(None)
|
||||
for k in dir(_block):
|
||||
if k.startswith('_'):
|
||||
continue
|
||||
@@ -60,7 +60,7 @@ class Member(object):
|
||||
block[k] = v
|
||||
self.superblock = block
|
||||
self.is_superblocked = True
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def prepare(self):
|
||||
try:
|
||||
@@ -69,7 +69,7 @@ class Member(object):
|
||||
pass
|
||||
_BlockDev.md.destroy(self.devpath)
|
||||
self._parseDeviceBlock()
|
||||
return()
|
||||
return(None)
|
||||
|
||||
|
||||
class Array(object):
|
||||
@@ -121,7 +121,7 @@ class Array(object):
|
||||
raise ValueError('memberobj must be of type aif.disk.mdadm.Member')
|
||||
memberobj.prepare()
|
||||
self.members.append(memberobj)
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def create(self):
|
||||
if not self.members:
|
||||
@@ -147,7 +147,7 @@ class Array(object):
|
||||
self.writeConf()
|
||||
self.devpath = self.info['device']
|
||||
self.state = 'new'
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def start(self, scan = False):
|
||||
if not any((self.members, self.devpath)):
|
||||
@@ -162,12 +162,12 @@ class Array(object):
|
||||
True,
|
||||
None)
|
||||
self.state = 'assembled'
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def stop(self):
|
||||
_BlockDev.md.deactivate(self.name)
|
||||
self.state = 'disassembled'
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def updateStatus(self):
|
||||
_status = _BlockDev.md.detail(self.name)
|
||||
@@ -189,7 +189,7 @@ class Array(object):
|
||||
v = uuid.UUID(hex = v)
|
||||
info[k] = v
|
||||
self.info = info
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def writeConf(self, conf = '/etc/mdadm.conf'):
|
||||
conf = os.path.realpath(conf)
|
||||
@@ -214,4 +214,4 @@ class Array(object):
|
||||
if nodev:
|
||||
with open(conf, 'a') as fh:
|
||||
fh.write('{0}\n'.format(arrayinfo))
|
||||
return()
|
||||
return(None)
|
||||
|
||||
@@ -49,7 +49,7 @@ class Member(object):
|
||||
# TODO: logging?
|
||||
self.is_superblocked = False
|
||||
self.superblock = None
|
||||
return()
|
||||
return(None)
|
||||
block = {}
|
||||
for idx, line in enumerate(super.stdout.decode('utf-8').splitlines()):
|
||||
line = line.strip()
|
||||
@@ -116,7 +116,7 @@ class Member(object):
|
||||
block[k] = v
|
||||
self.superblock = block
|
||||
self.is_superblocked = True
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def prepare(self):
|
||||
if self.is_superblocked:
|
||||
@@ -124,7 +124,7 @@ class Member(object):
|
||||
subprocess.run(['mdadm', '--misc', '--zero-superblock', self.devpath])
|
||||
self.is_superblocked = False
|
||||
self._parseDeviceBlock()
|
||||
return()
|
||||
return(None)
|
||||
|
||||
|
||||
class Array(object):
|
||||
@@ -174,7 +174,7 @@ class Array(object):
|
||||
raise ValueError('memberobj must be of type aif.disk.mdadm.Member')
|
||||
memberobj.prepare()
|
||||
self.members.append(memberobj)
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def create(self):
|
||||
if not self.members:
|
||||
@@ -199,7 +199,7 @@ class Array(object):
|
||||
self.updateStatus()
|
||||
self.writeConf()
|
||||
self.state = 'new'
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def start(self, scan = False):
|
||||
if not any((self.members, self.devpath)):
|
||||
@@ -214,13 +214,13 @@ class Array(object):
|
||||
subprocess.run(cmd)
|
||||
self.updateStatus()
|
||||
self.state = 'assembled'
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def stop(self):
|
||||
# TODO: logging
|
||||
subprocess.run(['mdadm', '--stop', self.devpath])
|
||||
self.state = 'disassembled'
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def updateStatus(self):
|
||||
_info = mdstat.parse()
|
||||
@@ -228,7 +228,7 @@ class Array(object):
|
||||
if k != self.name:
|
||||
del(_info['devices'][k])
|
||||
self.info = copy.deepcopy(_info)
|
||||
return()
|
||||
return(None)
|
||||
|
||||
def writeConf(self, conf = '/etc/mdadm.conf'):
|
||||
conf = os.path.realpath(conf)
|
||||
@@ -250,4 +250,4 @@ class Array(object):
|
||||
if nodev:
|
||||
with open(conf, 'a') as fh:
|
||||
fh.write('{0}\n'.format(arrayinfo))
|
||||
return()
|
||||
return(None)
|
||||
|
||||
Reference in New Issue
Block a user