]>
Commit | Line | Data |
---|---|---|
9f95a23c TL |
1 | # ceph-deploy ftw |
2 | import os | |
adb31ebb TL |
3 | try: |
4 | from typing import Optional | |
5 | except ImportError: | |
6 | pass | |
9f95a23c TL |
7 | |
8 | PYTHONS = ['python3', 'python2', 'python'] | |
9 | PATH = [ | |
10 | '/usr/bin', | |
11 | '/usr/local/bin', | |
12 | '/bin', | |
13 | '/usr/sbin', | |
14 | '/usr/local/sbin', | |
15 | '/sbin', | |
16 | ] | |
17 | ||
f6b5b4d7 | 18 | |
9f95a23c | 19 | def choose_python(): |
adb31ebb | 20 | # type: () -> Optional[str] |
9f95a23c TL |
21 | for e in PYTHONS: |
22 | for b in PATH: | |
23 | p = os.path.join(b, e) | |
24 | if os.path.exists(p): | |
25 | return p | |
26 | return None | |
27 | ||
f6b5b4d7 | 28 | |
b3b6e05e TL |
29 | def write_file(path: str, content: bytes, mode: int, uid: int, gid: int, |
30 | mkdir_p: bool = True) -> Optional[str]: | |
31 | try: | |
32 | if mkdir_p: | |
33 | dirname = os.path.dirname(path) | |
34 | if not os.path.exists(dirname): | |
35 | os.makedirs(dirname) | |
36 | tmp_path = path + '.new' | |
37 | with open(tmp_path, 'wb') as f: | |
38 | os.fchown(f.fileno(), uid, gid) | |
39 | os.fchmod(f.fileno(), mode) | |
40 | f.write(content) | |
41 | os.fsync(f.fileno()) | |
42 | os.rename(tmp_path, path) | |
43 | except Exception as e: | |
44 | return str(e) | |
45 | return None | |
46 | ||
47 | ||
9f95a23c | 48 | if __name__ == '__channelexec__': |
f67539c2 TL |
49 | for item in channel: # type: ignore # noqa: F821 |
50 | channel.send(eval(item)) # type: ignore # noqa: F821 |