deploy-pg.yml 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. ---
  2. - name: ensure a postgresql server is running and correctly configured
  3. hosts: dbservers
  4. gather_facts: no
  5. vars:
  6. pg_admin_pass: verysecret
  7. tasks:
  8. - name: check whether package is installed
  9. command: rpm -q postgresql-server
  10. ignore_errors: yes
  11. changed_when: false
  12. register: pg_is_there
  13. - name: check whether PG_VERSION exists in datadir
  14. become: yes
  15. stat:
  16. path: /var/lib/pgsql/data/PG_VERSION
  17. register: pg_version_is_there
  18. - name: stop the server if this was going to be an upgrade
  19. become: true
  20. service:
  21. name: postgresql
  22. state: stopped
  23. when:
  24. - not pg_is_there.failed
  25. - pg_version_is_there.stat.exists
  26. - name: ensure the server is at latest version
  27. become: true
  28. yum:
  29. name:
  30. - postgresql-server
  31. - python3-psycopg2
  32. state: latest
  33. register: install_status
  34. - name: decide what option to use for postgresql-setup
  35. set_fact:
  36. pgsetup: --initdb
  37. when: >
  38. (install_status.changed and pg_is_there.failed)
  39. or
  40. not pg_version_is_there.stat.exists
  41. - name: decide what option to use for postgresql-setup
  42. set_fact:
  43. pgsetup: --upgrade
  44. when:
  45. - install_status.changed
  46. - not pg_is_there.failed
  47. - name: initialise or upgrade the database
  48. become: yes
  49. command: postgresql-setup {{ pgsetup }}
  50. when: pgsetup is defined
  51. - name: ensure the service is started
  52. become: yes
  53. service:
  54. name: postgresql
  55. state: started
  56. - name: open ports if necessary
  57. become: yes
  58. firewalld:
  59. service: postgresql
  60. state: enabled
  61. immediate: yes
  62. permanent: yes
  63. - name: ensure md5 authentication is configured for remote users (ipv4)
  64. become: yes
  65. become_user: postgres
  66. lineinfile:
  67. path: /var/lib/pgsql/data/pg_hba.conf
  68. regex: '^host\s+all\s+all\s+0\.0\.0\.0/0\s+'
  69. line: "host all all 0.0.0.0/0 md5"
  70. notify: reload postgres
  71. - name: ensure md5 authentication is configured for remote users (ipv6)
  72. become: yes
  73. become_user: postgres
  74. lineinfile:
  75. path: /var/lib/pgsql/data/pg_hba.conf
  76. regex: '^host\s+all\s+all\s+::/0\s+'
  77. line: "host all all ::/0 md5"
  78. notify: reload postgres
  79. - name: ensure the server is listening on all interfaces
  80. become: yes
  81. become_user: postgres
  82. lineinfile:
  83. path: /var/lib/pgsql/data/postgresql.conf
  84. regex: '^#?listen_addresses\s.*'
  85. line: "listen_addresses '*'"
  86. notify: restart postgres
  87. - name: flush handlers
  88. meta: flush_handlers
  89. - name: ensure an admin user exists
  90. become: yes
  91. become_user: postgres
  92. postgresql_user:
  93. name: admin
  94. password: "{{ pg_admin_pass }}"
  95. state: present
  96. login_unix_socket: "/var/run/postgresql"
  97. role_attr_flags: SUPERUSER
  98. handlers:
  99. - name: reload postgres
  100. become: yes
  101. service:
  102. name: postgresql
  103. state: reloaded
  104. - name: restart postgres
  105. become: yes
  106. service:
  107. name: postgresql
  108. state: restarted
  109. ...