From 73511c489a5134e5342a1678de023706c8303535 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sat, 23 Nov 2019 12:14:13 -0600 Subject: [PATCH] mgr/ssh: add TemporaryDirectory impl for py2 compat This didn't get copied over in 4bfcb5db6bdb833496aa840d6aac603c7c405277 Signed-off-by: Sage Weil --- src/pybind/mgr/ssh/module.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/pybind/mgr/ssh/module.py b/src/pybind/mgr/ssh/module.py index 8be5c2cb2fb3e..c04742e626317 100644 --- a/src/pybind/mgr/ssh/module.py +++ b/src/pybind/mgr/ssh/module.py @@ -9,6 +9,7 @@ import os import random import tempfile import multiprocessing.pool +import shutil import subprocess from ceph.deployment import inventory @@ -37,6 +38,27 @@ DEFAULT_SSH_CONFIG = ('Host *\n' 'StrictHostKeyChecking no\n' 'UserKnownHostsFile /dev/null\n') +# for py2 compat +try: + from tempfile import TemporaryDirectory # py3 +except ImportError: + # define a minimal (but sufficient) equivalent for <= py 3.2 + class TemporaryDirectory(object): # type: ignore + def __init__(self): + self.name = tempfile.mkdtemp() + + def __enter__(self): + if not self.name: + self.name = tempfile.mkdtemp() + return self.name + + def cleanup(self): + shutil.rmtree(self.name) + + def __exit__(self, exc_type, exc_value, traceback): + self.cleanup() + + # high-level TODO: # - bring over some of the protections from ceph-deploy that guard against # multiple bootstrapping / initialization @@ -355,7 +377,7 @@ class SSHOrchestrator(MgrModule, orchestrator.OrchestratorClientMixin): def _generate_key(self): if not self.ssh_pub or not self.ssh_key: self.log.info('Generating ssh key...') - tmp_dir = tempfile.TemporaryDirectory() + tmp_dir = TemporaryDirectory() path = tmp_dir.name + '/key' try: subprocess.call([ -- 2.39.5