我想编写一个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,只能从特定的远程主机访问数据库。
由于
答案 0 :(得分:1)
在非默认位置创建一个.pgpass
文件作为游戏手册的一部分,并将密码放在那里。在PGPASSFILE
环境变量中指定其位置。一旦不再需要就删除它。
请参阅libpq environment variables。
或者我认为您可以使用连接字符串进行连接并将密码指定为连接字符串的一部分,例如
'dbname=mydb user=fred password=borkbork'
(未测试的)
答案 1 :(得分:1)
您可以使用提供四个新模块的新角色:
在这里查看文档:{{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