diff --git a/lib/provDiskMdLinux.py b/lib/provDiskMdLinux.py index ff427395ef..5bcdb651ec 100644 --- a/lib/provDiskMdLinux.py +++ b/lib/provDiskMdLinux.py @@ -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]) diff --git a/lib/rcUtilitiesLinux.py b/lib/rcUtilitiesLinux.py index f75fbdb635..e03bb3a56e 100644 --- a/lib/rcUtilitiesLinux.py +++ b/lib/rcUtilitiesLinux.py @@ -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] diff --git a/lib/resDiskMdLinux.py b/lib/resDiskMdLinux.py index 6daa62e0bd..76f8133a64 100644 --- a/lib/resDiskMdLinux.py +++ b/lib/resDiskMdLinux.py @@ -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): @@ -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] @@ -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 @@ -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) @@ -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: diff --git a/lib/svcBuilder.py b/lib/svcBuilder.py index 09d6c6869f..dcaba61370 100644 --- a/lib/svcBuilder.py +++ b/lib/svcBuilder.py @@ -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) @@ -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') diff --git a/lib/tests/test_provision.py b/lib/tests/test_provision.py index 4c63b7d16c..0e1a57bdf0 100644 --- a/lib/tests/test_provision.py +++ b/lib/tests/test_provision.py @@ -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 +