]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
library: refact ceph_dashboard_user
authorGuillaume Abrioux <gabrioux@redhat.com>
Wed, 6 Jan 2021 13:07:38 +0000 (14:07 +0100)
committerDimitri Savineau <savineau.dimitri@gmail.com>
Mon, 18 Jan 2021 19:46:53 +0000 (14:46 -0500)
refact this module due to recent changes in ceph pacific.
The password must be passed with `-i` option.

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
(cherry picked from commit 2725db3e9f42472fdf63c81e5b0236bc6449cf4b)

library/ceph_dashboard_user.py
tests/library/test_ceph_dashboard_user.py

index db4a267402345db3337b3d519d31cf857024b7df..95b486ddb5263c00d289c17f96ddde3f8e6f7bcb 100644 (file)
@@ -107,20 +107,23 @@ import stat  # noqa E402
 import time  # noqa E402
 
 
-def container_exec(binary, container_image):
+def container_exec(binary, container_image, interactive=False):
     '''
     Build the docker CLI to run a command inside a container
     '''
 
     container_binary = os.getenv('CEPH_CONTAINER_BINARY')
-    command_exec = [container_binary,
-                    'run',
-                    '--rm',
-                    '--net=host',
-                    '-v', '/etc/ceph:/etc/ceph:z',
-                    '-v', '/var/lib/ceph/:/var/lib/ceph/:z',
-                    '-v', '/var/log/ceph/:/var/log/ceph/:z',
-                    '--entrypoint=' + binary, container_image]
+    command_exec = [container_binary, 'run']
+
+    if interactive:
+        command_exec.extend(['--interactive'])
+
+    command_exec.extend(['--rm',
+                         '--net=host',
+                         '-v', '/etc/ceph:/etc/ceph:z',
+                         '-v', '/var/lib/ceph/:/var/lib/ceph/:z',
+                         '-v', '/var/log/ceph/:/var/log/ceph/:z',
+                         '--entrypoint=' + binary, container_image])
     return command_exec
 
 
@@ -137,24 +140,24 @@ def is_containerized():
     return container_image
 
 
-def pre_generate_ceph_cmd(container_image=None):
+def pre_generate_ceph_cmd(container_image=None, interactive=False):
     '''
     Generate ceph prefix comaand
     '''
     if container_image:
-        cmd = container_exec('ceph', container_image)
+        cmd = container_exec('ceph', container_image, interactive=interactive)
     else:
         cmd = ['ceph']
 
     return cmd
 
 
-def generate_ceph_cmd(cluster, args, container_image=None):
+def generate_ceph_cmd(cluster, args, container_image=None, interactive=False):
     '''
     Generate 'ceph' command line to execute
     '''
 
-    cmd = pre_generate_ceph_cmd(container_image=container_image)
+    cmd = pre_generate_ceph_cmd(container_image=container_image, interactive=interactive)
 
     base_cmd = [
         '--cluster',
@@ -167,12 +170,12 @@ def generate_ceph_cmd(cluster, args, container_image=None):
     return cmd
 
 
-def exec_commands(module, cmd):
+def exec_commands(module, cmd, stdin=None):
     '''
     Execute command(s)
     '''
 
-    rc, out, err = module.run_command(cmd)
+    rc, out, err = module.run_command(cmd, data=stdin)
 
     return rc, cmd, out, err
 
@@ -184,11 +187,10 @@ def create_user(module, container_image=None):
 
     cluster = module.params.get('cluster')
     name = module.params.get('name')
-    password = module.params.get('password')
 
-    args = ['ac-user-create', name, password]
+    args = ['ac-user-create', '-i', '-',  name]
 
-    cmd = generate_ceph_cmd(cluster=cluster, args=args, container_image=container_image)
+    cmd = generate_ceph_cmd(cluster=cluster, args=args, container_image=container_image, interactive=True)
 
     return cmd
 
@@ -218,11 +220,10 @@ def set_password(module, container_image=None):
 
     cluster = module.params.get('cluster')
     name = module.params.get('name')
-    password = module.params.get('password')
 
-    args = ['ac-user-set-password', name, password]
+    args = ['ac-user-set-password', '-i', '-', name]
 
-    cmd = generate_ceph_cmd(cluster=cluster, args=args, container_image=container_image)
+    cmd = generate_ceph_cmd(cluster=cluster, args=args, container_image=container_image, interactive=True)
 
     return cmd
 
@@ -296,6 +297,7 @@ def run_module():
     name = module.params.get('name')
     state = module.params.get('state')
     roles = module.params.get('roles')
+    password = module.params.get('password')
 
     if module.check_mode:
         module.exit_json(
@@ -323,9 +325,9 @@ def run_module():
             if user['roles'] != roles:
                 rc, cmd, out, err = exec_commands(module, set_roles(module, container_image=container_image))
                 changed = True
-            rc, cmd, out, err = exec_commands(module, set_password(module, container_image=container_image))
+            rc, cmd, out, err = exec_commands(module, set_password(module, container_image=container_image), stdin=password)
         else:
-            rc, cmd, out, err = exec_commands(module, create_user(module, container_image=container_image))
+            rc, cmd, out, err = exec_commands(module, create_user(module, container_image=container_image), stdin=password)
             rc, cmd, out, err = exec_commands(module, set_roles(module, container_image=container_image))
             changed = True
 
index 50f7704444c054235c8d4b070f784234e7806ff1..b8d15101eeeac7e133a22bf9f45f3704f04724c9 100644 (file)
@@ -1,39 +1,42 @@
 import os
-import sys
 from mock.mock import patch, MagicMock
 import pytest
-sys.path.append('./library')
-import ceph_dashboard_user  # noqa: E402
+import ceph_dashboard_user
 
-fake_binary = 'ceph'
-fake_cluster = 'ceph'
 fake_container_binary = 'podman'
 fake_container_image = 'docker.io/ceph/daemon:latest'
-fake_container_cmd = [
-    fake_container_binary,
-    'run',
-    '--rm',
-    '--net=host',
-    '-v', '/etc/ceph:/etc/ceph:z',
-    '-v', '/var/lib/ceph/:/var/lib/ceph/:z',
-    '-v', '/var/log/ceph/:/var/log/ceph/:z',
-    '--entrypoint=' + fake_binary,
-    fake_container_image
-]
-fake_user = 'foo'
-fake_password = 'bar'
-fake_roles = ['read-only', 'block-manager']
-fake_params = {'cluster': fake_cluster,
-               'name': fake_user,
-               'password': fake_password,
-               'roles': fake_roles}
 
 
 class TestCephDashboardUserModule(object):
+    def setup_method(self):
+        self.fake_params = []
+        self.fake_binary = 'ceph'
+        self.fake_cluster = 'ceph'
+        self.fake_name = 'foo'
+        self.fake_user = 'foo'
+        self.fake_password = 'bar'
+        self.fake_module = MagicMock()
+        self.fake_module.params = self.fake_params
+        self.fake_roles = ['read-only', 'block-manager']
+        self.fake_params = {'cluster': self.fake_cluster,
+                            'name': self.fake_user,
+                            'password': self.fake_password,
+                            'roles': self.fake_roles}
 
     @patch.dict(os.environ, {'CEPH_CONTAINER_BINARY': fake_container_binary})
     def test_container_exec(self):
-        cmd = ceph_dashboard_user.container_exec(fake_binary, fake_container_image)
+        fake_container_cmd = [
+            fake_container_binary,
+            'run',
+            '--rm',
+            '--net=host',
+            '-v', '/etc/ceph:/etc/ceph:z',
+            '-v', '/var/lib/ceph/:/var/lib/ceph/:z',
+            '-v', '/var/log/ceph/:/var/log/ceph/:z',
+            '--entrypoint=' + self.fake_binary,
+            fake_container_image
+        ]
+        cmd = ceph_dashboard_user.container_exec(self.fake_binary, fake_container_image)
         assert cmd == fake_container_cmd
 
     def test_not_is_containerized(self):
@@ -47,9 +50,19 @@ class TestCephDashboardUserModule(object):
     @patch.dict(os.environ, {'CEPH_CONTAINER_BINARY': fake_container_binary})
     def test_pre_generate_ceph_cmd(self, image):
         if image:
-            expected_cmd = fake_container_cmd
+            expected_cmd = [
+                fake_container_binary,
+                'run',
+                '--rm',
+                '--net=host',
+                '-v', '/etc/ceph:/etc/ceph:z',
+                '-v', '/var/lib/ceph/:/var/lib/ceph/:z',
+                '-v', '/var/log/ceph/:/var/log/ceph/:z',
+                '--entrypoint=' + self.fake_binary,
+                image
+            ]
         else:
-            expected_cmd = [fake_binary]
+            expected_cmd = [self.fake_binary]
 
         assert ceph_dashboard_user.pre_generate_ceph_cmd(image) == expected_cmd
 
@@ -57,77 +70,128 @@ class TestCephDashboardUserModule(object):
     @patch.dict(os.environ, {'CEPH_CONTAINER_BINARY': fake_container_binary})
     def test_generate_ceph_cmd(self, image):
         if image:
-            expected_cmd = fake_container_cmd
+            expected_cmd = [
+                fake_container_binary,
+                'run',
+                '--rm',
+                '--net=host',
+                '-v', '/etc/ceph:/etc/ceph:z',
+                '-v', '/var/lib/ceph/:/var/lib/ceph/:z',
+                '-v', '/var/log/ceph/:/var/log/ceph/:z',
+                '--entrypoint=' + self.fake_binary,
+                image
+            ]
         else:
-            expected_cmd = [fake_binary]
+            expected_cmd = [self.fake_binary]
 
         expected_cmd.extend([
             '--cluster',
-            fake_cluster,
+            self.fake_cluster,
             'dashboard'
         ])
-        assert ceph_dashboard_user.generate_ceph_cmd(fake_cluster, [], image) == expected_cmd
+        assert ceph_dashboard_user.generate_ceph_cmd(self.fake_cluster, [], image) == expected_cmd
 
     def test_create_user(self):
-        fake_module = MagicMock()
-        fake_module.params = fake_params
+        self.fake_module.params = self.fake_params
+        expected_cmd = [
+            self.fake_binary,
+            '--cluster', self.fake_cluster,
+            'dashboard', 'ac-user-create',
+            '-i', '-',
+            self.fake_user
+        ]
+
+        assert ceph_dashboard_user.create_user(self.fake_module) == expected_cmd
+
+    @patch.dict(os.environ, {'CEPH_CONTAINER_BINARY': fake_container_binary})
+    @patch.dict(os.environ, {'CEPH_CONTAINER_IMAGE': fake_container_image})
+    def test_create_user_container(self):
+        self.fake_module.params = self.fake_params
         expected_cmd = [
-            fake_binary,
-            '--cluster', fake_cluster,
+            fake_container_binary,
+            'run',
+            '--interactive',
+            '--rm',
+            '--net=host',
+            '-v', '/etc/ceph:/etc/ceph:z',
+            '-v', '/var/lib/ceph/:/var/lib/ceph/:z',
+            '-v', '/var/log/ceph/:/var/log/ceph/:z',
+            '--entrypoint=' + self.fake_binary,
+            fake_container_image,
+            '--cluster', self.fake_cluster,
             'dashboard', 'ac-user-create',
-            fake_user,
-            fake_password
+            '-i', '-',
+            self.fake_user
         ]
 
-        assert ceph_dashboard_user.create_user(fake_module) == expected_cmd
+        assert ceph_dashboard_user.create_user(self.fake_module, container_image=fake_container_image) == expected_cmd
 
     def test_set_roles(self):
-        fake_module = MagicMock()
-        fake_module.params = fake_params
+        self.fake_module.params = self.fake_params
         expected_cmd = [
-            fake_binary,
-            '--cluster', fake_cluster,
+            self.fake_binary,
+            '--cluster', self.fake_cluster,
             'dashboard', 'ac-user-set-roles',
-            fake_user
+            self.fake_user
         ]
-        expected_cmd.extend(fake_roles)
+        expected_cmd.extend(self.fake_roles)
 
-        assert ceph_dashboard_user.set_roles(fake_module) == expected_cmd
+        assert ceph_dashboard_user.set_roles(self.fake_module) == expected_cmd
 
     def test_set_password(self):
-        fake_module = MagicMock()
-        fake_module.params = fake_params
+        self.fake_module.params = self.fake_params
+        expected_cmd = [
+            self.fake_binary,
+            '--cluster', self.fake_cluster,
+            'dashboard', 'ac-user-set-password',
+            '-i', '-',
+            self.fake_user
+        ]
+
+        assert ceph_dashboard_user.set_password(self.fake_module) == expected_cmd
+
+    @patch.dict(os.environ, {'CEPH_CONTAINER_BINARY': fake_container_binary})
+    @patch.dict(os.environ, {'CEPH_CONTAINER_IMAGE': fake_container_image})
+    def test_set_password_container(self):
+        self.fake_module.params = self.fake_params
         expected_cmd = [
-            fake_binary,
-            '--cluster', fake_cluster,
+            fake_container_binary,
+            'run',
+            '--interactive',
+            '--rm',
+            '--net=host',
+            '-v', '/etc/ceph:/etc/ceph:z',
+            '-v', '/var/lib/ceph/:/var/lib/ceph/:z',
+            '-v', '/var/log/ceph/:/var/log/ceph/:z',
+            '--entrypoint=' + self.fake_binary,
+            fake_container_image,
+            '--cluster', self.fake_cluster,
             'dashboard', 'ac-user-set-password',
-            fake_user,
-            fake_password
+            '-i', '-',
+            self.fake_user
         ]
 
-        assert ceph_dashboard_user.set_password(fake_module) == expected_cmd
+        assert ceph_dashboard_user.set_password(self.fake_module, container_image=fake_container_image) == expected_cmd
 
     def test_get_user(self):
-        fake_module = MagicMock()
-        fake_module.params = fake_params
+        self.fake_module.params = self.fake_params
         expected_cmd = [
-            fake_binary,
-            '--cluster', fake_cluster,
+            self.fake_binary,
+            '--cluster', self.fake_cluster,
             'dashboard', 'ac-user-show',
-            fake_user,
+            self.fake_user,
             '--format=json'
         ]
 
-        assert ceph_dashboard_user.get_user(fake_module) == expected_cmd
+        assert ceph_dashboard_user.get_user(self.fake_module) == expected_cmd
 
     def test_remove_user(self):
-        fake_module = MagicMock()
-        fake_module.params = fake_params
+        self.fake_module.params = self.fake_params
         expected_cmd = [
-            fake_binary,
-            '--cluster', fake_cluster,
+            self.fake_binary,
+            '--cluster', self.fake_cluster,
             'dashboard', 'ac-user-delete',
-            fake_user
+            self.fake_user
         ]
 
-        assert ceph_dashboard_user.remove_user(fake_module) == expected_cmd
+        assert ceph_dashboard_user.remove_user(self.fake_module) == expected_cmd