介绍使用Ansible自动化部署PostgreSQL11(介绍PostgreSQL模块)
使用Ansible来构建PostgreSQL11。
初次见面,我是sinokuma。
这是我在Qiita的第一篇投稿,请多关照。
首先
这是由 Red Hat 赞助的 Ansible Blogger 2018 圣诞日历 2018 第16天的文章。
Ansible Blogger 2018 有两个主题。
-
- 介绍你喜欢的Ansible模块
- 关于该模块的使用方法(方便的关键点、技巧、失败经验等)
因此,我将介绍PostgreSQL模块。
PostgreSQL模块列表
截至2018年12月,存在六个模块。
参考:数据库模块 > PostgreSQL
PostgreSQL模块的使用方法
我正在使用这些模块进行PostgreSQL的自动配置。随着托管服务的普及,自行构建PostgreSQL的机会已经大大减少,但是当我想要在我的开发环境或者验证目的中尝试它时,有一个Playbook是非常方便的。这次我创建了一个用于配置PostgreSQL 11的Playbook。
创建架构
- name: Create schema
become_user: postgres
postgresql_schema:
name: "{{ item.name }}"
owner: "{{ item.owner|default('postgres') }}"
port: "{{ postgresql_port }}"
with_items: "{{ postgresql_schemas }}"
创建数据库
- name: Create database
become_user: postgres
postgresql_db:
name: "{{ item.name }}"
template: "{{ item.template|default('template1') }}"
lc_collate: "{{ item.lc_collate|default('C') }}"
lc_ctype: "{{ item.lc_ctype|default('C') }}"
port: "{{ postgresql_port }}"
with_items: "{{ postgresql_databases }}"
创建用户(角色)
- name: Create user
become_user: postgres
postgresql_user:
db: "{{ item.db }}"
name: "{{ item.name }}"
password: "{{ item.password }}"
encrypted: yes
state: present
port: "{{ postgresql_port }}"
with_items: "{{ postgresql_users }}"
如果要做得好,我认为使用vault等密码管理工具会更好。
Module使用时的要点
安装python的psycopg2库
为了使用PostgreSQL模块,必须安装python psycopg2。请同时安装PostgreSQL本身。
- name: Install PostgreSQL
yum:
name:
- python-psycopg2
- postgresql11-server
- postgresql11-devel
state: present
指定port
端口: “{{ postgresql_port }}”
您可能会注意到通过查看示例代码,我们建议始终指定端口。特别是在开发和验证的情况下,您可能需要通过更改端口号在同一服务器上构建多个PostgreSQL实例。通过在任务定义中指定端口,您可以灵活地应对更改端口号的情况。
请提前验证pg_hba.conf文件。
只凭借这些模块,并不能确保能够成功连接到PostgreSQL,否则就没有意义。
在进行Playbook测试之前,最好先使用psql验证pg_hba.conf的配置是否符合预期,并且没有问题,这样工作进展会更加顺利。
顺便提一下,本次Playbook的测试是使用CentOS的Docker容器进行的(请参考tests/docker目录)。
如果还有其他简便的方法可以进行Playbook的测试,请务必告诉我!
结束时
你觉得怎么样呢?如果这篇文章能对尽可能多的人有所帮助,我会很高兴。
我已经发布了这次制作的Playbook在sinokuma/postgresql-playbook上,如果方便的话,请使用。
未来请多多关照!