Ansible 2.2 创建 Postgresql 数据库

Ansible 2.2 Create Postgresql Database

我是 ansible (2.2.1) 的新手,并且已经开始从我们的 fabric 脚本迁移到 ansible,我发现它在结构方面更好一些。我遇到了 运行 一个问题,它应该很简单,但由于我不了解 ansible,所以我不确定如何进行。截至目前,我正在 运行针对 vagrant 框进行此操作。

问题与用户权限和 postgres 有关。

假设我有这本剧本

- hosts: web
  become: yes
  become_user: root

  vars:
    dbname: myapp

  tasks:
  - name: ensure database is created
    postgresql_db: name={{dbname}}

我无法使这个简单的示例起作用!满足所有依赖项。如果我用 mysql 做同样的事情,这工作正常,但在这里我遇到 unable to connect to database: FATAL: Peer authentication failed for user "postgres" 的问题。 在 mysql 中,我使用密码为空的 "root" 用户,这是有效的,因为我知道该用户是在安装时使用空白密码创建的。

postgresql安装完成后创建了一个用户postgres,所以该用户存在。作为 root,我应该可以通过说我是 postgres 用户来登录。我是否遗漏了一些关于如何完成的事情?如果登录服务器并 sudo -su postgres && psql,它工作得很好。

我也尝试通过我想要 运行 的任务添加 become_user: postgres 但后来我遇到 unprivileged user 问题。

有什么遗漏的想法吗?

找到了一些变通办法和解决方案,前提是您可以放弃一些安全措施(这是有道理的,这就是出于这个原因的问题)。

更多人在这个 github 问题线程中对新的 ansible 有这个问题 https://github.com/ansible/ansible/issues/16048

我最后做的是 ansible.cfg 文件中的设置 allow_world_readable_tmpfiles = True。然后这不再是问题,但您会收到警告。我只在处理 postgres 角色时需要此设置,所以也许我最终会将其拆分或将设置放在不太全局的地方。