]> git.apps.os.sepia.ceph.com Git - teuthology.git/commitdiff
ceph_ansible: make code py3 compatible
authorKyr Shatskyy <kyrylo.shatskyy@gmail.com>
Mon, 18 Nov 2019 11:37:20 +0000 (12:37 +0100)
committerKyr Shatskyy <kyrylo.shatskyy@suse.com>
Mon, 18 Nov 2019 17:44:37 +0000 (18:44 +0100)
Signed-off-by: Kyr Shatskyy <kyrylo.shatskyy@suse.com>
teuthology/task/ansible.py
teuthology/task/ceph_ansible.py
teuthology/test/task/test_ansible.py
teuthology/test/task/test_ceph_ansible.py

index bb611696a8d34dbfb70499fb1fcc6ea2e688eca6..6e0d61823a368141e9ad6bfbe01b18e85d38002e 100644 (file)
@@ -6,7 +6,6 @@ import pexpect
 import yaml
 import shutil
 
-from cStringIO import StringIO
 from tempfile import mkdtemp, NamedTemporaryFile
 
 from teuthology.config import config as teuth_config
@@ -249,16 +248,12 @@ class Ansible(Task):
         Generate a playbook file to use. This should not be called if we're
         using an existing file.
         """
-        pb_buffer = StringIO()
-        pb_buffer.write('---\n')
-        yaml.safe_dump(self.playbook, pb_buffer)
-        pb_buffer.seek(0)
         playbook_file = NamedTemporaryFile(
             prefix="teuth_ansible_playbook_",
             dir=self.repo_path,
             delete=False,
         )
-        playbook_file.write(pb_buffer.read())
+        yaml.safe_dump(self.playbook, playbook_file, explicit_start=True)
         playbook_file.flush()
         self.playbook_file = playbook_file
         self.generated_playbook = True
index 4446791f645ff962c93193015d71ca54627fa0b4..b6af083dd5cb78545e1762559d799dadb8fadb57 100644 (file)
@@ -4,8 +4,6 @@ import re
 import logging
 import yaml
 
-from cStringIO import StringIO
-
 from teuthology.task import Task
 from tempfile import NamedTemporaryFile
 from teuthology.config import config as teuth_config
@@ -85,15 +83,11 @@ class CephAnsible(Task):
         # generate playbook file if it exists in config
         self.playbook_file = None
         if self.playbook is not None:
-            pb_buffer = StringIO()
-            pb_buffer.write('---\n')
-            yaml.safe_dump(self.playbook, pb_buffer)
-            pb_buffer.seek(0)
             playbook_file = NamedTemporaryFile(
                prefix="ceph_ansible_playbook_", dir='/tmp/',
                delete=False,
             )
-            playbook_file.write(pb_buffer.read())
+            yaml.safe_dump(self.playbook, playbook_file, explicit_start=True)
             playbook_file.flush()
             self.playbook_file = playbook_file.name
         # everything from vars in config go into group_vars/all file
@@ -148,9 +142,9 @@ class CephAnsible(Task):
                 elif hostname not in hosts_dict[group]:
                     hosts_dict[group][hostname] = host_vars
 
-        hosts_stringio = StringIO()
+        hosts_content = ''
         for group in sorted(hosts_dict.keys()):
-            hosts_stringio.write('[%s]\n' % group)
+            hosts_content += '[%s]\n' % group
             for hostname in sorted(hosts_dict[group].keys()):
                 vars = hosts_dict[group][hostname]
                 if vars:
@@ -165,11 +159,10 @@ class CephAnsible(Task):
                     )
                 else:
                     host_line = hostname
-                hosts_stringio.write('%s\n' % host_line)
-            hosts_stringio.write('\n')
-        hosts_stringio.seek(0)
+                hosts_content += '%s\n' % host_line
+            hosts_content += '\n'
         self.inventory = self._write_hosts_file(prefix='teuth_ansible_hosts_',
-                                                content=hosts_stringio.read().strip())
+                                                content=hosts_content.strip())
         self.generated_inventory = True
 
     def begin(self):
@@ -180,7 +173,7 @@ class CephAnsible(Task):
         """
         Actually write the hosts file
         """
-        hosts_file = NamedTemporaryFile(prefix=prefix,
+        hosts_file = NamedTemporaryFile(prefix=prefix, mode='w+',
                                         delete=False)
         hosts_file.write(content)
         hosts_file.flush()
@@ -302,15 +295,10 @@ class CephAnsible(Task):
             log.info("Waiting for Ceph health to reach HEALTH_OK \
                         or HEALTH WARN")
             while proceed():
-                out = StringIO()
-                remote.run(
-                    args=['sudo', 'ceph', '--cluster', self.cluster_name,
-                          'health'], 
-                    stdout=out,
-                )
-                out = out.getvalue().split(None, 1)[0]
-                log.info("cluster in state: %s", out)
-                if out in ('HEALTH_OK', 'HEALTH_WARN'):
+                out = remote.sh('sudo ceph --cluster %s health' % self.cluster_name)
+                state = out.split(None, 1)[0]
+                log.info("cluster in state: %s", state)
+                if state in ('HEALTH_OK', 'HEALTH_WARN'):
                     break
 
     def get_host_vars(self, remote):
@@ -339,10 +327,9 @@ class CephAnsible(Task):
             '.'
         ])
         self._copy_and_print_config()
-        out = StringIO()
         str_args = ' '.join(args)
-        ceph_installer.run(
-            args=[
+        out = ceph_installer.sh(
+            [
                 'cd',
                 'ceph-ansible',
                 run.Raw(';'),
@@ -350,10 +337,9 @@ class CephAnsible(Task):
             ],
             timeout=4200,
             check_status=False,
-            stdout=out
         )
-        log.info(out.getvalue())
-        if re.search(r'all hosts have already failed', out.getvalue()):
+        log.info(out)
+        if re.search(r'all hosts have already failed', out):
             log.error("Failed during ceph-ansible execution")
             raise CephAnsibleError("Failed during ceph-ansible execution")
         self._create_rbd_pool()
index bf2bbf9ebf1a49b8e5fbdb59191770d17c554b4e..a1a1f1f1c1507dbf66cc80e36787d2834ef01e57 100644 (file)
@@ -4,7 +4,11 @@ import yaml
 
 from mock import patch, DEFAULT, Mock
 from pytest import raises, mark
-from StringIO import StringIO
+from teuthology.util.compat import PY3
+if PY3:
+    from io import StringIO as StringIO
+else:
+    from io import BytesIO as StringIO
 
 from teuthology.config import config, FakeNamespace
 from teuthology.exceptions import CommandFailedError
@@ -262,7 +266,7 @@ class TestAnsibleTask(TestTask):
         self.mocks['mkdtemp'].return_value = inventory_dir
         m_file = self.mocks['file']
         fake_files = [hosts_file_obj]
-        # Create StringIOs for each group_vars file
+        # Create StringIO object for each group_vars file
         if group_vars:
             fake_files += [StringIO() for i in sorted(group_vars)]
         m_file.side_effect = fake_files
index 8745af116c43ee87810d98ac02d9a25fde35b522..2c82f6cd08fbc35abcfada35ba757444be123845 100644 (file)
@@ -1,6 +1,10 @@
 from mock import patch, MagicMock
 from pytest import skip
-from StringIO import StringIO
+from teuthology.util.compat import PY3
+if PY3:
+    from io import StringIO as StringIO
+else:
+    from io import BytesIO as StringIO
 
 from teuthology.config import FakeNamespace
 from teuthology.orchestra.cluster import Cluster
@@ -91,6 +95,7 @@ class TestCephAnsibleTask(TestTask):
             m_NTF.return_value = hosts_file_obj
             task.generate_hosts_file()
             m_NTF.assert_called_once_with(prefix="teuth_ansible_hosts_",
+                                          mode='w+',
                                           delete=False)
         assert task.generated_inventory is True
         assert task.inventory == hosts_file_path
@@ -123,6 +128,7 @@ class TestCephAnsibleTask(TestTask):
             m_NTF.return_value = hosts_file_obj
             task.generate_hosts_file()
             m_NTF.assert_called_once_with(prefix="teuth_ansible_hosts_",
+                                          mode='w+',
                                           delete=False)
         assert task.generated_inventory is True
         assert task.inventory == hosts_file_path
@@ -153,6 +159,7 @@ class TestCephAnsibleTask(TestTask):
             m_NTF.return_value = hosts_file_obj
             task.generate_hosts_file()
             m_NTF.assert_called_once_with(prefix="teuth_ansible_hosts_",
+                                          mode='w+',
                                           delete=False)
         assert task.generated_inventory is True
         assert task.inventory == hosts_file_path