deploy-pg.yml 3.2 KB

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