From 5f84585a1ed2ba4e16c073e6fdbcbda36ccf29d1 Mon Sep 17 00:00:00 2001 From: Kyr Shatskyy Date: Mon, 18 Nov 2019 12:37:20 +0100 Subject: [PATCH] ceph_ansible: make code py3 compatible Signed-off-by: Kyr Shatskyy --- teuthology/task/ansible.py | 7 +--- teuthology/task/ceph_ansible.py | 44 ++++++++--------------- teuthology/test/task/test_ansible.py | 8 +++-- teuthology/test/task/test_ceph_ansible.py | 9 ++++- 4 files changed, 30 insertions(+), 38 deletions(-) diff --git a/teuthology/task/ansible.py b/teuthology/task/ansible.py index bb611696a8..6e0d61823a 100644 --- a/teuthology/task/ansible.py +++ b/teuthology/task/ansible.py @@ -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 diff --git a/teuthology/task/ceph_ansible.py b/teuthology/task/ceph_ansible.py index 4446791f64..b6af083dd5 100644 --- a/teuthology/task/ceph_ansible.py +++ b/teuthology/task/ceph_ansible.py @@ -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() diff --git a/teuthology/test/task/test_ansible.py b/teuthology/test/task/test_ansible.py index bf2bbf9ebf..a1a1f1f1c1 100644 --- a/teuthology/test/task/test_ansible.py +++ b/teuthology/test/task/test_ansible.py @@ -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 diff --git a/teuthology/test/task/test_ceph_ansible.py b/teuthology/test/task/test_ceph_ansible.py index 8745af116c..2c82f6cd08 100644 --- a/teuthology/test/task/test_ceph_ansible.py +++ b/teuthology/test/task/test_ceph_ansible.py @@ -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 -- 2.39.5