Hi,
Initially my playbook stuck at setup stage for a specific server.
Upon running ansible -vvvv -m setup , the process also stuck.
I have set the environment variable ANSIBLE_KEEP_REMOTE_FILES=1 then trying again, and still stuck.
In the target server, I went to the folder /root/.ansible/tmp/ansible-tmp-1472920749.88-102164203403323 and executed
python -m trace --trace ./setup
it stuck at the last line:
— modulename: subprocess, funcname: close_unregister_and_remove
subprocess.py(1437): poller.unregister(fd)
subprocess.py(1438): fd2file[fd].close()
subprocess.py(1439): fd2file.pop(fd)
subprocess.py(1461): for fd, mode in ready:
subprocess.py(1462): if mode & select.POLLOUT:
subprocess.py(1474): elif mode & select_POLLIN_POLLPRI:
subprocess.py(1475): data = os.read(fd, 4096)
subprocess.py(1476): if not data:
subprocess.py(1478): fd2output[fd].append(data)
subprocess.py(1461): for fd, mode in ready:
subprocess.py(1453): while fd2file:
subprocess.py(1454): try:
subprocess.py(1455): ready = poller.poll()
when pressing ctrl-c, the traceback is:
Traceback (most recent call last):
File “/usr/lib64/python2.7/runpy.py”, line 162, in _run_module_as_main
“main”, fname, loader, pkg_name)
File “/usr/lib64/python2.7/runpy.py”, line 72, in _run_code
exec code in run_globals
File “/usr/lib64/python2.7/trace.py”, line 819, in
main()
File “/usr/lib64/python2.7/trace.py”, line 807, in main
t.runctx(code, globs, globs)
File “/usr/lib64/python2.7/trace.py”, line 513, in runctx
exec cmd in globals, locals
File “./setup”, line 237, in
exitcode = invoke_module(module, zipped_mod, ZIPLOADER_PARAMS)
File “./setup”, line 62, in invoke_module
(stdout, stderr) = p.communicate(json_params)
File “/usr/lib64/python2.7/subprocess.py”, line 800, in communicate
return self._communicate(input)
File “/usr/lib64/python2.7/subprocess.py”, line 1401, in _communicate
stdout, stderr = self._communicate_with_poll(input)
File “/usr/lib64/python2.7/subprocess.py”, line 1455, in _communicate_with_poll
ready = poller.poll()
KeyboardInterrupt
For other machine, they did not stuck at the polling process.
Any idea to troubleshoot further?
Thanks
– extended output –
setup(237): exitcode = invoke_module(module, zipped_mod, ZIPLOADER_PARAMS)
— modulename: setup, funcname: invoke_module
setup(55): pythonpath = os.environ.get(‘PYTHONPATH’)
— modulename: UserDict, funcname: get
UserDict.py(59): if key not in self:
— modulename: UserDict, funcname: contains
UserDict.py(71): return key in self.data
UserDict.py(60): return failobj
setup(56): if pythonpath:
setup(59): os.environ[‘PYTHONPATH’] = modlib_path
— modulename: os, funcname: setitem
os.py(471): putenv(key, item)
os.py(472): self.data[key] = item
setup(61): p = subprocess.Popen([‘/usr/bin/python’, module], env=os.environ, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
— modulename: subprocess, funcname: init
subprocess.py(656): _cleanup()
— modulename: subprocess, funcname: _cleanup
subprocess.py(461): for inst in _active[:]:
subprocess.py(658): self._child_created = False
subprocess.py(659): if not isinstance(bufsize, (int, long)):
subprocess.py(662): if mswindows:
subprocess.py(672): if startupinfo is not None:
subprocess.py(675): if creationflags != 0:
subprocess.py(679): self.stdin = None
subprocess.py(680): self.stdout = None
subprocess.py(681): self.stderr = None
subprocess.py(682): self.pid = None
subprocess.py(683): self.returncode = None
subprocess.py(684): self.universal_newlines = universal_newlines
subprocess.py(703): errread, errwrite), to_close = self._get_handles(stdin, stdout, stderr)
— modulename: subprocess, funcname: _get_handles
subprocess.py(1104): to_close = set()
subprocess.py(1105): p2cread, p2cwrite = None, None
subprocess.py(1106): c2pread, c2pwrite = None, None
subprocess.py(1107): errread, errwrite = None, None
subprocess.py(1109): if stdin is None:
subprocess.py(1111): elif stdin == PIPE:
subprocess.py(1112): p2cread, p2cwrite = self.pipe_cloexec()
— modulename: subprocess, funcname: pipe_cloexec
subprocess.py(1168): r, w = os.pipe()
subprocess.py(1169): self._set_cloexec_flag(r)
— modulename: subprocess, funcname: _set_cloexec_flag
subprocess.py(1150): try:
subprocess.py(1151): cloexec_flag = fcntl.FD_CLOEXEC
subprocess.py(1155): old = fcntl.fcntl(fd, fcntl.F_GETFD)
subprocess.py(1156): if cloexec:
subprocess.py(1157): fcntl.fcntl(fd, fcntl.F_SETFD, old | cloexec_flag)
subprocess.py(1170): self._set_cloexec_flag(w)
— modulename: subprocess, funcname: _set_cloexec_flag
subprocess.py(1150): try:
subprocess.py(1151): cloexec_flag = fcntl.FD_CLOEXEC
subprocess.py(1155): old = fcntl.fcntl(fd, fcntl.F_GETFD)
subprocess.py(1156): if cloexec:
subprocess.py(1157): fcntl.fcntl(fd, fcntl.F_SETFD, old | cloexec_flag)
subprocess.py(1171): return r, w
subprocess.py(1113): to_close.update((p2cread, p2cwrite))
subprocess.py(1120): if stdout is None:
subprocess.py(1122): elif stdout == PIPE:
subprocess.py(1123): c2pread, c2pwrite = self.pipe_cloexec()
— modulename: subprocess, funcname: pipe_cloexec
subprocess.py(1168): r, w = os.pipe()
subprocess.py(1169): self._set_cloexec_flag(r)
— modulename: subprocess, funcname: _set_cloexec_flag
subprocess.py(1150): try:
subprocess.py(1151): cloexec_flag = fcntl.FD_CLOEXEC
subprocess.py(1155): old = fcntl.fcntl(fd, fcntl.F_GETFD)
subprocess.py(1156): if cloexec:
subprocess.py(1157): fcntl.fcntl(fd, fcntl.F_SETFD, old | cloexec_flag)
subprocess.py(1170): self._set_cloexec_flag(w)
— modulename: subprocess, funcname: _set_cloexec_flag
subprocess.py(1150): try:
subprocess.py(1151): cloexec_flag = fcntl.FD_CLOEXEC
subprocess.py(1155): old = fcntl.fcntl(fd, fcntl.F_GETFD)
subprocess.py(1156): if cloexec:
subprocess.py(1157): fcntl.fcntl(fd, fcntl.F_SETFD, old | cloexec_flag)
subprocess.py(1171): return r, w
subprocess.py(1124): to_close.update((c2pread, c2pwrite))
subprocess.py(1131): if stderr is None:
subprocess.py(1133): elif stderr == PIPE:
subprocess.py(1134): errread, errwrite = self.pipe_cloexec()
— modulename: subprocess, funcname: pipe_cloexec
subprocess.py(1168): r, w = os.pipe()
subprocess.py(1169): self._set_cloexec_flag(r)
— modulename: subprocess, funcname: _set_cloexec_flag
subprocess.py(1150): try:
subprocess.py(1151): cloexec_flag = fcntl.FD_CLOEXEC
subprocess.py(1155): old = fcntl.fcntl(fd, fcntl.F_GETFD)
subprocess.py(1156): if cloexec:
subprocess.py(1157): fcntl.fcntl(fd, fcntl.F_SETFD, old | cloexec_flag)
subprocess.py(1170): self._set_cloexec_flag(w)
— modulename: subprocess, funcname: _set_cloexec_flag
subprocess.py(1150): try:
subprocess.py(1151): cloexec_flag = fcntl.FD_CLOEXEC
subprocess.py(1155): old = fcntl.fcntl(fd, fcntl.F_GETFD)
subprocess.py(1156): if cloexec:
subprocess.py(1157): fcntl.fcntl(fd, fcntl.F_SETFD, old | cloexec_flag)
subprocess.py(1171): return r, w
subprocess.py(1135): to_close.update((errread, errwrite))
subprocess.py(1144): return (p2cread, p2cwrite,
subprocess.py(1145): c2pread, c2pwrite,
subprocess.py(1146): errread, errwrite), to_close
subprocess.py(705): try:
subprocess.py(706): self._execute_child(args, executable, preexec_fn, close_fds,
subprocess.py(707): cwd, env, universal_newlines,
subprocess.py(708): startupinfo, creationflags, shell, to_close,
subprocess.py(709): p2cread, p2cwrite,
subprocess.py(710): c2pread, c2pwrite,
subprocess.py(711): errread, errwrite)
— modulename: subprocess, funcname: _execute_child
subprocess.py(1196): if isinstance(args, types.StringTypes):
subprocess.py(1199): args = list(args)
subprocess.py(1201): if shell:
subprocess.py(1206): if executable is None:
subprocess.py(1207): executable = args[0]
subprocess.py(1209): def _close_in_parent(fd):
subprocess.py(1216): errpipe_read, errpipe_write = self.pipe_cloexec()
— modulename: subprocess, funcname: pipe_cloexec
subprocess.py(1168): r, w = os.pipe()
subprocess.py(1169): self._set_cloexec_flag(r)
— modulename: subprocess, funcname: _set_cloexec_flag
subprocess.py(1150): try:
subprocess.py(1151): cloexec_flag = fcntl.FD_CLOEXEC
subprocess.py(1155): old = fcntl.fcntl(fd, fcntl.F_GETFD)
subprocess.py(1156): if cloexec:
subprocess.py(1157): fcntl.fcntl(fd, fcntl.F_SETFD, old | cloexec_flag)
subprocess.py(1170): self._set_cloexec_flag(w)
— modulename: subprocess, funcname: _set_cloexec_flag
subprocess.py(1150): try:
subprocess.py(1151): cloexec_flag = fcntl.FD_CLOEXEC
subprocess.py(1155): old = fcntl.fcntl(fd, fcntl.F_GETFD)
subprocess.py(1156): if cloexec:
subprocess.py(1157): fcntl.fcntl(fd, fcntl.F_SETFD, old | cloexec_flag)
subprocess.py(1171): return r, w
subprocess.py(1217): try:
subprocess.py(1218): try:
subprocess.py(1219): gc_was_enabled = gc.isenabled()
subprocess.py(1222): gc.disable()
subprocess.py(1223): try:
subprocess.py(1224): self.pid = os.fork()
subprocess.py(1229): self._child_created = True
subprocess.py(1230): if self.pid == 0:
subprocess.py(1300): if gc_was_enabled:
subprocess.py(1229): self._child_created = True
subprocess.py(1301): gc.enable()
subprocess.py(1230): if self.pid == 0:
subprocess.py(1304): os.close(errpipe_write)
subprocess.py(1232): try:
subprocess.py(1234): if p2cwrite is not None:
subprocess.py(1308): data = _eintr_retry_call(os.read, errpipe_read, 1048576)
subprocess.py(1235): os.close(p2cwrite)
subprocess.py(1236): if c2pread is not None:
subprocess.py(1237): os.close(c2pread)
subprocess.py(1238): if errread is not None:
subprocess.py(1239): os.close(errread)
subprocess.py(1240): os.close(errpipe_read)
— modulename: subprocess, funcname: _eintr_retry_call
subprocess.py(1245): if c2pwrite == 0:
subprocess.py(476): while True:
subprocess.py(1247): if errwrite == 0 or errwrite == 1:
subprocess.py(477): try:
subprocess.py(1251): def _dup2(a, b):
subprocess.py(478): return func(*args)
subprocess.py(1259): _dup2(p2cread, 0)
— modulename: subprocess, funcname: _dup2
subprocess.py(1255): if a == b:
subprocess.py(1257): elif a is not None:
subprocess.py(1258): os.dup2(a, b)
subprocess.py(1260): _dup2(c2pwrite, 1)
— modulename: subprocess, funcname: _dup2
subprocess.py(1255): if a == b:
subprocess.py(1257): elif a is not None:
subprocess.py(1258): os.dup2(a, b)
subprocess.py(1310): if p2cread is not None and p2cwrite is not None:
subprocess.py(1311): _close_in_parent(p2cread)
— modulename: subprocess, funcname: _close_in_parent
subprocess.py(1210): os.close(fd)
subprocess.py(1211): to_close.remove(fd)
subprocess.py(1312): if c2pwrite is not None and c2pread is not None:
subprocess.py(1313): _close_in_parent(c2pwrite)
— modulename: subprocess, funcname: _close_in_parent
subprocess.py(1210): os.close(fd)
subprocess.py(1211): to_close.remove(fd)
subprocess.py(1314): if errwrite is not None and errread is not None:
subprocess.py(1315): _close_in_parent(errwrite)
— modulename: subprocess, funcname: _close_in_parent
subprocess.py(1210): os.close(fd)
subprocess.py(1211): to_close.remove(fd)
subprocess.py(1318): os.close(errpipe_read)
subprocess.py(1320): if data != “”:
subprocess.py(727): if mswindows:
subprocess.py(735): if p2cwrite is not None:
subprocess.py(736): self.stdin = os.fdopen(p2cwrite, ‘wb’, bufsize)
subprocess.py(737): if c2pread is not None:
subprocess.py(738): if universal_newlines:
subprocess.py(741): self.stdout = os.fdopen(c2pread, ‘rb’, bufsize)
subprocess.py(742): if errread is not None:
subprocess.py(743): if universal_newlines:
subprocess.py(746): self.stderr = os.fdopen(errread, ‘rb’, bufsize)
setup(62): (stdout, stderr) = p.communicate(json_params)
— modulename: subprocess, funcname: communicate
subprocess.py(780): if [self.stdin, self.stdout, self.stderr].count(None) >= 2:
subprocess.py(800): return self._communicate(input)
— modulename: subprocess, funcname: _communicate
subprocess.py(1393): if self.stdin:
subprocess.py(1396): self.stdin.flush()
subprocess.py(1397): if not input:
subprocess.py(1400): if _has_poll:
subprocess.py(1401): stdout, stderr = self._communicate_with_poll(input)
— modulename: subprocess, funcname: _communicate_with_poll
subprocess.py(1426): stdout = None # Return
subprocess.py(1427): stderr = None # Return
subprocess.py(1428): fd2file = {}
subprocess.py(1429): fd2output = {}
subprocess.py(1431): poller = select.poll()
subprocess.py(1432): def register_and_append(file_obj, eventmask):
subprocess.py(1436): def close_unregister_and_remove(fd):
subprocess.py(1441): if self.stdin and input:
subprocess.py(1442): register_and_append(self.stdin, select.POLLOUT)
— modulename: subprocess, funcname: register_and_append
subprocess.py(1433): poller.register(file_obj.fileno(), eventmask)
subprocess.py(1434): fd2file[file_obj.fileno()] = file_obj
subprocess.py(1444): select_POLLIN_POLLPRI = select.POLLIN | select.POLLPRI
subprocess.py(1445): if self.stdout:
subprocess.py(1446): register_and_append(self.stdout, select_POLLIN_POLLPRI)
— modulename: subprocess, funcname: register_and_append
subprocess.py(1433): poller.register(file_obj.fileno(), eventmask)
subprocess.py(1434): fd2file[file_obj.fileno()] = file_obj
subprocess.py(1447): fd2output[self.stdout.fileno()] = stdout =
subprocess.py(1448): if self.stderr:
subprocess.py(1449): register_and_append(self.stderr, select_POLLIN_POLLPRI)
— modulename: subprocess, funcname: register_and_append
subprocess.py(1433): poller.register(file_obj.fileno(), eventmask)
subprocess.py(1434): fd2file[file_obj.fileno()] = file_obj
subprocess.py(1450): fd2output[self.stderr.fileno()] = stderr =
subprocess.py(1452): input_offset = 0
subprocess.py(1453): while fd2file:
subprocess.py(1454): try:
subprocess.py(1455): ready = poller.poll()
subprocess.py(1461): for fd, mode in ready:
subprocess.py(1462): if mode & select.POLLOUT:
subprocess.py(1463): chunk = input[input_offset : input_offset + _PIPE_BUF]
subprocess.py(1464): try:
subprocess.py(1465): input_offset += os.write(fd, chunk)
subprocess.py(1472): if input_offset >= len(input):
subprocess.py(1473): close_unregister_and_remove(fd)
— modulename: subprocess, funcname: close_unregister_and_remove
subprocess.py(1437): poller.unregister(fd)
subprocess.py(1438): fd2file[fd].close()
subprocess.py(1439): fd2file.pop(fd)
subprocess.py(1461): for fd, mode in ready:
subprocess.py(1462): if mode & select.POLLOUT:
subprocess.py(1474): elif mode & select_POLLIN_POLLPRI:
subprocess.py(1475): data = os.read(fd, 4096)
subprocess.py(1476): if not data:
subprocess.py(1478): fd2output[fd].append(data)
subprocess.py(1461): for fd, mode in ready:
subprocess.py(1453): while fd2file:
subprocess.py(1454): try:
subprocess.py(1455): ready = poller.poll()