blob: 883a787a56ccd6dc4fa500cbe390656c58f7c175 [file] [log] [blame]
{%- from "postgresql/map.jinja" import server with context %}
{%- from "postgresql/map.jinja" import cluster with context %}
{%- if server.enabled %}
postgresql_packages:
pkg.installed:
{% if cluster.get("enabled", False) and cluster.get("mode") == "bdr" %}
- names: {{ server.bdr_pkgs }}
{% else %}
- names: {{ server.pkgs }}
{% endif %}
{%- if grains.os_family == "Debian" %}
init_postgresql_cluster:
postgres_cluster.present:
- name: main
- version: "{{ server.version }}"
- datadir: "{{ server.dir.data }}"
- require:
- pkg: postgresql_packages
- require_in:
- file: {{ server.dir.config }}/pg_hba.conf
- file: {{ server.dir.config }}/postgresql.conf
{{ server.dir.config }}/pg_hba.conf:
file.managed:
- source: salt://postgresql/files/pg_hba.conf
- template: jinja
- user: postgres
- group: postgres
- mode: 600
{{ server.dir.config }}/postgresql.conf:
file.managed:
- source: salt://postgresql/files/{{ server.version }}/postgresql.conf.{{ grains.os_family }}
- template: jinja
- user: postgres
- group: postgres
- defaults:
postgresql_version: {{ server.version }}
- mode: 600
{%- endif %}
/root/.pgpass:
file.managed:
- source: salt://postgresql/files/pgpass
- template: jinja
- user: root
- group: root
- mode: 600
{%- if grains.os_family == "Debian" %}
postgresql_service:
service.running:
- name: {{ server.service }}
- enable: true
- watch:
- file: {{ server.dir.config }}/pg_hba.conf
- file: {{ server.dir.config }}/postgresql.conf
- require:
- file: /root/.pgpass
{%- for database_name, database in server.get('database', {}).iteritems() %}
{%- for user in database.users %}
postgresql_user_{{ database_name }}_{{ user.name }}:
postgres_user.present:
- name: {{ user.name }}
- user: postgres
{% if user.get('createdb', False) %}
- createdb: enabled
{% endif %}
- password: {{ user.password }}
- require:
- service: postgresql_service
{%- endfor %}
postgresql_database_{{ database_name }}:
postgres_database.present:
- name: {{ database.get('name', database_name) }}
- encoding: {{ database.encoding }}
- user: postgres
- template: template0
- owner: {% for user in database.users %}{% if loop.first %}{{ user.name }}{% endif %}{% endfor %}
- require:
{%- for user in database.users %}
- postgres_user: postgresql_user_{{ database_name }}_{{ user.name }}
{%- endfor %}
{%- for extension_name, extension in database.get('extension', {}).iteritems() %}
{%- if extension.enabled %}
{%- if extension.get('pkgs', []) %}
postgresql_{{ extension_name }}_extension_packages:
pkg.installed:
- names: {{ pkgs }}
{%- endif %}
database_{{ database_name }}_{{ extension_name }}_extension_present:
postgres_extension.present:
- name: {{ extension_name }}
- maintenance_db: {{ database_name }}
- user: postgres
- require:
- postgres_database: postgresql_database_{{ database_name }}
{%- else %}
database_{{ database_name }}_{{ extension_name }}_extension_absent:
postgres_extension.present:
- name: {{ extension_name }}
- maintenance_db: {{ database_name }}
- user: postgres
- require:
- postgres_database: postgresql_database_{{ database_name }}
{%- endif %}
{%- endfor %}
{%- if database.initial_data is defined %}
{%- set engine = database.initial_data.get("engine", "backupninja") %}
/root/postgresql/scripts/restore_{{ database_name }}.sh:
file.managed:
- source: salt://postgresql/files/restore.sh
- mode: 770
- template: jinja
- defaults:
database_name: {{ database_name }}
- require:
- file: postgresql_dirs
- postgres_database: postgresql_database_{{ database_name }}
restore_postgresql_database_{{ database_name }}:
cmd.run:
- name: /root/postgresql/scripts/restore_{{ database_name }}.sh
- unless: "[ -f /root/postgresql/flags/{{ database_name }}-installed ]"
- cwd: /root
- require:
- file: /root/postgresql/scripts/restore_{{ database_name }}.sh
{%- endif %}
{%- endfor %}
{%- endif %}
postgresql_dirs:
file.directory:
- names:
- /root/postgresql/backup
- /root/postgresql/flags
- /root/postgresql/data
- /root/postgresql/scripts
- mode: 700
- user: root
- group: root
- makedirs: true
- require:
- pkg: postgresql_packages
{%- if server.initial_data is defined %}
{%- set engine = server.initial_data.get("engine", "barman") %}
/root/postgresql/scripts/restore_wal.sh:
file.managed:
- source: salt://postgresql/files/restore_wal.sh
- mode: 770
- template: jinja
- require:
- file: postgresql_dirs
restore_postgresql_server:
cmd.run:
- name: /root/postgresql/scripts/restore_wal.sh
- unless: "[ -f /root/postgresql/flags/restore_wal-done ]"
- cwd: /root
- require:
- file: /root/postgresql/scripts/restore_wal.sh
{%- endif %}
{%- endif %}