使此任务第一次就能完成:
- 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