Ansible postgres_user 成为麻烦

Ansible postgres_user become trouble

使用 geerlingguy.postgresql Ansible 角色,无法通过以下错误:

TASK [geerlingguy.postgresql : Ensure PostgreSQL databases are present.] ******* failed: [database_host] (item={u'name': u'database_name'}) => {"failed": true, "item": {"name": "database_name"}, "module_stderr": "sudo: a password is required\n", "module_stdout": "", "msg": "MODULE FAILURE"}

任务看起来像这样:

- name: Ensure PostgreSQL database is initialized. 
  command: "{{ postgresql_bin_path }}/initdb -D {{ postgresql_data_dir }}" 
  when: not pgdata_dir_version.stat.exists 
  become: yes 
  become_user: "{{ postgresql_user }}" 
   # See: https://github.com/ansible/ansible/issues/16048#issuecomment-229012509 
  vars: 
    ansible_ssh_pipelining: true

postgresql_user 的值是有效用户 postgres 的 OS 默认值。我正在连接的 remote_user 具有带 nopasswd 的完整 sudo 以及在此之前的所有其他任务(剧本 运行s 带 become: true)运行 没问题。我猜这与切换到非特权用户有关,但我似乎无法弄清楚。有什么想法吗?

/etc/sudoers中使用以下设置:

devops  ALL=(ALL) NOPASSWD: ALL

from :

The remote_user I'm connecting with has full sudo with nopasswd

Please show the settings from /etc/sudoers instead of describing their supposed effects.

devops    ALL=NOPASSWD: ALL

不,它没有“full sudo”(不管它是什么意思)。您允许 devops 用户仅以 root 的身份执行 运行 命令,而不是以您在 {{ postgresql_user }}.

中设置的另一个用户的身份

只需在 ansible-playbook 命令中使用 --ask-sudo-pass。它将为您提供 devops 用户的密码提示。向 sudoers 文件添加条目可能会导致事故。