我有一个 ansible playbook,它在远程主机“10.8.8.88”上执行 shell 脚本的次数与作为参数提供的数字文件一样多
ansible-playbook test.yml -e files="file1,file2,file3,file4"
剧本如下所示:
- name: Call ssh
shell: ~./execute.sh {{ item }}
with_items: {{ files.split(',') }}
这适用于较少的文件,例如 10 到 15 个文件。但我碰巧在论点中有 145 个文件。
这是执行中断并在中途播放失败并显示以下错误消息的时间:
TASK [shell] *******************************************************************
[WARNING]: conditional statements should not include jinja2 templating
delimiters such as {{ }} or {% %}. Found: entrycurrdb.stdout.find("{{ BASEPATH
}}/{{ vars[(item | splitext)[1].split('.')[1]] }}/{{ item | basename }}") == -1
and actualfile.stat.exists == True
[WARNING]: sftp transfer mechanism failed on [10.8.8.88]. Use ANSIBLE_DEBUG=1
to see detailed information
[WARNING]: scp transfer mechanism failed on [10.8.8.88]. Use ANSIBLE_DEBUG=1
to see detailed information
fatal: [10.8.8.88]: UNREACHABLE! => {"changed": false, "msg": "Data could not be sent to remote host \"10.8.8.88\". Make sure this host can be reached over ssh: ", "unreachable": true}
NO MORE HOSTS LEFT *************************************************************
PLAY RECAP *********************************************************************
10.8.8.88 : ok=941 changed=220 unreachable=1 failed=0 skipped=145 rescued=0 ignored=0
localhost : ok=7 changed=3 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
Build step 'Execute shell' marked build as failure
Finished: FAILURE
我有最新的 Ansible,ansible.cfg 中的“管道”和“ssh”设置是默认设置。
我有以下问题。
我该如何解决上述问题?
我想这可能是由于网络问题。是否可以对远程服务器运行无限 ssh ping 以进行测试以查看 ansible 命令行是否中断?这将帮助我证明我的情况。我正在寻找一个使用 ssh 不断 ping 远程的示例命令。
如果发生此类故障,可以强制 ansible 重试 ssh 连接几次,以便它可以在重试期间连接。如果是这样,我会很感激可以在 ansible-playbook 代码中的何处以及如何将其设置为 vars 变量,而不是在 ansible.cfg 文件中? https://docs.ansible.com/ansible/2.4/intro_configuration.html#retries
类似于:
vars:
ansible_ssh_private_key_file: "{{ key1 }}"
非常感谢 !!