]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr/ssh: add TemporaryDirectory impl for py2 compat
authorSage Weil <sage@redhat.com>
Sat, 23 Nov 2019 18:14:13 +0000 (12:14 -0600)
committerSage Weil <sage@redhat.com>
Sun, 24 Nov 2019 18:15:49 +0000 (12:15 -0600)
This didn't get copied over in 4bfcb5db6bdb833496aa840d6aac603c7c405277

Signed-off-by: Sage Weil <sage@redhat.com>
src/pybind/mgr/ssh/module.py

index 8be5c2cb2fb3e87b4e84fb3636a4c3d1e850035d..c04742e62631790ab38f268e47d5e57fa621389c 100644 (file)
@@ -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([