"""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)