I posted this as a bug (https://github.com/ansible/ansible/issues/11102). But it was closed saying it was a discussion. Not sure why, seems like a clear bug to me. But I'm open to be dissuaded.
----
Ansible 1.9.1 running from OSX.
- role: mongodb
mongodb_replica_set_name: "{{mongodb_rs_name}}"
mongodb_replica_set_hosts: "{{groups.mongod_rs_member}}"
- set_fact:
mongodb_candidate_master: "{{mongodb_replica_set_hosts[0]}}"
run_once: true
- shell: echo "HELLO groups.mongod_rs_member +++++++++++++++++"
delegate_to: "{{groups.mongod_rs_member[0]}}"
run_once: true
- shell: echo "HELLO mongodb_candidate_master +++++++++++++++++"
delegate_to: "{{mongodb_candidate_master}}"
run_once: true
- shell: echo "HELLO mongodb_replica_set_hosts +++++++++++++++++"
delegate_to: "{{mongodb_replica_set_hosts[0]}}"
run_once: true
TASK: [mongodb | shell echo "HELLO groups.mongod_rs_member +++++++++++++++++"] ***
<10.0.139.56> ESTABLISH CONNECTION FOR USER: ubuntu
<10.0.139.56> REMOTE_MODULE command echo "HELLO groups.mongod_rs_member +++++++++++++++++" #USE_SHELL
<10.0.139.56> EXEC ssh -C -vvv -o ControlMaster=auto -o ControlPersist=30m -o ControlPath="/Users/bkaplan/.ansible/cp/ansible-ssh-%h-%p-%r" -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ubuntu -o ConnectTimeout=10 10.0.139.56 /bin/sh -c 'sudo -k && sudo -H -S -p "[sudo via ansible, key=enrekuxbmqjtjdgsxvlukuvqlhnudrkw] password: " -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-enrekuxbmqjtjdgsxvlukuvqlhnudrkw; LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python'"'"''
changed: [10.0.139.56 -> 10.0.139.56] => {"changed": true, "cmd": "echo \"HELLO groups.mongod_rs_member +++++++++++++++++\"", "delta": "0:00:00.005216", "end": "2015-05-31 04:13:32.378158", "rc": 0, "start": "2015-05-31 04:13:32.372942", "stderr": "", "stdout": "HELLO groups.mongod_rs_member +++++++++++++++++", "warnings": []}
TASK: [mongodb | shell echo "HELLO mongodb_candidate_master +++++++++++++++++"] ***
<10.0.139.56> ESTABLISH CONNECTION FOR USER: ubuntu
<10.0.139.56> REMOTE_MODULE command echo "HELLO mongodb_candidate_master +++++++++++++++++" #USE_SHELL
<10.0.139.56> EXEC ssh -C -vvv -o ControlMaster=auto -o ControlPersist=30m -o ControlPath="/Users/bkaplan/.ansible/cp/ansible-ssh-%h-%p-%r" -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ubuntu -o ConnectTimeout=10 10.0.139.56 /bin/sh -c 'sudo -k && sudo -H -S -p "[sudo via ansible, key=xnkqbskjckeetqglyftpndfusnsyhoyq] password: " -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-xnkqbskjckeetqglyftpndfusnsyhoyq; LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python'"'"''
changed: [10.0.139.56 -> 10.0.139.56] => {"changed": true, "cmd": "echo \"HELLO mongodb_candidate_master +++++++++++++++++\"", "delta": "0:00:00.005059", "end": "2015-05-31 04:13:33.277391", "rc": 0, "start": "2015-05-31 04:13:33.272332", "stderr": "", "stdout": "HELLO mongodb_candidate_master +++++++++++++++++", "warnings": []}
TASK: [mongodb | shell echo "HELLO mongodb_replica_set_hosts +++++++++++++++++"] ***
<{> ESTABLISH CONNECTION FOR USER: ubuntu
<{> REMOTE_MODULE command echo "HELLO mongodb_replica_set_hosts +++++++++++++++++" #USE_SHELL
<{> EXEC ssh -C -vvv -o ControlMaster=auto -o ControlPersist=30m -o ControlPath="/Users/bkaplan/.ansible/cp/ansible-ssh-%h-%p-%r" -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ubuntu -o ConnectTimeout=10 { /bin/sh -c 'sudo -k && sudo -H -S -p "[sudo via ansible, key=mqgojxehsqcpahfvfcdimgoedvygtvvb] password: " -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-mqgojxehsqcpahfvfcdimgoedvygtvvb; LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python'"'"''
fatal: [10.0.139.56 -> {] => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over sshnot sure what 'works' means in this context
2) ssh ... -o ConnectTimeout=10 10.0.139.56 /bin/sh -c ...
3) ssh ... -o ConnectTimeout=10 { /bin/sh -c ...the ssh ip in task 3 is '{' which indicates that the [0] is applied
to the 'template string' and not to the resulting array you expect.
This makes the 3rd task fail as it cannot ssh to '{'.
- set_fact:
mongodb_candidate_master: "{{mongodb_replica_set_hosts[0]}}"
run_once: true
- name: var groups.mongod_rs_member[0]
debug: var=groups.mongod_rs_member[0]
run_once: true
- shell: echo "HELLO groups.mongod_rs_member +++++++++++++++++"
delegate_to: "{{groups.mongod_rs_member[0]}}"
run_once: true
- name: var mongodb_candidate_master
debug: var=mongodb_candidate_master
run_once: true
- shell: echo "HELLO mongodb_candidate_master +++++++++++++++++"
delegate_to: "{{mongodb_candidate_master}}"
run_once: true
- name: var mongodb_replica_set_hosts[0]
debug: var=mongodb_replica_set_hosts[0]
run_once: true
- name: msg mongodb_replica_set_hosts[0]
debug: msg="{{mongodb_replica_set_hosts[0]}}"
run_once: true
- debug: msg="{{mongodb_replica_set_hosts[0]}}"
run_once: true
- shell: echo "HELLO mongodb_replica_set_hosts +++++++++++++++++"
delegate_to: "{{mongodb_replica_set_hosts[0]}}"
run_once: trueansible❯ ansible-playbook -i inventory/aws/staging playbooks/configure/mongod.yml --skip-tags base ops/git/master !+
PLAY [Base ansible configuration (packages)] **********************************
GATHERING FACTS ***************************************************************
ok: [10.0.137.189]
ok: [10.0.139.51]
ok: [10.0.136.46]
PLAY [Base ansible configuration (configure)] *********************************
GATHERING FACTS ***************************************************************
ok: [10.0.137.189]
ok: [10.0.139.51]
ok: [10.0.136.46]
PLAY [Base ansible configuration (users)] *************************************
GATHERING FACTS ***************************************************************
ok: [10.0.137.189]
ok: [10.0.139.51]
ok: [10.0.136.46]
PLAY [Configure mongodb replicaset cluster] ***********************************
GATHERING FACTS ***************************************************************
ok: [10.0.136.46]
ok: [10.0.137.189]
ok: [10.0.139.51]
TASK: [debug var=groups.mongod_rs_member] *************************************
ok: [10.0.136.46] => {
"var": {
"groups.mongod_rs_member": [
"10.0.136.46",
"10.0.139.51",
"10.0.137.189"
]
}
}
ok: [10.0.139.51] => {
"var": {
"groups.mongod_rs_member": [
"10.0.136.46",
"10.0.139.51",
"10.0.137.189"
]
}
}
ok: [10.0.137.189] => {
"var": {
"groups.mongod_rs_member": [
"10.0.136.46",
"10.0.139.51",
"10.0.137.189"
]
}
}
TASK: [mongodb | set_fact ] ***************************************************
ok: [10.0.136.46]
TASK: [mongodb | var groups.mongod_rs_member[0]] ******************************
ok: [10.0.136.46] => {
"var": {
"groups.mongod_rs_member[0]": "10.0.136.46"
}
}
TASK: [mongodb | shell echo "HELLO groups.mongod_rs_member +++++++++++++++++"] ***
changed: [10.0.136.46 -> 10.0.136.46]
TASK: [mongodb | var mongodb_candidate_master] ********************************
ok: [10.0.136.46] => {
"var": {
"mongodb_candidate_master": "10.0.136.46"
}
}
TASK: [mongodb | shell echo "HELLO mongodb_candidate_master +++++++++++++++++"] ***
changed: [10.0.136.46 -> 10.0.136.46]
TASK: [mongodb | var mongodb_replica_set_hosts[0]] ****************************
ok: [10.0.136.46] => {
"var": {
"mongodb_replica_set_hosts[0]": "10.0.136.46"
}
}
TASK: [mongodb | msg mongodb_replica_set_hosts[0]] ****************************
ok: [10.0.136.46] => {
"msg": "10.0.136.46"
}
TASK: [mongodb | debug msg="{"] ***********************************************
ok: [10.0.136.46] => {
"msg": "10.0.136.46"
}
TASK: [mongodb | shell echo "HELLO mongodb_replica_set_hosts +++++++++++++++++"] ***
fatal: [10.0.136.46 -> {] => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh
FATAL: all hosts have already failed -- aborting
- name: Provision Ops RDS instance
hosts: localhost
connection: local
gather_facts: no
tags: [control]
tasks:
...
- shell: |
echo {{groups.consul_server[0]}} && hostname -i && curl localhost:8500/v1/catalog/services
register: __catalog
delegate_to: groups.consul_server[0]
TASK: [shell echo {{groups.consul_server[0]}} && hostname -i && curl localhost:8500/v1/catalog/services
] ***
<groups.consul_server[0]> REMOTE_MODULE command echo 10.0.196.116 && hostname -i && curl localhost:8500/v1/catalog/services #USE_SHELL
<groups.consul_server[0]> EXEC ['/bin/sh', '-c', 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1437044596.27-54518627543713 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1437044596.27-54518627543713 && echo $HOME/.ansible/tmp/ansible-tmp-1437044596.27-54518627543713']
<groups.consul_server[0]> PUT /tmp/tmpTGBlM3 TO /home/bkaplan/.ansible/tmp/ansible-tmp-1437044596.27-54518627543713/command
<groups.consul_server[0]> EXEC ['/bin/sh', '-c', u'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /home/bkaplan/.ansible/tmp/ansible-tmp-1437044596.27-54518627543713/command; rm -rf /home/bkaplan/.ansible/tmp/ansible-tmp-1437044596.27-54518627543713/ >/dev/null 2>&1']
failed: [localhost -> groups.consul_server[0]] => {"changed": true, "cmd": "echo 10.0.196.116 && hostname -i && curl localhost:8500/v1/catalog/services", "delta": "0:00:00.012358", "end": "2015-07-16 16:33:16.332372", "rc": 7, "start": "2015-07-16 16:33:16.320014", "warnings": []}
stderr: % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (7) Failed to connect to localhost port 8500: Connection refused
stdout: 10.0.196.116
127.0.1.1 - name: Test delegate to
shell: echo "{{ groups.consul_server[0] }}" && hostname -i
register: __hostname
delegate_to: "{{ groups.consul_server[0] }}"
- debug: var=__hostname
TASK: [Test delegate to] *********************************************
<10.0.196.116> REMOTE_MODULE command echo "10.0.196.116" && hostname -i #USE_SHELL
<10.0.196.116> EXEC ['/bin/sh', '-c', 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1437108695.64-26819269533917 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1437108695.64-26819269533917 && echo $HOME/.ansible/tmp/ansible-tmp-1437108695.64-26819269533917']
<10.0.196.116> PUT /tmp/tmpDXWJFH TO /home/bkaplan/.ansible/tmp/ansible-tmp-1437108695.64-26819269533917/command
<10.0.196.116> EXEC ['/bin/sh', '-c', u'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /home/bkaplan/.ansible/tmp/ansible-tmp-1437108695.64-26819269533917/command; rm -rf /home/bkaplan/.ansible/tmp/ansible-tmp-1437108695.64-26819269533917/ >/dev/null 2>&1']
changed: [localhost -> 10.0.196.116] => {"changed": true, "cmd": "echo \"10.0.196.116\" && hostname -i", "delta": "0:00:00.004458", "end": "2015-07-17 10:21:35.693136", "rc": 0, "start": "2015-07-17 10:21:35.688678", "stderr": "", "stdout": "10.0.196.116\n127.0.1.1", "warnings": []}
TASK: [debug var=__hostname] **************************************************
ok: [localhost] => {
"var": {
"__hostname": {
"changed": true,
"cmd": "echo \"10.0.196.116\" && hostname -i",
"delta": "0:00:00.004458",
"end": "2015-07-17 10:21:35.693136",
"invocation": {
"module_args": "echo \"10.0.196.116\" && hostname -i",
"module_name": "shell"
},
"rc": 0,
"start": "2015-07-17 10:21:35.688678",
"stderr": "",
"stdout": "10.0.196.116\n127.0.1.1",
"stdout_lines": [
"10.0.196.116",
"127.0.1.1"
],
"warnings": []
}
}
}
- name: Test delegate to
shell: echo "{{ groups.consul_server[0] }}" && hostname -i
register: __hostname
delegate_to: "{{ groups.consul_server[0] }}"
- debug: var=__hostname"stdout_lines": [
"10.0.196.116", <--- echo "{{ groups.consul_server[0] }}"
"127.0.1.1" <--- hostname -i
],