summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorPeter Sprygada <privateip@users.noreply.github.com>2017-01-24 23:14:30 -0500
committerGitHub <noreply@github.com>2017-01-24 23:14:30 -0500
commit66736730422b4b3b8f585ecd58cdec5a6833c912 (patch)
treec3cc3919f294f5429ca523fe69f299b47f49c428 /bin
parentd8b18d79fae66a73afb0636c672936ee1830ea25 (diff)
downloadansible-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-xbin/ansible-connection36
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()