From 8199b6f26da752734be834b809e0a5bc8213a9be Mon Sep 17 00:00:00 2001
From: Melissa
Date: Tue, 20 Jul 2021 22:43:38 -0400
Subject: [PATCH] mgr/cephadm: remove remotes.py, replace old
_write_remote_file in serve.py with write_remote_file in ssh.py
remove remotes.py because it is specific to execnet/remoto.
_write_remote_file in ssh.py now fulfills the function of write_file in remotes.py and the old _write_remote_file in serve.py
Fixes: https://tracker.ceph.com/issues/44676
Signed-off-by: Melissa Li
---
src/pybind/mgr/cephadm/module.py | 1 -
src/pybind/mgr/cephadm/remotes.py | 50 -------------------------------
src/pybind/mgr/cephadm/serve.py | 32 ++------------------
3 files changed, 3 insertions(+), 80 deletions(-)
delete mode 100644 src/pybind/mgr/cephadm/remotes.py
diff --git a/src/pybind/mgr/cephadm/module.py b/src/pybind/mgr/cephadm/module.py
index 43b1ee050e98f..87a76debfabde 100644
--- a/src/pybind/mgr/cephadm/module.py
+++ b/src/pybind/mgr/cephadm/module.py
@@ -41,7 +41,6 @@ from orchestrator import OrchestratorError, OrchestratorValidationError, HostSpe
from orchestrator._interface import GenericSpec
from orchestrator._interface import daemon_type_to_service
-from . import remotes
from . import utils
from . import ssh
from .migrations import Migrations
diff --git a/src/pybind/mgr/cephadm/remotes.py b/src/pybind/mgr/cephadm/remotes.py
deleted file mode 100644
index e1ecf2dcbe93b..0000000000000
--- a/src/pybind/mgr/cephadm/remotes.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# ceph-deploy ftw
-import os
-try:
- from typing import Optional
-except ImportError:
- pass
-
-PYTHONS = ['python3', 'python2', 'python']
-PATH = [
- '/usr/bin',
- '/usr/local/bin',
- '/bin',
- '/usr/sbin',
- '/usr/local/sbin',
- '/sbin',
-]
-
-
-def choose_python():
- # type: () -> Optional[str]
- for e in PYTHONS:
- for b in PATH:
- p = os.path.join(b, e)
- if os.path.exists(p):
- return p
- return None
-
-
-def write_file(path: str, content: bytes, mode: int, uid: int, gid: int,
- mkdir_p: bool = True) -> Optional[str]:
- try:
- if mkdir_p:
- dirname = os.path.dirname(path)
- if not os.path.exists(dirname):
- os.makedirs(dirname)
- tmp_path = path + '.new'
- with open(tmp_path, 'wb') as f:
- os.fchown(f.fileno(), uid, gid)
- os.fchmod(f.fileno(), mode)
- f.write(content)
- os.fsync(f.fileno())
- os.rename(tmp_path, path)
- except Exception as e:
- return str(e)
- return None
-
-
-if __name__ == '__channelexec__':
- for item in channel: # type: ignore # noqa: F821
- channel.send(eval(item)) # type: ignore # noqa: F821
diff --git a/src/pybind/mgr/cephadm/serve.py b/src/pybind/mgr/cephadm/serve.py
index 071dd4cbef3c2..f09e8a033a683 100644
--- a/src/pybind/mgr/cephadm/serve.py
+++ b/src/pybind/mgr/cephadm/serve.py
@@ -5,9 +5,6 @@ import uuid
from collections import defaultdict
from contextlib import contextmanager
from typing import TYPE_CHECKING, Optional, List, cast, Dict, Any, Union, Tuple, Iterator
-
-from cephadm import remotes
-
try:
import remoto
import execnet.gateway_bootstrap
@@ -34,7 +31,6 @@ from . import utils
if TYPE_CHECKING:
from cephadm.module import CephadmOrchestrator
- from remoto.backends import BaseConnection
logger = logging.getLogger(__name__)
@@ -310,16 +306,13 @@ class CephadmServe:
if match:
continue
self.log.info(f'Updating {host}:{path}')
- self._write_remote_file(host, path, content, mode, uid, gid)
+ self.mgr.ssh.write_remote_file(host, path, content, mode, uid, gid)
self.mgr.cache.update_client_file(host, path, digest, mode, uid, gid)
updated_files = True
for path in old_files.keys():
self.log.info(f'Removing {host}:{path}')
- with self._remote_connection(host) as tpl:
- conn, connr = tpl
- out, err, code = remoto.process.check(
- conn,
- ['rm', '-f', path])
+ cmd = ['rm', '-f', path]
+ self.mgr.ssh.check_execute_command(host, cmd)
updated_files = True
self.mgr.cache.removed_client_file(host, path)
if updated_files:
@@ -1321,25 +1314,6 @@ class CephadmServe:
msg = f"Unable to deploy the cephadm binary to {host}: {_err}"
self.log.warning(msg)
raise OrchestratorError(msg)
-
- def _write_remote_file(self,
- host: str,
- path: str,
- content: bytes,
- mode: int,
- uid: int,
- gid: int) -> None:
- with self._remote_connection(host) as tpl:
- conn, connr = tpl
- try:
- errmsg = connr.write_file(path, content, mode, uid, gid)
- if errmsg is not None:
- raise OrchestratorError(errmsg)
- except Exception as e:
- msg = f"Unable to write {host}:{path}: {e}"
- self.log.warning(msg)
- raise OrchestratorError(msg)
-
@contextmanager
def _remote_connection(self,
host: str,
--
2.39.5