我有两个简单的任务:
- 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中运行
答案 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开始按预期工作,即它能够使用postgres
以sudo
用户身份执行任务。