vars:
servers:
- name: centos
port: 22
tasks:
- name: Check if remote port
wait_for: host={{ item.name }} port={{ item.port }} timeout=1
ignore_errors: True
register: out
with_items: "{{ servers }}"
- debug: var=out
- name: Save remote port
shell: echo "{{ item.host }}" > /tmp/x_output.csv
args:
executable: /bin/bash
with_items: "{{ out.results }}"
PLAY [all] **************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************
ok: [centos]
TASK [telnet : Check if remote port] ************************************************************************************************
ok: [centos] => (item={u'name': u'centos', u'port': u'22'})
TASK [telnet : debug] ***************************************************************************************************************
ok: [centos] => {
"out": {
"changed": false,
"msg": "All items completed",
"results": [
{
"_ansible_ignore_errors": true,
"_ansible_item_result": true,
"_ansible_no_log": false,
"_ansible_parsed": true,
"changed": false,
"elapsed": 0,
"failed": false,
"invocation": {
"module_args": {
"active_connection_states": [
"ESTABLISHED",
"FIN_WAIT1",
"FIN_WAIT2",
"SYN_RECV",
"SYN_SENT",
"TIME_WAIT"
],
"connect_timeout": 5,
"delay": 0,
"exclude_hosts": null,
"host": "centos",
"msg": null,
"path": null,
"port": 22,
"search_regex": null,
"sleep": 1,
"state": "started",
"timeout": 1
}
},
"item": {
"name": "centos",
"port": "22"
},
"path": null,
"port": 22,
"search_regex": null,
"state": "started"
}
]
}
}
TASK [telnet : Save remote port] ****************************************************************************************************
fatal: [centos]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'host'\n\nThe error appears to have been in '/home/xxxxxx/ansible/tso-playbook/roles/telnet/tasks/main.yml': line 17, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Save remote port\n ^ here\n\nexception type: <class 'ansible.errors.AnsibleUndefinedVariable'>\nexception: 'dict object' has no attribute 'host'"}
to retry, use: --limit @/home/xxxxxxx/ansible/tso-playbook/telnet.retry
PLAY RECAP **************************************************************************************************************************
centos : ok=3 changed=0 unreachable=0 failed=1
Примечание: я публикую здесь впервые, не знаю, как правильно исправить построчно ... Я просто хочу получить доступ к out.host, который является 'centos', и сохранить его в файле csv, конечно, мне нужно чтобы сделать больше, но это первое, что мне нужно сделать, пожалуйста, помогите! Спасибо.
---
- name: Save remote port
shell: echo {{ item.changed }} > /tmp/x_output.csv
args:
executable: /bin/bash
with_items: "{{ out.results }}"
Это единственное, на что я могу сослаться, item.changed, который имеет значение "False", а на все остальные я не могу.
Зачем?
Как вы можете видеть в опубликованной вами отладке, в отличие от changed
ключ, нет host
ключ в элементах results
список.
Есть один внутри invocation
словарь, так что:
shell: echo "{{ item.invocation.module_args.host }}" > /tmp/x_output.csv
Хотя это значение, которое вы определили сами, а не возвращаемое значение.