diff options
author | Peter Sprygada <privateip@users.noreply.github.com> | 2017-01-24 23:14:30 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-24 23:14:30 -0500 |
commit | 66736730422b4b3b8f585ecd58cdec5a6833c912 (patch) | |
tree | c3cc3919f294f5429ca523fe69f299b47f49c428 /bin | |
parent | d8b18d79fae66a73afb0636c672936ee1830ea25 (diff) | |
download | ansible-66736730422b4b3b8f585ecd58cdec5a6833c912.tar.gz |
more logging and exception handling in ansible-connection (#20619)
adds more logging to handle display being called from plugins. Also
rearranges some of the exception handling to better catch exceptions and
log to local syslog
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/ansible-connection | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/bin/ansible-connection b/bin/ansible-connection index 0d5197313d..d15962e3e1 100755 --- a/bin/ansible-connection +++ b/bin/ansible-connection @@ -49,6 +49,8 @@ from ansible.module_utils.six.moves import cPickle, StringIO from ansible.playbook.play_context import PlayContext from ansible.plugins import connection_loader from ansible.utils.path import unfrackpath, makedirs_safe +from ansible.errors import AnsibleConnectionFailure +from ansible.utils.display import Display def do_fork(): @@ -101,9 +103,9 @@ def recv_data(s): data += d return data -def log(msg, host=None): +def log(msg, host=None, **kwargs): if host: - msg = '[%s] %s' % (host, msg) + msg = '<%s> %s' % (host, msg) facility = getattr(syslog, C.DEFAULT_SYSLOG_FACILITY, syslog.LOG_USER) syslog.openlog('ansible-connection', 0, facility) syslog.syslog(syslog.LOG_INFO, str(msg)) @@ -117,17 +119,14 @@ class Server(): self._start_time = datetime.datetime.now() - try: - self.log('loading connection plugin %s' % str(play_context.connection)) - self.conn = connection_loader.get(play_context.connection, play_context, sys.stdin) - self.conn._connect() + self.conn = connection_loader.get(play_context.connection, play_context, sys.stdin) + rc, out, err = self.conn._connect() + if rc != 0: + raise AnsibleConnectionFailure(err) - self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - self.socket.bind(path) - self.socket.listen(1) - except Exception as exc: - self.log(traceback.format_exc()) - raise + self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + self.socket.bind(path) + self.socket.listen(1) signal.signal(signal.SIGALRM, self.alarm_handler) @@ -137,7 +136,7 @@ class Server(): return meth(*args, **kwargs) def log(self, msg): - log(msg, self.play_context.remote_addr) + log(msg, host=self.play_context.remote_addr) def alarm_handler(self, signum, frame): ''' @@ -259,6 +258,8 @@ def main(): print(traceback.format_exc()) sys.exit(1) + display.verbosity = pc.verbosity + # here we create a hash to use later when creating the socket file, # so we can hide the info about the target host/user/etc. m = hashlib.sha256() @@ -280,7 +281,12 @@ def main(): if not os.path.exists(sf_path): pid = do_fork() if pid == 0: - server = Server(sf_path, pc) + try: + server = Server(sf_path, pc) + except AnsibleConnectionFailure as exc: + log(str(exc), pc.remote_addr) + except Exception as exc: + log(traceback.format_exc(), pc.remote_addr) fcntl.lockf(lock_fd, fcntl.LOCK_UN) os.close(lock_fd) server.run() @@ -334,4 +340,6 @@ def main(): sys.exit(rc) if __name__ == '__main__': + display = Display() + display.display = log main() |