使用 ansible 多次初始化 postgresql

使用 ansible 多次初始化 postgresql

使此任务第一次就能完成:

- name: Initialize the Database
  command: /usr/pgsql-9.6/bin/postgresql96-setup initdb

如果第二次运行,将会得到错误:

致命:[192.168.0.1]:失败! => {“changed”:true,“cmd”:[“/usr/pgsql-9.6/bin/postgresql96-setup”,“initdb”],“delta”:“0:00:00.017590”,“end”:“2019-12-11 06:08:49.999631”,“msg”:“非零返回码”,“rc”:1,“start”:“2019-12-11 06:08:49.982041”,“stderr”:“”,“stderr_lines”:[],“stdout”:“数据目录不为空!”,“stdout_lines”:[“数据目录不为空!”]}

如果已经在服务器上初始化了数据库,如何避免运行此任务?

答案1

首先检查 initdb 创建的文件/目录是否存在,如果不存在,则 initdb。

https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html

答案2

问:“stdout:数据目录不为空!”

A:18.2. 创建数据库集群说:

如果数据目录存在且已包含文件,initdb 将拒绝运行;这是为了防止意外覆盖现有安装。

为了使命令任务幂等使用参数创建例如

- name: Initialize the Database
  command: /usr/pgsql-9.6/bin/postgresql96-setup initdb
  args:
    creates: /usr/local/pgsql/data

相关内容