Ad hoc commands are not returning to the prompt?

Hi everyone,

Just started out using Ansible for managing our various hosts / docker containers etc… The only problem i have whilst testing this: all my ad-hoc commands never finish :slight_smile:

just a simple ‘ansible office -vvvvv -a “/usr/bin/uptime”’
ESTABLISH CONNECTION FOR USER: root on PORT 22 TO host1
ESTABLISH CONNECTION FOR USER: root on PORT 22 TO host2
ESTABLISH CONNECTION FOR USER: root on PORT 22 TO host3
ESTABLISH CONNECTION FOR USER: root on PORT 22 TO host4
EXEC /bin/sh -c ‘mkdir -p $HOME/.ansible/tmp/ansible-1399929485.48-193948231594553 && echo $HOME/.ansible/tmp/ansible-1399929485.48-193948231594553’
EXEC /bin/sh -c ‘mkdir -p $HOME/.ansible/tmp/ansible-1399929485.52-91011211544401 && echo $HOME/.ansible/tmp/ansible-1399929485.52-91011211544401’
REMOTE_MODULE command /usr/bin/uptime
REMOTE_MODULE command /usr/bin/uptime
PUT /tmp/tmpqfWmwp TO /root/.ansible/tmp/ansible-1399929485.48-193948231594553/command
EXEC /bin/sh -c ‘mkdir -p $HOME/.ansible/tmp/ansible-1399929485.49-54151257537199 && echo $HOME/.ansible/tmp/ansible-1399929485.49-54151257537199’
PUT /tmp/tmplYjZje TO /root/.ansible/tmp/ansible-1399929485.52-91011211544401/command
REMOTE_MODULE command /usr/bin/uptime
PUT /tmp/tmpCAU0Pt TO /root/.ansible/tmp/ansible-1399929485.49-54151257537199/command
EXEC /bin/sh -c ‘/usr/bin/python /root/.ansible/tmp/ansible-1399929485.52-91011211544401/command; rm -rf /root/.ansible/tmp/ansible-1399929485.52-91011211544401/ >/dev/null 2>&1’
EXEC /bin/sh -c ‘/usr/bin/python /root/.ansible/tmp/ansible-1399929485.49-54151257537199/command; rm -rf /root/.ansible/tmp/ansible-1399929485.49-54151257537199/ >/dev/null 2>&1’
EXEC /bin/sh -c ‘/usr/bin/python /root/.ansible/tmp/ansible-1399929485.48-193948231594553/command; rm -rf /root/.ansible/tmp/ansible-1399929485.48-193948231594553/ >/dev/null 2>&1’
EXEC /bin/sh -c ‘mkdir -p $HOME/.ansible/tmp/ansible-1399929485.52-98282571951561 && echo $HOME/.ansible/tmp/ansible-1399929485.52-98282571951561’
REMOTE_MODULE command /usr/bin/uptime
PUT /tmp/tmpqfWmwp TO /root/.ansible/tmp/ansible-1399929485.52-98282571951561/command
EXEC /bin/sh -c ‘/usr/bin/python /root/.ansible/tmp/ansible-1399929485.52-98282571951561/command; rm -rf /root/.ansible/tmp/ansible-1399929485.52-98282571951561/ >/dev/null 2>&1’

I’m running ansible 1.4.5 (Ubuntu 10.04 starting point, seen above as host4)
Even running the same command on one of the hosts (doesnt matter which one) just stalls … (even after checking on the destination and verifying that the command was finished… All that remains is the “sshd: root@notty” trace…

Am i doing it wrong?

Thanks!

To complete the debug info:

After a CTRL-C on the console i get the following output:

Traceback (most recent call last):
File “/usr/lib/pymodules/python2.6/ansible/runner/connection_plugins/paramiko_ssh.py”, line 321, in close
self.ssh._host_keys.update(self.ssh._system_host_keys)
File “/usr/lib/python2.6/UserDict.py”, line 155, in update
for k, v in other.iteritems():
File “/usr/lib/python2.6/UserDict.py”, line 110, in iteritems
yield (k, self[k])
File “/usr/lib/pymodules/python2.6/paramiko/hostkeys.py”, line 258, in getitem
ret = self.lookup(key)
File “/usr/lib/pymodules/python2.6/paramiko/hostkeys.py”, line 224, in lookup
if (h.startswith(‘|1|’) and (self.hash_host(hostname, h) == h)) or (h == hostname):
File “/usr/lib/pymodules/python2.6/paramiko/hostkeys.py”, line 312, in hash_host
hmac = HMAC.HMAC(salt, hostname, SHA).digest()
File “/usr/lib/python2.6/dist-packages/Crypto/Hash/HMAC.py”, line 56, in init
self.inner.update(_strxor(key, ipad))
File “/usr/lib/python2.6/dist-packages/Crypto/Hash/HMAC.py”, line 16, in _strxor
return “”.join(map(lambda x, y: chr(ord(x) ^ ord(y)), s1, s2))
File “/usr/lib/python2.6/dist-packages/Crypto/Hash/HMAC.py”, line 16, in
return “”.join(map(lambda x, y: chr(ord(x) ^ ord(y)), s1, s2))
KeyboardInterrupt
host3 | success | rc=0 >>
host3

(where the command starting this was ‘ansible host3 -vvvv -m shell -a “hostname”’

Is the python 2.6 the problem here?

If you have the playbook configured to sudo and you didn’t pass --ask-sudo-pass, that may be the problem.

We have a ticket open to irmprove the detection of a sudo prompt.

FYI, this question in the future is more apt for ansible-project, as it’s about usage, rather than developing ansible itself.

Not a problem but wanted to point that out.

Thanks!

Michael,

Thanks for the reponse. I realized after posting the opening post that it was the developers list… Sorry, my bad, my next post will be placed in the correct list :slight_smile:

I’ve also haven’t been able to reproduce on Ubuntu 14.04 (ansible 1.5.4) so it seems it might just be an old version not working a bit wonky…
Thanks again for the prompt reply. Seems upgrading to a more recent (non-apt due to 10.04 host) might solve the issue?

I’m not aware of any recent hanging scenarios in any version, FWIW – except in cases where a command might have gone interactive (depends on the command).

Well as said, the command example requires no sudo, isnt particularly
heavy, just returns the hostname :slight_smile: (also tried "-m ping" to no avail)

Thus all the following examples exhibit the same behaviour:
ansible office -vvvvv -a "uptime"
ansible office -vvvvv -a "hostname"
ansible office -vvvvv -a "w"
ansible office -vvvvv -m ping

control host: Ubuntu 10.04
ansible --version: ansible 1.4.5
python --version: Python 2.6.5
Met vriendelijke groet,

Robin Speekenbrink

Please paste the full command line you are running (including the shell prompt) and the full output you get (up to and including the next shell prompt).

Thanks!

Here you go, doesnt differ much from my opening post:
root@host4:~# ansible office -vvvv -a "uptime"
<host1> ESTABLISH CONNECTION FOR USER: root on PORT 22 TO host1
<host2> ESTABLISH CONNECTION FOR USER: root on PORT 22 TO host2
<host4> ESTABLISH CONNECTION FOR USER: root on PORT 22 TO host4
<host3> ESTABLISH CONNECTION FOR USER: root on PORT 22 TO host3
<host1> EXEC /bin/sh -c 'mkdir -p
$HOME/.ansible/tmp/ansible-1400077153.93-230744874133396 && echo
$HOME/.ansible/tmp/ansible-1400077153.93-230744874133396'
<host1> REMOTE_MODULE command uptime
<host1> PUT /tmp/tmpHXoNFe TO
/root/.ansible/tmp/ansible-1400077153.93-230744874133396/command
<host3> EXEC /bin/sh -c 'mkdir -p
$HOME/.ansible/tmp/ansible-1400077153.91-47758668405338 && echo
$HOME/.ansible/tmp/ansible-1400077153.91-47758668405338'
<host2> EXEC /bin/sh -c 'mkdir -p
$HOME/.ansible/tmp/ansible-1400077154.0-155050846726559 && echo
$HOME/.ansible/tmp/ansible-1400077154.0-155050846726559'
<host1> EXEC /bin/sh -c '/usr/bin/python
/root/.ansible/tmp/ansible-1400077153.93-230744874133396/command; rm
-rf /root/.ansible/tmp/ansible-1400077153.93-230744874133396/

/dev/null 2>&1'

<host3> REMOTE_MODULE command uptime
<host3> PUT /tmp/tmpHXoNFe TO
/root/.ansible/tmp/ansible-1400077153.91-47758668405338/command
<host2> REMOTE_MODULE command uptime
<host2> PUT /tmp/tmpRSTQ3_ TO
/root/.ansible/tmp/ansible-1400077154.0-155050846726559/command
<host2> EXEC /bin/sh -c '/usr/bin/python
/root/.ansible/tmp/ansible-1400077154.0-155050846726559/command; rm
-rf /root/.ansible/tmp/ansible-1400077154.0-155050846726559/

/dev/null 2>&1'

<host3> EXEC /bin/sh -c '/usr/bin/python
/root/.ansible/tmp/ansible-1400077153.91-47758668405338/command; rm
-rf /root/.ansible/tmp/ansible-1400077153.91-47758668405338/

/dev/null 2>&1'

<host4> EXEC /bin/sh -c 'mkdir -p
$HOME/.ansible/tmp/ansible-1400077154.08-121377164394763 && echo
$HOME/.ansible/tmp/ansible-1400077154.08-121377164394763'
<host4> REMOTE_MODULE command uptime
<host4> PUT /tmp/tmpHXoNFe TO
/root/.ansible/tmp/ansible-1400077154.08-121377164394763/command
<host4> EXEC /bin/sh -c '/usr/bin/python
/root/.ansible/tmp/ansible-1400077154.08-121377164394763/command; rm
-rf /root/.ansible/tmp/ansible-1400077154.08-121377164394763/

/dev/null 2>&1'

^C32
ERROR: interrupted

After a few minutes i CTRL-C (thus ^C32 and the error) otherwise the
prompt would never be returned

Running the uptime command on a single host (out of the office group)
through strace:
strace ansible host3 -vvvv -a "uptime"
[... alot ... ]
but ends in
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource
temporarily unavailable)
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource
temporarily unavailable)
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xdd3540, FUTEX_WAKE_PRIVATE, 1) = 1
repeating over and over again...

Hope this helps!
Met vriendelijke groet,

Robin Speekenbrink