diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 18:24:20 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 18:24:20 +0000 |
commit | 483eb2f56657e8e7f419ab1a4fab8dce9ade8609 (patch) | |
tree | e5d88d25d870d5dedacb6bbdbe2a966086a0a5cf /src/pybind/mgr/ssh/remotes.py | |
parent | Initial commit. (diff) | |
download | ceph-483eb2f56657e8e7f419ab1a4fab8dce9ade8609.tar.xz ceph-483eb2f56657e8e7f419ab1a4fab8dce9ade8609.zip |
Adding upstream version 14.2.21.upstream/14.2.21upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/pybind/mgr/ssh/remotes.py')
-rw-r--r-- | src/pybind/mgr/ssh/remotes.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/src/pybind/mgr/ssh/remotes.py b/src/pybind/mgr/ssh/remotes.py new file mode 100644 index 00000000..da057e83 --- /dev/null +++ b/src/pybind/mgr/ssh/remotes.py @@ -0,0 +1,81 @@ +# ceph-deploy ftw +import os +import errno +import tempfile +import shutil + +def safe_makedirs(path, uid=-1, gid=-1): + """ create path recursively if it doesn't exist """ + try: + os.makedirs(path) + except OSError as e: + if e.errno == errno.EEXIST: + pass + else: + raise + else: + os.chown(path, uid, gid) + +def write_conf(path, conf): + if not os.path.exists(path): + dirpath = os.path.dirname(path) + if os.path.exists(dirpath): + with open(path, "w") as f: + f.write(conf) + os.chmod(path, 0o644) + else: + raise RuntimeError( + "{0} does not exist".format(dirpath)) + +def write_keyring(path, key, overwrite=False, uid=-1, gid=-1): + dirname = os.path.dirname(path) + if not os.path.exists(dirname): + safe_makedirs(dirname, uid, gid) + if not overwrite and os.path.exists(path): + return + with open(path, "wb") as f: + f.write(key.encode('utf-8')) + +def create_mon_path(path, uid=-1, gid=-1): + """create the mon path if it does not exist""" + if not os.path.exists(path): + os.makedirs(path) + os.chown(path, uid, gid); + +def write_file(path, content, mode=0o644, directory=None, uid=-1, gid=-1): + if directory: + if path.startswith("/"): + path = path[1:] + path = os.path.join(directory, path) + if os.path.exists(path): + # Delete file in case we are changing its mode + os.unlink(path) + with os.fdopen(os.open(path, os.O_WRONLY | os.O_CREAT, mode), 'wb') as f: + f.write(content.encode('utf-8')) + os.chown(path, uid, gid) + +def path_getuid(path): + return os.stat(path).st_uid + +def path_getgid(path): + return os.stat(path).st_gid + +def which(executable): + """find the location of an executable""" + locations = ( + '/usr/local/bin', + '/bin', + '/usr/bin', + '/usr/local/sbin', + '/usr/sbin', + '/sbin', + ) + + for location in locations: + executable_path = os.path.join(location, executable) + if os.path.exists(executable_path) and os.path.isfile(executable_path): + return executable_path + +if __name__ == '__channelexec__': + for item in channel: + channel.send(eval(item)) |