Skip to content

Commit

Permalink
Add md provision test to the provision test suite
Browse files Browse the repository at this point in the history
And fix detected regressions:

* unprovision of md-over-loop was broken due to dev_to_paths not returning
before "multipath -l <loopdev>" which can not work
* better handling of uuid == None
* check that uuid is not empty before adding an <ignore> line to mdadm.conf
  • Loading branch information
cvaroqui committed Jan 7, 2018
1 parent 9ba325e commit dc0a390
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 5 deletions.
2 changes: 1 addition & 1 deletion lib/provDiskMdLinux.py
Expand Up @@ -82,7 +82,7 @@ def get_real_uuid(self, name):
raise ex.excError("unable to determine md uuid")

def unprovisioner(self):
if self.r.uuid == "":
if self.r.uuid == "" or self.r.uuid is None:
return
for dev in self.r.sub_devs():
self.r.vcall([self.r.mdadm, "--brief", "--zero-superblock", dev])
Expand Down
2 changes: 2 additions & 0 deletions lib/rcUtilitiesLinux.py
Expand Up @@ -16,6 +16,8 @@ def udevadm_settle():
justcall(cmd)

def dev_to_paths(dev, log=None):
if dev.startswith("/dev/loop"):
return [dev]
if dev.startswith("/dev/dm-"):
dev = "252:%s" % dev[8:]
cmd = [rcEnv.syspaths.multipath, '-l', dev]
Expand Down
13 changes: 11 additions & 2 deletions lib/resDiskMdLinux.py
Expand Up @@ -25,7 +25,10 @@ def __init__(self,
name=uuid,
type='disk.md',
**kwargs)
self.label = "md " + uuid
if uuid:
self.label = "md " + uuid
else:
self.label = "md"

@lazy
def mdadm_cf(self):
Expand Down Expand Up @@ -176,7 +179,7 @@ def detail_status(self):
return "unknown"

def has_it(self):
if self.uuid == "":
if self.uuid == "" or self.uuid is None:
return False
return self.uuid in self.mdadm_scan_v()[0]

Expand All @@ -194,6 +197,8 @@ def is_up(self):
return False

def auto_assemble_disabled(self):
if self.uuid == "" or self.uuid is None:
return True
if not os.path.exists(self.mdadm_cf):
self.status_log("auto-assemble is not disabled")
return False
Expand All @@ -211,6 +216,8 @@ def auto_assemble_disabled(self):
return False

def auto_assemble_disable(self):
if self.uuid == "" or self.uuid is None:
return
if self.auto_assemble_disabled():
return
self.log.info("disable auto-assemble in %s" % self.mdadm_cf)
Expand Down Expand Up @@ -251,6 +258,8 @@ def _create_static_name(self):

@fcache
def sub_devs(self):
if self.uuid == "" or self.uuid is None:
return set()
try:
devpath = self.md_devpath()
except ex.excError as e:
Expand Down
10 changes: 8 additions & 2 deletions lib/svcBuilder.py
Expand Up @@ -350,7 +350,10 @@ def add_lv(svc, s):

def add_md(svc, s):
kwargs = init_kwargs(svc, s)
kwargs['uuid'] = svc.conf_get(s, 'uuid')
try:
kwargs['uuid'] = svc.conf_get(s, 'uuid')
except ex.OptNotFound as exc:
kwargs['uuid'] = exc.default

m = __import__('resDiskMdLinux')
r = m.Disk(**kwargs)
Expand Down Expand Up @@ -1213,7 +1216,10 @@ def add_container_docker(svc, s):
def add_container_ovm(svc, s):
kwargs = init_kwargs(svc, s)
kwargs['osvc_root_path'] = get_osvc_root_path(svc, s)
kwargs['uuid'] = svc.conf_get(s, 'uuid')
try:
kwargs['uuid'] = svc.conf_get(s, 'uuid')
except ex.OptNotFound as exc:
kwargs['uuid'] = exc.default

try:
kwargs['name'] = svc.conf_get(s, 'name')
Expand Down
28 changes: 28 additions & 0 deletions lib/tests/test_provision.py
Expand Up @@ -97,4 +97,32 @@ def test_022(self):
ret = svcmgr.main(argv=["-s", "unittest", "delete", "--unprovision", "--rid", "disk#0,fs#0"])
assert ret == 0

def test_031(self):
"""
Provision, disk.md
"""
ret = svcmgr.main(argv=["-s", "unittest", "set",
"--kw", "disk#0.type=loop",
"--kw", "disk#0.file=/var/tmp/{svcname}.1.dd",
"--kw", "disk#0.size=10m",
"--kw", "disk#1.type=loop",
"--kw", "disk#1.file=/var/tmp/{svcname}.2.dd",
"--kw", "disk#1.size=10m",
"--kw", "disk#2.type=md",
"--kw", "disk#2.level=raid0",
"--kw", "disk#2.devs={disk#0.exposed_devs[0]} {disk#1.exposed_devs[0]}",
])
assert ret == 0
ret = svcmgr.main(argv=["-s", "unittest", "provision", "--local"])
assert ret == 0

def test_032(self):
"""
Unprovision, disk.md
"""
ret = svcmgr.main(argv=["-s", "unittest", "unprovision", "--local"])
assert ret == 0
ret = svcmgr.main(argv=["-s", "unittest", "delete", "--unprovision", "--rid", "disk#0,disk#1,disk#2"])
assert ret == 0


0 comments on commit dc0a390

Please sign in to comment.