Ansible sudo_user在CentOS 6.5.1 Vagrant虚拟机中挂起几分钟后失败。

4

我有两个简单的任务:

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

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

第二个任务经过漫长的暂停后失败了,以下是输出结果(它正在使用具有详细级别vvv的vagrant运行)(是的,我已经验证了用户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虚拟机上。


不确定,但我认为在 say hello 动作中你还需要一个 'sudo: True'。 - mestachs
2个回答

6

显然,它不适用于Centos6.5。推测的原因是它无法通过提示 postgres系统用户密码,但这只是猜测。

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

- 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 关闭。
我确认问题存在,并且这种黑客技术适用于此虚拟机。
https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box

2
问题可能在sudoers配置中。我在一个Debian 7.6的系统上遇到了与这个问题完全相同的问题,原因是/etc/sudoers文件中有以下行:
%sudo   ALL=(ALL:ALL) NOPASSWD: ALL

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

%sudo   ALL=(ALL) NOPASSWD: ALL

Ansible开始正常工作了,也就是说它能够使用sudo以postgres用户的身份执行任务。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接