首页 > 解决方案 > 无法使用 ansible 创建 postgres 数据库

问题描述

这是我的代码:

- name: Instalation of postgresql-9.6
  apt:
    name: postgresql-9.6

- name: start postgresql service
  service: name=postgresql state=restarted enabled=yes

- name: create a database
  become_user: postgres
  postgresql_db:
    name: managys
    encoding: UTF-8
    lc_collate: de_DE.UTF-8
    template: template0
    state: present

- name: crate user for database
  become: yes
  become_user: postgres
  postgresql_user:
    db: template0
    name: Odoo
    password: Odoo
    priv: ALL
    state: present

这是执行主剧本后的错误:

完整的追溯是:

Traceback (most recent call last):
  File "/tmp/ansible_postgresql_db_payload_ce8a5D/__main__.py", line 421, in main
    db_connection = psycopg2.connect(database=maintenance_db, **kw)
  File "/usr/lib/python2.7/dist-packages/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
OperationalError: FATAL:  Peer authentication failed for user "postgres"


fatal: [172.17.0.2]: FAILED! => {
    "changed": false, 
    "invocation": {
        "module_args": {
            "db": "managys", 
            "encoding": "UTF-8", 
            "lc_collate": "de_DE.UTF-8", 
            "lc_ctype": "", 
            "login_host": "", 
            "login_password": "", 
            "login_unix_socket": "", 
            "login_user": "postgres", 
            "maintenance_db": "postgres", 
            "name": "managys", 
            "owner": "", 
            "port": 5432, 
            "ssl_mode": "prefer", 
            "ssl_rootcert": null, 
            "state": "present", 
            "target": "", 
            "target_opts": "", 
            "template": "template0"
        }
    }, 
    "msg": "unable to connect to database: FATAL:  Peer authentication failed for user \"postgres\"\n"
}

标签: postgresqlansible

解决方案


become_user: postgres 仅在执行 ansible 的用户位于目标服务器的 sudoers 文件中时才起作用。如果没有,那么我们必须更新 postgres 的配置文件。

下面的代码对我有用

---
- name: test
  hosts: localhost
  tasks:
    - name: Instalation of postgresql-9.6
      apt:
      name: postgresql-9.6

    - name: start postgresql service
      service: name=postgresql state=restarted enabled=yes

    - name: create a database
      postgresql_db:
        name: managys
        encoding: UTF-8
        template: template0
        state: present
      become_user: postgres
      become: yes

推荐阅读