This repository has been archived on 2020-06-17. You can view files and clone it, but cannot push or open issues or pull requests.
autonomic/autonomic/system.py

54 lines
1.2 KiB
Python

"""System related functions."""
import os
import subprocess
import sys
from autonomic import logger
from autonomic.settings import PASSWORD_STORE_PATH
log = logger.get_logger(__name__)
def run_command(command, cwd=None, output=False, extra_env=None):
"""Run a command."""
from autonomic.config import get_from_config
username = get_from_config("username")
env = os.environ.copy()
env.update({"PASSWORD_STORE_DIR": PASSWORD_STORE_PATH})
env.update({"REMOTE_USER": username})
env.update({"ANSIBLE_USER": username})
if extra_env:
for key, val in extra_env.items():
env.update({key: val})
try:
if cwd:
os.chdir(cwd)
log.info(
"Running {}{}".format(
" ".join(command), " in {}".format(cwd) if cwd else ""
)
)
if output:
subprocess.call(command, env=env)
else:
subprocess.check_output(command, env=env, stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as exception:
msg = "{} failed! Saw {}".format(" ".join(command), str(exception))
exit_with_msg(msg)
def exit(code=1):
sys.exit(code)
def exit_with_msg(msg, code=1):
log.critical(msg)
exit(code)