]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
ceph-volume: hide OSD keyring during creation
authorDimitri Savineau <dsavinea@redhat.com>
Thu, 12 Aug 2021 15:08:27 +0000 (11:08 -0400)
committerGuillaume Abrioux <gabrioux@redhat.com>
Thu, 12 Aug 2021 23:10:03 +0000 (01:10 +0200)
When using ceph-volume lvm create/prepare/batch then the keyring of each
OSD created is displayed in the output.
Let's replace those by some '*' chars.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
library/ceph_volume.py
tests/library/test_ceph_volume.py

index 2668cd2f0837c18463a1ddc23d9d3a88ba9f807a..76757f575d74dc1dd3e39de0b49628b408cf6df2 100644 (file)
@@ -13,6 +13,7 @@ import datetime
 import copy
 import json
 import os
+import re
 
 ANSIBLE_METADATA = {
     'metadata_version': '1.0',
@@ -607,6 +608,7 @@ def run_module():
         # Prepare or create the OSD
         rc, cmd, out, err = exec_command(
             module, prepare_or_create_osd(module, action, container_image))
+        err = re.sub('[a-zA-Z0-9+/]{38}==', '*' * 8, err)
 
     elif action == 'activate':
         if container_image:
@@ -716,11 +718,13 @@ def run_module():
                     # Batch prepare the OSD
                     rc, cmd, out, err = exec_command(
                         module, batch(module, container_image))
+                    err = re.sub('[a-zA-Z0-9+/]{38}==', '*' * 8, err)
             else:
                 # we have the refactored batch, its idempotent so lets just
                 # run it
                 rc, cmd, out, err = exec_command(
                     module, batch(module, container_image))
+                err = re.sub('[a-zA-Z0-9+/]{38}==', '*' * 8, err)
         else:
             cmd = batch_report_cmd
 
index 57fcd63dc10f0daeb4884e3dd2de65f8c4d6eb3b..9ef9a1d001a0a8e3c1a13fcf0d8c773044c444c7 100644 (file)
@@ -2,17 +2,18 @@ import sys
 import mock
 import os
 import pytest
+import ca_test_common
 sys.path.append('./library')
 import ceph_volume  # noqa: E402
 
 
 # Python 3
 try:
-    from unittest.mock import MagicMock
+    from unittest.mock import MagicMock, patch
 except ImportError:
     # Python 2
     try:
-        from mock import MagicMock
+        from mock import MagicMock, patch
     except ImportError:
         print('You need the mock library installed on python2.x to run tests')
 
@@ -402,3 +403,85 @@ class TestCephVolumeModule(object):
         result = ceph_volume.batch(
             fake_module, fake_container_image)
         assert result == expected_command_list
+
+    @patch('ansible.module_utils.basic.AnsibleModule.exit_json')
+    @patch('ansible.module_utils.basic.AnsibleModule.run_command')
+    def test_prepare_no_keyring_in_output(self, m_run_command, m_exit_json):
+        ca_test_common.set_module_args({'data': '/dev/sda',
+                                        'objectstore': 'bluestore',
+                                        'cluster': 'ceph',
+                                        'action': 'prepare'})
+        keyring = 'AQBqkhNhQDlqEhAAXKxu87L3Mh3mHY+agonKZA=='
+        m_exit_json.side_effect = ca_test_common.exit_json
+        list_rc = 0
+        list_stderr = ''
+        list_stdout = '{}'
+        prepare_rc = 0
+        prepare_stderr = """
+    Running command: /usr/bin/ceph-authtool --gen-print-key
+    Running command: /usr/bin/mount -t tmpfs tmpfs /var/lib/ceph/osd/ceph-0
+    Running command: /usr/bin/chown -h ceph:ceph /dev/test_group/data-lv1
+    Running command: /usr/bin/chown -R ceph:ceph /dev/dm-0
+    Running command: /usr/bin/ln -s /dev/test_group/data-lv1 /var/lib/ceph/osd/ceph-1/block
+     stderr: got monmap epoch 1
+    Running command: /usr/bin/ceph-authtool /var/lib/ceph/osd/ceph-1/keyring --create-keyring --name osd.1 --add-key {}
+     stdout: creating /var/lib/ceph/osd/ceph-1/keyring
+    added entity osd.1 auth(key={})
+""".format(keyring, keyring)
+        prepare_stdout = ''
+        m_run_command.side_effect = [
+            (list_rc, list_stdout, list_stderr),
+            (prepare_rc, prepare_stdout, prepare_stderr)
+        ]
+
+        with pytest.raises(ca_test_common.AnsibleExitJson) as result:
+            ceph_volume.main()
+
+        result = result.value.args[0]
+        assert result['changed']
+        assert result['cmd'] == ['ceph-volume', '--cluster', 'ceph', 'lvm', 'prepare', '--bluestore', '--data', '/dev/sda']
+        assert result['rc'] == 0
+        assert keyring not in result['stderr']
+        assert '*' * 8 in result['stderr']
+        assert not result['stdout']
+
+    @patch('ansible.module_utils.basic.AnsibleModule.exit_json')
+    @patch('ansible.module_utils.basic.AnsibleModule.run_command')
+    def test_batch_no_keyring_in_output(self, m_run_command, m_exit_json):
+        ca_test_common.set_module_args({'batch_devices': ['/dev/sda'],
+                                        'objectstore': 'bluestore',
+                                        'cluster': 'ceph',
+                                        'action': 'batch'})
+        keyring = 'AQBUixJhnDF1NRAAhl2xrnmOHCCI/T+W6FjqmA=='
+        m_exit_json.side_effect = ca_test_common.exit_json
+        report_rc = 0
+        report_stderr = ''
+        report_stdout = '[{"data": "/dev/sda", "data_size": "50.00 GB", "encryption": "None"}]'
+        batch_rc = 0
+        batch_stderr = """
+    Running command: /usr/bin/ceph-authtool --gen-print-key
+    Running command: /usr/bin/mount -t tmpfs tmpfs /var/lib/ceph/osd/ceph-0
+    Running command: /usr/bin/chown -h ceph:ceph /dev/ceph-863337c4-bef9-4b96-aaac-27cde8c42b8f/osd-block-b1d1036f-0d6e-493b-9d1a-6f6b96df64b1
+    Running command: /usr/bin/chown -R ceph:ceph /dev/mapper/ceph--863337c4--bef9--4b96--aaac--27cde8c42b8f-osd--block--b1d1036f--0d6e--493b--9d1a--6f6b96df64b1
+    Running command: /usr/bin/ln -s /dev/ceph-863337c4-bef9-4b96-aaac-27cde8c42b8f/osd-block-b1d1036f-0d6e-493b-9d1a-6f6b96df64b1 /var/lib/ceph/osd/ceph-0/block
+     stderr: got monmap epoch 1
+    Running command: /usr/bin/ceph-authtool /var/lib/ceph/osd/ceph-0/keyring --create-keyring --name osd.0 --add-key {}
+     stdout: creating /var/lib/ceph/osd/ceph-0/keyring
+    added entity osd.0 auth(key={})
+""".format(keyring, keyring)
+        batch_stdout = ''
+        m_run_command.side_effect = [
+            (report_rc, report_stdout, report_stderr),
+            (batch_rc, batch_stdout, batch_stderr)
+        ]
+
+        with pytest.raises(ca_test_common.AnsibleExitJson) as result:
+            ceph_volume.main()
+
+        result = result.value.args[0]
+        assert result['changed']
+        assert result['cmd'] == ['ceph-volume', '--cluster', 'ceph', 'lvm', 'batch', '--bluestore', '--yes', '/dev/sda']
+        assert result['rc'] == 0
+        assert keyring not in result['stderr']
+        assert '*' * 8 in result['stderr']
+        assert not result['stdout']