import subprocess
from sceptre.hooks import Hook
from sceptre.exceptions import InvalidHookArgumentTypeError
[docs]class Cmd(Hook):
"""
Cmd implements a Sceptre hook which can run arbitrary commands.
"""
def __init__(self, *args, **kwargs):
super(Cmd, self).__init__(*args, **kwargs)
[docs] def run(self):
"""
Runs the argument string in a subprocess.
:raises: sceptre.exceptions.InvalidTaskArgumentTypeException
:raises: subprocess.CalledProcessError
"""
envs = self.stack.connection_manager.create_session_environment_variables()
try:
subprocess.check_call(self.argument, shell=True, env=envs)
except TypeError:
raise InvalidHookArgumentTypeError(
'The argument "{0}" is the wrong type - cmd hooks require '
"arguments of type string.".format(self.argument)
)