Как перевести эту команду PostgreSQL в Ansible? - PullRequest
0 голосов
/ 20 июня 2019

Я хочу создать пользователя и базу данных в PostgreSQL 9.6 через Ansible.

В оболочке я сделал это следующим образом: sudo -u postgres createuser -S -D -R -P ckan_default создалb -Ockan_default ckan_default -E utf-8

Я запускаю все, что есть в Ansible Tower.

Я попробовал все, что можно сделать, с различными вариантами, такими как удаление, становление и становление:

- name: Create postgres user 
  become: yes
  become_user: postgres
  postgresql_user:
    name: "ckan_default"
    password: "ckan_default"
    role_attr_flags: NOCREATEDB, NOCREATEROLE, NOSUPERUSER

- name: Create DB
  become: yes
  become_user: postgres
  postgresql_db:
    name: ckan_default
    encoding: UTF-8
    owner: ckan_default

Ошибки, которые я получаю:

{
    "_ansible_parsed": true,
    "exception": "Traceback (most recent call last):\n  File \"/tmp/ansible_postgresql_db_payload_FsaEtw/__main__.py\", line 421, in main\n    db_connection = psycopg2.connect(database=maintenance_db, **kw)\n  File \"build/bdist.linux-x86_64/egg/psycopg2/__init__.py\", line 126, in connect\n    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)\nOperationalError: FATAL:  Peer authentication failed for user \"postgres\"\n\n",
    "_ansible_no_log": false,
    "changed": false,
    "invocation": {
        "module_args": {
            "ssl_rootcert": null,
            "ssl_mode": "prefer",
            "target": "",
            "encoding": "UTF-8",
            "login_user": "postgres",
            "login_host": "",
            "target_opts": "",
            "db": "ckan_default",
            "lc_ctype": "",
            "owner": "",
            "port": 5432,
            "login_unix_socket": "",
            "state": "present",
            "template": "",
            "login_password": "",
            "maintenance_db": "postgres",
            "lc_collate": "",
            "name": "ckan_default"
        }
    },
    "msg": "unable to connect to database: FATAL:  Peer authentication failed for user \"postgres\"\n"
}

Ответы [ 2 ]

0 голосов
/ 29 июня 2019

Вы были не слишком далеко: оказалось, что / etc / sudoers нужно было изменить.

Были добавлены строки 2 и 4. стало: да также больше не было нужно.

root ALL=(ALL) NOPASSWD: ALL
{{ usr_name }} ALL=(ALL) NOPASSWD: ALL

%sudo ALL=(ALL) NOPASSWD: ALL
%wheel ALL=(ALL) NOPASSWD: ALL
0 голосов
/ 20 июня 2019

вы хотите установить переменную становления_пароля в качестве пароля пользователя postgres (например, postgres_password, для которого установлено значение vault_postgres_password, которое хранится в хранилище)

- name: Create postgres user 
  become: yes
  become_user: postgres
  become_pass: "{{ postgres_password }}"
  postgresql_user:
    name: "ckan_default"
    password: "ckan_default"
    role_attr_flags: NOCREATEDB, NOCREATEROLE, NOSUPERUSER

в файле group_vars / my_postgres_hosts.yml:

postgres_password: "{{ vault_postgres_password }}"

в файле group_vars / all / vault:

vault_postgres_password: "theReal-postgres-password-is-protected" 

Также посмотрите этот недавний пост: Ansible: присоединить роль к пользователю в postgres

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...