介绍使用Ansible自动化部署PostgreSQL11(介绍PostgreSQL模块)

使用Ansible来构建PostgreSQL11。

初次见面,我是sinokuma。
这是我在Qiita的第一篇投稿,请多关照。

首先

这是由 Red Hat 赞助的 Ansible Blogger 2018 圣诞日历 2018 第16天的文章。
Ansible Blogger 2018 有两个主题。

    1. 介绍你喜欢的Ansible模块

 

    关于该模块的使用方法(方便的关键点、技巧、失败经验等)

因此,我将介绍PostgreSQL模块。

PostgreSQL模块列表

截至2018年12月,存在六个模块。

No.Module名Module概要1postgresql_dbデータベースの追加または削除2postgresql_extextensionの追加または削除3postgresql_lang手続き型言語の追加または削除                                   4postgresql_privsデータベースオブジェクトに対する権限の追加または削除5postgresql_schemaスキーマの追加または削除                                          6postgresql_userデータベースユーザ(ロール)の追加または削除

参考:数据库模块 > 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上,如果方便的话,请使用。

未来请多多关照!

广告
将在 10 秒后关闭
bannerAds