3

我正在尝试运行 ansible 剧本,在收集事实后,Ansible 会暂停第一个任务,这应该花费不到一秒的时间并且不会继续。我可以检查哪些内容?我试过了:

  • 详细模式(-vvv)..但我没有看到太多有用的信息
  • 确保连接工作(ansible all -m ping 工作)
  • 运行各种命令(使用-t)..虽然它们都暂停了
  • 将命令更改为仅 echo 'hello' .. ansible 仍然暂停
4

7 回答 7

4

您不需要无密码 sudo,只需将您的选项与您的 sudo 环境相匹配。如果您需要提供 sudo 密码,您只需将 -K (--ask-sudo-pass) 添加到您的 ansible 调用中。

于 2013-08-29T19:13:33.570 回答
0

发现我需要无密码 sudo .. 我更改了 /etc/sudoers:

%admin ALL=(ALL) NOPASSWD:ALL
于 2013-08-22T18:38:28.507 回答
0

默认情况下,Ansible 会在 ssh-the-command-line 阻塞的情况下阻塞。有时,如果您要推送到大量服务器并且其中一个登录失败并且正在询问您的私钥密码或一些愚蠢的东西,这可能会咬到您。像这样运行你的剧本:

ANSIBLE_SSH_ARGS="-o BatchMode=yes" ansible-playbook -i inventory/foo playbook.yml

应该只是让 ssh 失败而不是提示你。

于 2015-04-11T23:55:41.683 回答
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"
}
于 2015-02-04T03:37:26.950 回答
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
于 2015-05-25T11:42:41.937 回答
0

我的两分钱 - 无密码 sudo 可能不是一个合适的解决方案,因为在大多数情况下,节点受 sudo 密码保护。最佳实践是在 playbook 中使用 sudo 密码作为变量并从配置文件中传递值,并且可以使用 ansible-vault 对该配置文件进行加密。

于 2015-06-12T16:14:39.803 回答
0

问题的可能来源可能与https://github.com/ansible/ansible/issues/30411有关,这是一个 Ansible 无限期挂起的错误报告。Ansible 挂起的确切位置没有显示输出。在此 Github 问题之后,问题本身不在 Ansible 中,而是在 Ansible 当前连接到的目标主机上(例如,由于挂载不可用,df 无法工作)。这只是今天发生在我身上,当时在一大群目标上运行剧本时,Ansible 会在没有更多信息的情况下挂起。我遇到了 Github 问题,最终找到了有问题的目标主机;是的,它是一个悬挂的 NFS 挂载。

于 2019-01-30T12:23:21.533 回答