Сделайте так, чтобы эта задача сработала с первого раза:
- name: Initialize the Database
command: /usr/pgsql-9.6/bin/postgresql96-setup initdb
Если запустить его второй раз, появится ошибка:
fatal: [192.168.0.1]: FAILED! => {"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": "non-zero return code", "rc": 1, "start": "2019-12-11 06:08:49.982041", "stderr": "", "stderr_lines": [], "stdout": "Data directory is not empty!", "stdout_lines": ["Data directory is not empty!"]}
Как избежать запуска этой задачи, если она уже инициализировала базу данных на сервере?
18.2. Создание кластера базы данных говорит:
initdb откажется запускаться, если каталог данных существует и уже содержит файлы; это сделано для предотвращения случайной перезаписи существующей установки.
Чтобы сделать команда идемпотент используйте параметр создает. Например:
- name: Initialize the Database
command: /usr/pgsql-9.6/bin/postgresql96-setup initdb
args:
creates: /usr/local/pgsql/data
Сначала проверьте, есть ли там файл / каталог, созданный initdb, а если нет, то initdb.
https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html