ansible sudo_user挂起几分钟然后失败(在centos6.5.1 vagrant vm中)

时间:2014-01-23 23:02:50

标签: vagrant ansible

我有两个简单的任务:

- name: I am 
  shell: "echo `id`"

- name: say hello
  shell: echo "postgres saying hello"
  sudo_user: postgres

第二个任务在长时间停顿后失败,输出低于 (它与流浪者一起运行,详细程度为vvv) (是的,我已经验证用户postgres存在, 我可以从VM内部做一个sudo su postgres

TASK: [postgresql | I am] ***************************************************** 
changed: [192.168.78.6] => {"changed": true, "cmd": "echo `id` ", "delta": "0:00:00.002511", "end": "2014-01-23 22:49:14.161249", "item": "", "rc": 0, "start": "2014-01-23 22:49:14.158738", "stderr": "", "stdout": "uid=0(root) gid=0(root) groups=0(root)"}

TASK: [postgresql | say hello] ************************************************ 
fatal: [192.168.78.6] => failed to parse: [sudo via ansible, key=fnfgfnxabemrzbfixwgoksvgjrfzplxf] password: 


FATAL: all hosts have already failed -- aborting

事情在centos6.5.1 vagrant vm中运行

2 个答案:

答案 0 :(得分:6)

它对Centos6.5显然不起作用。假设是它无法通过postgres系统用户密码的提示,尽管这是推测。

在postgresql_ *命令期间,如何克服问题如何克服ansible到postgres(后者将通过默认的pg_hba.conf配置使用对等身份验证)的问题,这是一个解决方法:

- hosts: all
  sudo: yes
  gather_facts: no

  tasks:
    - lineinfile: dest='/var/lib/pgsql/9.3/data/pg_hba.conf' regexp="^local\s+all\s+all\s+peer$" line="local    all        all                      trust" backrefs=yes

    - name: restart after line change
      action: shell sudo /etc/init.d/postgresql-9.3 restart

    - name: create database
      postgresql_db: name=acme
      sudo: no                         # NB!!
      sudo_user: postgres

我们正在将本地访问权限从peer更改为trust,需要在另一个lineinfile执行所需操作或使用md5或任何所需配置替换文件后将其删除然后重新启动。以上内容仅供参考。这是一个巨大的黑客,但将允许您发出在Centos6下工作的ansible postgresql模块命令。请注意,我们为postgresql任务设置了sudo

我确认问题存在且黑客适用于此vm框:

https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box

答案 1 :(得分:2)

问题可能出在sudoers配置中。我在Debian 7.6盒子上遇到与此问题相同的问题,/etc/sudoers中有以下行:

%sudo   ALL=(ALL:ALL) NOPASSWD: ALL

我将该行更改为以下内容后:

%sudo   ALL=(ALL) NOPASSWD: ALL

Ansible开始按预期工作,即它能够使用postgressudo用户身份执行任务。