2020-04-10 22:17:36 +00:00
|
|
|
"""System related functions."""
|
|
|
|
|
2020-04-10 23:45:53 +00:00
|
|
|
import os
|
2020-04-10 22:17:36 +00:00
|
|
|
import subprocess
|
|
|
|
import sys
|
|
|
|
|
|
|
|
from autonomic import logger
|
2020-04-10 23:45:53 +00:00
|
|
|
from autonomic.settings import PASSWORD_STORE_PATH
|
2020-04-10 22:17:36 +00:00
|
|
|
|
|
|
|
log = logger.get_logger(__name__)
|
|
|
|
|
|
|
|
|
2020-04-10 23:45:53 +00:00
|
|
|
def run_command(command, cwd=None, output=False, extra_env=None):
|
|
|
|
"""Run a command."""
|
|
|
|
from autonomic.config import get_from_config
|
2020-04-10 22:17:36 +00:00
|
|
|
|
2020-04-10 23:45:53 +00:00
|
|
|
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})
|
|
|
|
|
2020-04-10 23:46:42 +00:00
|
|
|
if extra_env:
|
|
|
|
for key, val in extra_env.items():
|
|
|
|
env.update({key: val})
|
2020-04-10 22:17:36 +00:00
|
|
|
|
|
|
|
try:
|
2020-04-10 23:45:53 +00:00
|
|
|
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)
|
2020-04-10 22:17:36 +00:00
|
|
|
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)
|