我正在尝试运行一本ansible剧本,在收集了事实之后,Ansible暂停了第一项任务,该任务应该不到一秒钟,不会继续前进。我可以查看哪些内容?我试过了:
答案 0 :(得分:4)
您不需要无密码的sudo,只需将您的选项与您的sudo环境相匹配即可。如果你需要提供一个sudo密码,你可以在你的ansible调用中添加-K(--ask-sudo-pass)。
答案 1 :(得分:0)
发现我需要无密码的sudo ..我改变了/ etc / sudoers:
%admin ALL=(ALL) NOPASSWD:ALL
答案 2 :(得分:0)
尝试" -k"选项和系统必须安装sshpass
ansible servers -vvvv -m ping -i inventory -u vagrant -k
输出
SSH password: <<USEr PASSWORD>>
控制台输出详细
<precise32> ESTABLISH CONNECTION FOR USER: vagrant
<precise32> REMOTE_MODULE ping
<precise32> EXEC ['sshpass', '-d6', 'ssh', '-C', '-tt', '-vvv', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'GSSAPIAuthentication=no', '-o', 'PubkeyAuthentication=no', '-o', 'ConnectTimeout=10', 'precise32', "/bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1423020915.88-101376543892740 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1423020915.88-101376543892740 && echo $HOME/.ansible/tmp/ansible-tmp-1423020915.88-101376543892740'"]
<precise32> PUT /tmp/tmpNGxttI TO /home/vagrant/.ansible/tmp/ansible-tmp-1423020915.88-101376543892740/ping
<precise32> EXEC ['sshpass', '-d6', 'ssh', '-C', '-tt', '-vvv', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'GSSAPIAuthentication=no', '-o', 'PubkeyAuthentication=no', '-o', 'ConnectTimeout=10', 'precise32', u"/bin/sh -c 'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /home/vagrant/.ansible/tmp/ansible-tmp-1423020915.88-101376543892740/ping; rm -rf /home/vagrant/.ansible/tmp/ansible-tmp-1423020915.88-101376543892740/ >/dev/null 2>&1'"]
最终输出
precise32 | success >> {
"changed": false,
"ping": "pong"
}
答案 3 :(得分:0)
默认情况下,Ansible会在ssh-the-command-line阻塞的情况下阻止。如果您正在推送大量服务器并且其中一个登录失败并且要求您提供私钥密码或者愚蠢的话,这种情况偶尔会让您感到困惑。像这样运行你的剧本:
ANSIBLE_SSH_ARGS="-o BatchMode=yes" ansible-playbook -i inventory/foo playbook.yml
应该只是让ssh失败而不是提示你。
答案 4 :(得分:0)
你的剧本在执行某种需要凭据的任务时会挂起。你必须指定剧本中的用户,在播放剧本时必须使用它,它应该看起来像这样
hosts: thinkingmonster
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
– name: ensure apache is installed
yum: pkg=httpd state=latest
– name: place configuration file
template: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd.conf
notify:
– restart apache
– name: ensure apache is running
service: name=httpd state=started enabled=yes
handlers:
– name: restart apache
service: name=httpd state=restarted
检查我是否以root身份使用了远程用户。但是如果你没有在剧本中指定这个,那么你必须在运行你的剧本时在命令行上传递
ansible-playbook <your-playbook-name> -u <user> -k <password>
如果sudo用户需要执行任务,那么
ansible-playbook <your-playbook-name> -u <user> -k <password> --sudo -K
答案 5 :(得分:0)
我的两分钱 - 无密码sudo可能不是一个合适的解决方案,因为在大多数情况下节点是受密码保护的。最好在playbook中使用sudo密码作为变量,并从配置文件传递值,并且可以使用ansible-vault加密此配置文件。
答案 6 :(得分:0)
问题的可能根源可能与https://github.com/ansible/ansible/issues/30411有关,这是Ansible无限期挂起的错误报告。完全悬挂Ansible的位置未显示任何输出。 出现此Github问题后,问题本身不在Ansible中,而是在Ansible当前连接的目标主机上(例如,由于无法安装,df无法正常工作)。 今天,当我在大量目标上运行一本剧本时,这件事刚好发生在我身上,而Ansible却没有更多信息就挂了。我遇到了Github问题,最终找到了问题主机。是的,那是一个悬挂的NFS支架。