]> git.apps.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
ceph_ec_profile: support new parameters
authorGuillaume Abrioux <gabrioux@redhat.com>
Mon, 14 Dec 2020 10:02:08 +0000 (11:02 +0100)
committerGuillaume Abrioux <gabrioux@redhat.com>
Wed, 3 Feb 2021 07:32:39 +0000 (08:32 +0100)
This commit adds the support of `crush_root` and `crush_device_class`
parameter in the `ceph_ec_profile` module.

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
library/ceph_ec_profile.py
tests/library/test_ceph_ec_profile.py

index a9e84099b7ce7db75c3cd7b981a4383e4258aed9..47438cc36abf7892950cd1dba73d6f24e50d8a7b 100644 (file)
@@ -121,7 +121,7 @@ def get_profile(module, name, cluster='ceph', container_image=None):
     return cmd
 
 
-def create_profile(module, name, k, m, stripe_unit, cluster='ceph', force=False, container_image=None):
+def create_profile(module, name, k, m, stripe_unit, crush_root, crush_device_class, cluster='ceph', force=False, container_image=None):
     '''
     Create a profile
     '''
@@ -129,6 +129,10 @@ def create_profile(module, name, k, m, stripe_unit, cluster='ceph', force=False,
     args = ['set', name, 'k={}'.format(k), 'm={}'.format(m)]
     if stripe_unit:
         args.append('stripe_unit={}'.format(stripe_unit))
+    if crush_root:
+        args.append('crush-root={}'.format(crush_root))
+    if crush_device_class:
+        args.append('crush-device-class={}'.format(crush_device_class))
     if force:
         args.append('--force')
 
@@ -162,6 +166,8 @@ def run_module():
         state=dict(type='str', required=False,
                    choices=['present', 'absent'], default='present'),
         stripe_unit=dict(type='str', required=False),
+        crush_root=dict(type='str', required=False),
+        crush_device_class=dict(type='str', required=False),
         k=dict(type='str', required=False),
         m=dict(type='str', required=False),
     )
@@ -177,6 +183,8 @@ def run_module():
     cluster = module.params.get('cluster')
     state = module.params.get('state')
     stripe_unit = module.params.get('stripe_unit')
+    crush_root = module.params.get('crush_root')
+    crush_device_class = module.params.get('crush_device_class')
     k = module.params.get('k')
     m = module.params.get('m')
 
@@ -204,13 +212,17 @@ def run_module():
             current_profile = json.loads(out)
             if current_profile['k'] != k or \
                current_profile['m'] != m or \
-               current_profile.get('stripe_unit', stripe_unit) != stripe_unit:
+               current_profile.get('stripe_unit', stripe_unit) != stripe_unit or \
+               current_profile.get('crush_root', crush_root) != crush_root or \
+               current_profile.get('crush_device_class', crush_device_class) != crush_device_class:
                 rc, cmd, out, err = exec_command(module,
                                                  create_profile(module,
                                                                 name,
                                                                 k,
                                                                 m,
                                                                 stripe_unit,
+                                                                crush_root,
+                                                                crush_device_class,
                                                                 cluster,
                                                                 force=True, container_image=container_image))
                 changed = True
@@ -221,6 +233,8 @@ def run_module():
                                                                     k,
                                                                     m,
                                                                     stripe_unit,
+                                                                    crush_root,
+                                                                    crush_device_class,
                                                                     cluster,
                                                                     container_image=container_image))
             if rc == 0:
index 00c6e13170e64460aa3e7594fd35d9a9f26fb186..995c50d2b66a29d79f60266fc21dfeae3eeb8b0a 100644 (file)
@@ -28,11 +28,23 @@ class TestCephEcProfile(object):
 
         assert ceph_ec_profile.get_profile(self.fake_module, self.fake_name) == expected_cmd
 
-    @pytest.mark.parametrize("stripe_unit,force", [(False, False),
-                                                   (32, True),
-                                                   (False, True),
-                                                   (32, False)])
-    def test_create_profile(self, stripe_unit, force):
+    @pytest.mark.parametrize("stripe_unit,crush_root,crush_device_class,force", [(8192, None, None, True),
+                                                                                 (8192, None, None, False),
+                                                                                 (8192, None, 'hdd', True),
+                                                                                 (8192, None, 'hdd', False),
+                                                                                 (8192, 'hdd', None, True),
+                                                                                 (8192, 'hdd', None, False),
+                                                                                 (8192, 'hdd', 'hdd', True),
+                                                                                 (8192, 'hdd', 'hdd', False),
+                                                                                 (None, None, None, True),
+                                                                                 (None, None, None, False),
+                                                                                 (None, None, 'hdd', True),
+                                                                                 (None, None, 'hdd', False),
+                                                                                 (None, 'hdd', None, True),
+                                                                                 (None, 'hdd', None, False),
+                                                                                 (None, 'hdd', 'hdd', True),
+                                                                                 (None, 'hdd', 'hdd', False)])
+    def test_create_profile(self, stripe_unit, crush_root, crush_device_class, force):
         expected_cmd = [
             self.fake_binary,
             '-n', 'client.admin',
@@ -44,6 +56,10 @@ class TestCephEcProfile(object):
         ]
         if stripe_unit:
             expected_cmd.append('stripe_unit={}'.format(stripe_unit))
+        if crush_root:
+            expected_cmd.append('crush-root={}'.format(crush_root))
+        if crush_device_class:
+            expected_cmd.append('crush-device-class={}'.format(crush_device_class))
         if force:
             expected_cmd.append('--force')
 
@@ -52,6 +68,8 @@ class TestCephEcProfile(object):
                                               self.fake_k,
                                               self.fake_m,
                                               stripe_unit,
+                                              crush_root,
+                                              crush_device_class,
                                               self.fake_cluster,
                                               force) == expected_cmd