salt/salt/scripts.py
Mike Place e5153ffd3d Migrate salt.cloud.exceptions to salt.exceptions
This means that we no longer have to load salt.cloud when calling the
salt cli and paves the way for additional sandboxing of salt-cloud to avoid
unecessary imports.
2014-09-03 12:30:28 -06:00

251 lines
5.8 KiB
Python

# -*- coding: utf-8 -*-
'''
This module contains the function calls to execute command line scripts
'''
# Import python libs
from __future__ import print_function
import os
import sys
import traceback
import logging
# Import salt libs
import salt
import salt.exceptions
import salt.cli
log = logging.getLogger(__name__)
def _handle_interrupt(exc, original_exc, hardfail=False, trace=''):
'''
if hardfalling:
If we got the original stacktrace, log it
If all cases, raise the original exception
but this is logically part the initial
stack.
else just let salt exit gracefully
'''
if hardfail:
if trace:
log.error(trace)
raise original_exc
else:
raise exc
def salt_master():
'''
Start the salt master.
'''
master = salt.Master()
master.start()
def salt_minion():
'''
Start the salt minion.
'''
if '' in sys.path:
sys.path.remove('')
minion = salt.Minion()
minion.start()
def salt_syndic():
'''
Start the salt syndic.
'''
pid = os.getpid()
try:
syndic = salt.Syndic()
syndic.start()
except KeyboardInterrupt:
os.kill(pid, 15)
def salt_key():
'''
Manage the authentication keys with salt-key.
'''
client = None
try:
client = salt.cli.SaltKey()
client.run()
except KeyboardInterrupt, err:
trace = traceback.format_exc()
try:
hardcrash = client.options.hard_crash
except (AttributeError, KeyError):
hardcrash = False
_handle_interrupt(
SystemExit('\nExiting gracefully on Ctrl-c'),
err,
hardcrash, trace=trace)
def salt_cp():
'''
Publish commands to the salt system from the command line on the
master.
'''
client = None
try:
client = salt.cli.SaltCP()
client.run()
except KeyboardInterrupt, err:
trace = traceback.format_exc()
try:
hardcrash = client.options.hard_crash
except (AttributeError, KeyError):
hardcrash = False
_handle_interrupt(
SystemExit('\nExiting gracefully on Ctrl-c'),
err,
hardcrash, trace=trace)
def salt_call():
'''
Directly call a salt command in the modules, does not require a running
salt minion to run.
'''
if '' in sys.path:
sys.path.remove('')
client = None
try:
client = salt.cli.SaltCall()
client.run()
except KeyboardInterrupt, err:
trace = traceback.format_exc()
try:
hardcrash = client.options.hard_crash
except (AttributeError, KeyError):
hardcrash = False
_handle_interrupt(
SystemExit('\nExiting gracefully on Ctrl-c'),
err,
hardcrash, trace=trace)
def salt_run():
'''
Execute a salt convenience routine.
'''
if '' in sys.path:
sys.path.remove('')
client = None
try:
client = salt.cli.SaltRun()
client.run()
except KeyboardInterrupt, err:
trace = traceback.format_exc()
try:
hardcrash = client.options.hard_crash
except (AttributeError, KeyError):
hardcrash = False
_handle_interrupt(
SystemExit('\nExiting gracefully on Ctrl-c'),
err,
hardcrash, trace=trace)
def salt_ssh():
'''
Execute the salt-ssh system
'''
if '' in sys.path:
sys.path.remove('')
client = None
try:
client = salt.cli.SaltSSH()
client.run()
except KeyboardInterrupt, err:
trace = traceback.format_exc()
try:
hardcrash = client.options.hard_crash
except (AttributeError, KeyError):
hardcrash = False
_handle_interrupt(
SystemExit('\nExiting gracefully on Ctrl-c'),
err,
hardcrash, trace=trace)
except salt.exceptions.SaltClientError as err:
trace = traceback.format_exc()
try:
hardcrash = client.options.hard_crash
except (AttributeError, KeyError):
hardcrash = False
_handle_interrupt(
SystemExit(err),
err,
hardcrash, trace=trace)
def salt_cloud():
'''
The main function for salt-cloud
'''
try:
import salt.cloud.cli
HAS_SALTCLOUD = True
except ImportError:
# No salt cloud on Windows
HAS_SALTCLOUD = False
if '' in sys.path:
sys.path.remove('')
if not HAS_SALTCLOUD:
print('salt-cloud is not available in this system')
sys.exit(os.EX_UNAVAILABLE)
client = None
try:
client = salt.cloud.cli.SaltCloud()
client.run()
except KeyboardInterrupt, err:
trace = traceback.format_exc()
try:
hardcrash = client.options.hard_crash
except (AttributeError, KeyError):
hardcrash = False
_handle_interrupt(
SystemExit('\nExiting gracefully on Ctrl-c'),
err,
hardcrash, trace=trace)
def salt_api():
'''
The main function for salt-api
'''
sapi = salt.cli.SaltAPI()
sapi.run()
def salt_main():
'''
Publish commands to the salt system from the command line on the
master.
'''
if '' in sys.path:
sys.path.remove('')
client = None
try:
client = salt.cli.SaltCMD()
client.run()
except KeyboardInterrupt, err:
trace = traceback.format_exc()
try:
hardcrash = client.options.hard_crash
except (AttributeError, KeyError):
hardcrash = False
_handle_interrupt(
SystemExit('\nExiting gracefully on Ctrl-c'),
err,
hardcrash, trace=trace)