使用ansible playbook运行postgresql命令。 Postgresql需要密码

时间:2015-09-30 11:08:24

标签: database postgresql ansible-playbook

我想编写一个Ansible playbook,试图处理一些postgresql命令。我之前做过类似的剧本,但在这种情况下,Postgresql并不需要密码。

我以为我可以使用我的旧剧本,这很好,但我错了。此数据库需要密码。我知道Ansible有postgresql支持,这很好(postgresql_db,postgresql_ext,postgresql_lang,postgresql_privs,postgresql_user),我可以做一半的工作,它处理密码很好,但我无法弄清楚如何发送一个简单的sql命令到我的数据库。在我的旧剧本中,我使用了" shell"命令发送这些请求(例如:shell: "psql {{ databases.name }} --username {{ admin_user}} -c 'DROP SCHEMA public CASCADE;'")。

我也想上传一个db_dump。之前我使用过psql,但这个新数据库需要密码......

有人可以给我提示如何处理这种情况吗?我使用ansible 2.0,只能从特定的远程主机访问数据库。

由于

3 个答案:

答案 0 :(得分:1)

在非默认位置创建一个.pgpass文件作为游戏手册的一部分,并将密码放在那里。在PGPASSFILE环境变量中指定其位置。一旦不再需要就删除它。

请参阅libpq environment variables

或者我认为您可以使用连接字符串进行连接并将密码指定为连接字符串的一部分,例如

 'dbname=mydb user=fred password=borkbork'

(未测试的)

答案 1 :(得分:1)

您可以使用提供四个新模块的新角色:

  • postgresql_table:确保数据库中存在(或不存在)表
  • postgresql_row:确保表中存在(或不存在)行
  • postgresql_query:在数据库中执行任意查询并返回结果
  • postgresql_command:在数据库中执行任意查询

在这里查看文档:{​​{3}}

答案 2 :(得分:0)

您可以在Ansible中使用以下模块 https://docs.ansible.com/ansible/latest/modules/postgresql_query_module.html

例如:

- name: Select query to db acme with positional arguments and non-default credentials
  postgresql_query:
    db: acme
    login_user: django
    login_password: mysecretpass
    query: SELECT * FROM acme WHERE id = %s AND story = %s
    positional_args:
    - 1
    - test