]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-volume: fix device unittest, mock has_bluestore_label, lint 32733/head
authorJan Fajerski <jfajerski@suse.com>
Wed, 15 Jan 2020 14:55:45 +0000 (15:55 +0100)
committerSébastien Han <seb@redhat.com>
Tue, 21 Jan 2020 17:20:14 +0000 (18:20 +0100)
This also adds a test case for has_bluestore_label.

Fixes: https://tracker.ceph.com/issues/43611
Signed-off-by: Jan Fajerski <jfajerski@suse.com>
(cherry picked from commit 91c7f5189d163ca517c643b8548a2e16176392cc)

src/ceph-volume/ceph_volume/devices/raw/activate.py
src/ceph-volume/ceph_volume/devices/raw/create.py
src/ceph-volume/ceph_volume/devices/raw/list.py
src/ceph-volume/ceph_volume/devices/raw/prepare.py
src/ceph-volume/ceph_volume/devices/raw/scan.py [deleted file]
src/ceph-volume/ceph_volume/tests/conftest.py
src/ceph-volume/ceph_volume/tests/util/test_device.py

index bb5454d9c087ebb28513c1dae4400a929ce1192a..44164c844dfe7bec3571ea6a6b104564bcc2182e 100644 (file)
@@ -3,12 +3,9 @@ import argparse
 import logging
 import os
 from textwrap import dedent
-from ceph_volume import process, conf, decorators, terminal, __release__, configuration
-from ceph_volume.util import system, disk
+from ceph_volume import process, conf, decorators, terminal
+from ceph_volume.util import system
 from ceph_volume.util import prepare as prepare_utils
-from ceph_volume.util import encryption as encryption_utils
-from ceph_volume.systemd import systemctl
-from ceph_volume.api import lvm as api
 from .list import direct_report
 
 
@@ -17,7 +14,6 @@ logger = logging.getLogger(__name__)
 def activate_bluestore(meta, tmpfs, systemd):
     # find the osd
     osd_id = meta['osd_id']
-    osd_fsid = meta['osd_uuid']
 
     # mount on tmpfs the osd directory
     osd_path = '/var/lib/ceph/osd/%s-%s' % (conf.cluster, osd_id)
index 97e38582709f20dfa36042ff6b575a99536e021c..fb633c7ffca15d6c147653a609dbcb02b2e74589 100644 (file)
@@ -2,7 +2,6 @@ from __future__ import print_function
 from textwrap import dedent
 import logging
 from ceph_volume.util import system
-from ceph_volume.util.arg_validators import exclude_group_options
 from ceph_volume import decorators, terminal
 from .prepare import Prepare
 from .activate import Activate
@@ -76,7 +75,7 @@ class Create(object):
         if not self.args.bluestore:
             terminal.error('must specify --bluestore (currently the only supported backend)')
             raise SystemExit(1)
-        if not args.no_systemd:
+        if not self.args.no_systemd:
             terminal.error('systemd support not yet implemented')
             raise SystemExit(1)
         self.create(self.args)
index 7e526d3f8b1564eb510a37405f6c434dcfacbf5c..5d610c7a02425c240ad700ff43fdd2d330b2d4f1 100644 (file)
@@ -1,15 +1,9 @@
 from __future__ import print_function
 import argparse
-import base64
 import json
 import logging
-import os
 from textwrap import dedent
-from ceph_volume import decorators, terminal, conf, process
-from ceph_volume.api import lvm
-from ceph_volume.systemd import systemctl
-from ceph_volume.util import arg_validators, system, disk, encryption
-from ceph_volume.util.device import Device
+from ceph_volume import decorators, process
 
 
 logger = logging.getLogger(__name__)
index ff59b6f9a24e2466ef74e144f4cc8366cde5d5dc..751630563737af4b51912d48f2bd13e245af0f64 100644 (file)
@@ -1,11 +1,9 @@
 from __future__ import print_function
-import argparse
 import json
 import logging
 from textwrap import dedent
 from ceph_volume.util import prepare as prepare_utils
-from ceph_volume.util import encryption as encryption_utils
-from ceph_volume.util import system, disk
+from ceph_volume.util import system
 from ceph_volume import conf, decorators, terminal
 from ceph_volume.devices.lvm.common import rollback_osd
 from .common import create_parser
@@ -79,7 +77,6 @@ class Prepare(object):
     @decorators.needs_root
     def prepare(self):
         secrets = {'cephx_secret': prepare_utils.create_key()}
-        cluster_fsid = self.get_cluster_fsid()
         osd_fsid = self.args.osd_fsid or system.generate_uuid()
         crush_device_class = self.args.crush_device_class
         if crush_device_class:
diff --git a/src/ceph-volume/ceph_volume/devices/raw/scan.py b/src/ceph-volume/ceph_volume/devices/raw/scan.py
deleted file mode 100644 (file)
index 604e11c..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-from __future__ import print_function
-import argparse
-import base64
-import json
-import logging
-import os
-from textwrap import dedent
-from ceph_volume import decorators, terminal, conf
-from ceph_volume.api import lvm
-from ceph_volume.systemd import systemctl
-from ceph_volume.util import arg_validators, system, disk, encryption
-from ceph_volume.util.device import Device
-
-
-logger = logging.getLogger(__name__)
-
-class Scan(object):
-
-    help = 'Capture metadata from all running ceph-disk OSDs, OSD data partition or directory'
-
-    def __init__(self, argv):
-        self.argv = argv
-        self._etc_path = '/etc/ceph/osd/'
index b108ce2f1256fd9a517792deb2a725731c2faa17..bdef97ae3c670c5c19ff0ecd0f678cb0af674e88 100644 (file)
@@ -1,5 +1,6 @@
 import os
 import pytest
+from mock.mock import patch, PropertyMock
 from ceph_volume.util import disk
 from ceph_volume.util.constants import ceph_disk_guids
 from ceph_volume.api import lvm as lvm_api
@@ -265,8 +266,16 @@ def device_info_not_ceph_disk_member(monkeypatch, request):
 
 
 @pytest.fixture
-def device_info(monkeypatch):
-    def apply(devices=None, lsblk=None, lv=None, blkid=None, udevadm=None):
+def patch_bluestore_label():
+    with patch('ceph_volume.util.device.Device.has_bluestore_label',
+               new_callable=PropertyMock) as p:
+        p.return_value = False
+        yield p
+
+@pytest.fixture
+def device_info(monkeypatch, patch_bluestore_label):
+    def apply(devices=None, lsblk=None, lv=None, blkid=None, udevadm=None,
+              has_bluestore_label=False):
         devices = devices if devices else {}
         lsblk = lsblk if lsblk else {}
         blkid = blkid if blkid else {}
index 7477777bc8d57c74645fcf9870c8d852dc6d037a..57595117d2a3dfbf676998bc03ee3e27d468de4f 100644 (file)
@@ -139,14 +139,14 @@ class TestDevice(object):
     @pytest.mark.usefixtures("lsblk_ceph_disk_member",
                              "disable_kernel_queries",
                              "disable_lvm_queries")
-    def test_is_ceph_disk_lsblk(self, monkeypatch):
+    def test_is_ceph_disk_lsblk(self, monkeypatch, patch_bluestore_label):
         disk = device.Device("/dev/sda")
         assert disk.is_ceph_disk_member
 
     @pytest.mark.usefixtures("blkid_ceph_disk_member",
                              "disable_kernel_queries",
                              "disable_lvm_queries")
-    def test_is_ceph_disk_blkid(self, monkeypatch):
+    def test_is_ceph_disk_blkid(self, monkeypatch, patch_bluestore_label):
         monkeypatch.setattr("ceph_volume.util.device.disk.lsblk",
                             lambda path: {'PARTLABEL': ""})
         disk = device.Device("/dev/sda")
@@ -155,7 +155,7 @@ class TestDevice(object):
     @pytest.mark.usefixtures("lsblk_ceph_disk_member",
                              "disable_kernel_queries",
                              "disable_lvm_queries")
-    def test_is_ceph_disk_member_not_available_lsblk(self, monkeypatch):
+    def test_is_ceph_disk_member_not_available_lsblk(self, monkeypatch, patch_bluestore_label):
         disk = device.Device("/dev/sda")
         assert disk.is_ceph_disk_member
         assert not disk.available
@@ -164,7 +164,7 @@ class TestDevice(object):
     @pytest.mark.usefixtures("blkid_ceph_disk_member",
                              "disable_kernel_queries",
                              "disable_lvm_queries")
-    def test_is_ceph_disk_member_not_available_blkid(self, monkeypatch):
+    def test_is_ceph_disk_member_not_available_blkid(self, monkeypatch, patch_bluestore_label):
         monkeypatch.setattr("ceph_volume.util.device.disk.lsblk",
                             lambda path: {'PARTLABEL': ""})
         disk = device.Device("/dev/sda")
@@ -172,10 +172,46 @@ class TestDevice(object):
         assert not disk.available
         assert "Used by ceph-disk" in disk.rejected_reasons
 
+    def test_reject_removable_device(self, device_info):
+        data = {"/dev/sdb": {"removable": 1}}
+        device_info(devices=data)
+        disk = device.Device("/dev/sdb")
+        assert not disk.available
+
+    def test_accept_non_removable_device(self, device_info):
+        data = {"/dev/sdb": {"removable": 0, "size": 5368709120}}
+        device_info(devices=data)
+        disk = device.Device("/dev/sdb")
+        assert disk.available
+
+    def test_reject_readonly_device(self, device_info):
+        data = {"/dev/cdrom": {"ro": 1}}
+        device_info(devices=data)
+        disk = device.Device("/dev/cdrom")
+        assert not disk.available
+
+    def test_reject_smaller_than_5gb(self, device_info):
+        data = {"/dev/sda": {"size": 5368709119}}
+        device_info(devices=data)
+        disk = device.Device("/dev/sda")
+        assert not disk.available, 'too small device is available'
+
+    def test_accept_non_readonly_device(self, device_info):
+        data = {"/dev/sda": {"ro": 0, "size": 5368709120}}
+        device_info(devices=data)
+        disk = device.Device("/dev/sda")
+        assert disk.available
+
+    def test_reject_bluestore_device(self, monkeypatch, patch_bluestore_label):
+        patch_bluestore_label.return_value = True
+        disk = device.Device("/dev/sda")
+        assert not disk.available
+        assert "Has BlueStore device label" in disk.rejected_reasons
+
     @pytest.mark.usefixtures("device_info_not_ceph_disk_member",
                              "disable_lvm_queries",
                              "disable_kernel_queries")
-    def test_is_not_ceph_disk_member_lsblk(self):
+    def test_is_not_ceph_disk_member_lsblk(self, patch_bluestore_label):
         disk = device.Device("/dev/sda")
         assert disk.is_ceph_disk_member is False
 
@@ -387,7 +423,7 @@ class TestCephDiskDevice(object):
     @pytest.mark.usefixtures("blkid_ceph_disk_member",
                              "disable_kernel_queries",
                              "disable_lvm_queries")
-    def test_is_member_blkid(self, monkeypatch):
+    def test_is_member_blkid(self, monkeypatch, patch_bluestore_label):
         monkeypatch.setattr("ceph_volume.util.device.disk.lsblk",
                             lambda path: {'PARTLABEL': ""})
         disk = device.CephDiskDevice(device.Device("/dev/sda"))
@@ -421,7 +457,7 @@ class TestCephDiskDevice(object):
     @pytest.mark.usefixtures("lsblk_ceph_disk_member",
                              "disable_kernel_queries",
                              "disable_lvm_queries")
-    def test_is_member_lsblk(self):
+    def test_is_member_lsblk(self, patch_bluestore_label):
         disk = device.CephDiskDevice(device.Device("/dev/sda"))
 
         assert disk.is_member is True