diff options
author | Maxim Devaev <[email protected]> | 2022-04-10 08:08:05 +0300 |
---|---|---|
committer | Maxim Devaev <[email protected]> | 2022-04-10 08:08:05 +0300 |
commit | 7c44d733a91cfe09badebf6d2e8ea96a551fbada (patch) | |
tree | 2ec3118c41aeab949ee8a56e3b5916d87ff790d0 /kvmd/aiohelpers.py | |
parent | c92d17dea21fbcf461716331ea7fd3500476edb9 (diff) |
aiohelpers
Diffstat (limited to 'kvmd/aiohelpers.py')
-rw-r--r-- | kvmd/aiohelpers.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/kvmd/aiohelpers.py b/kvmd/aiohelpers.py new file mode 100644 index 00000000..6357764c --- /dev/null +++ b/kvmd/aiohelpers.py @@ -0,0 +1,50 @@ +# ========================================================================== # +# # +# KVMD - The main PiKVM daemon. # +# # +# Copyright (C) 2018-2022 Maxim Devaev <[email protected]> # +# # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# This program is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see <https://www.gnu.org/licenses/>. # +# # +# ========================================================================== # + + +import subprocess + +from typing import List + +from .logging import get_logger + +from . import tools +from . import aioproc + + +# ===== +async def remount(name: str, base_cmd: List[str], rw: bool) -> bool: + logger = get_logger(1) + mode = ("rw" if rw else "ro") + cmd = [ + part.format(mode=mode) + for part in base_cmd + ] + logger.info("Remounting %s storage to %s: %s ...", name, mode.upper(), cmd) + try: + proc = await aioproc.log_process(cmd, logger) + if proc.returncode != 0: + assert proc.returncode is not None + raise subprocess.CalledProcessError(proc.returncode, cmd) + except Exception as err: + logger.error("Can't remount %s storage: %s", name, tools.efmt(err)) + return False + return True |