diff --git a/pillar.example b/pillar.example index 7905396..42d71c8 100644 --- a/pillar.example +++ b/pillar.example @@ -78,6 +78,7 @@ postgres: # optional extensions to enable on database # extensions: # postgis: + # backup extension defaults to .bak if postgresconf_backup is True. # Set to False to stop creation of backup on postgresql.conf changes. postgresconf_backup: True diff --git a/postgres/codenamemap.yaml b/postgres/codenamemap.yaml index 850b6ed..fe05087 100644 --- a/postgres/codenamemap.yaml +++ b/postgres/codenamemap.yaml @@ -1,10 +1,8 @@ -{%- macro ubuntu_block(name, version) %} +{% macro ubuntu_block(name, version) %} -{%- if salt['pillar.get']('postgres:use_upstream_repo', False) %} - - {%- set version = salt['pillar.get']('postgres:version', '9.5') %} - -{%- endif -%} +{% if salt['pillar.get']('postgres:use_upstream_repo', False) %} + {% set version = salt['pillar.get']('postgres:version', '9.5') %} +{% endif %} {{ name }}: pkg_repo: deb http://apt.postgresql.org/pub/repos/apt/ {{ name }}-pgdg main @@ -17,16 +15,18 @@ user: root env: {} -{%- endmacro -%} +{% endmacro %} +# Debian GNU/Linux {{ ubuntu_block('wheezy', 9.1) }} - -{{ ubuntu_block('trusty', 9.3) }} - -{{ ubuntu_block('precise', 9.4) }} {{ ubuntu_block('jessie', 9.4) }} + +# Ubuntu +{{ ubuntu_block('trusty', 9.3) }} +{{ ubuntu_block('precise', 9.4) }} {{ ubuntu_block('utopic', 9.4) }} {{ ubuntu_block('vivid', 9.4) }} {{ ubuntu_block('wily', 9.4) }} - {{ ubuntu_block('xenial', 9.5) }} + +# vim: ft=sls diff --git a/postgres/init.sls b/postgres/init.sls index c314629..102fe53 100644 --- a/postgres/init.sls +++ b/postgres/init.sls @@ -1,11 +1,13 @@ # -*- mode: yaml -*- -{% from "postgres/map.jinja" import postgres with context %} +{%- from "postgres/map.jinja" import postgres with context %} + +{%- if postgres.use_upstream_repo %} -{% if postgres.use_upstream_repo %} include: - postgres.upstream -{% endif %} + +{%- endif %} postgresql-installed: pkg.installed: @@ -15,17 +17,14 @@ postgresql-installed: # make sure the data directory and contents have been initialized postgresql-cluster-prepared: cmd.run: - - cwd: / - name: {{ postgres.prepare_cluster.command }} - - user: {{ postgres.prepare_cluster.user }} + - cwd: / + - runas: {{ postgres.prepare_cluster.user }} + - env: {{ postgres.prepare_cluster.env|default({}) }} - unless: - {{ postgres.prepare_cluster.test }} - require: - pkg: postgresql-installed - - env: -{% for name, value in postgres.prepare_cluster.env.items() %} - {{ name }}: {{ value }} -{% endfor %} postgresql-config-dir: file.directory: @@ -34,23 +33,10 @@ postgresql-config-dir: - group: {{ postgres.group }} - makedirs: True - require: - - pkg: postgresql-installed - cmd: postgresql-cluster-prepared -postgresql-running: - service.running: - - enable: True - - reload: True - - name: {{ postgres.service }} - - reload: true - - require: - - cmd: postgresql-cluster-prepared +{%- if postgres.postgresconf %} -postgresql-extra-pkgs-installed: - pkg.installed: - - pkgs: {{ postgres.pkgs_extra|default([], True) }} - -{% if postgres.postgresconf %} postgresql-conf: file.blockreplace: - name: {{ postgres.conf_dir }}/postgresql.conf @@ -67,7 +53,8 @@ postgresql-conf: - service: postgresql-running - require: - file: postgresql-config-dir -{% endif %} + +{%- endif %} postgresql-pg_hba: file.managed: @@ -79,8 +66,18 @@ postgresql-pg_hba: - mode: 644 - require: - file: postgresql-config-dir - - watch_in: - - service: postgresql-running + +postgresql-running: + service.running: + - name: {{ postgres.service }} + - enable: True + - reload: True + - watch: + - file: postgresql-pg_hba + +postgresql-extra-pkgs-installed: + pkg.installed: + - pkgs: {{ postgres.pkgs_extra|default([], True) }} {% for name, user in postgres.users.items() %} postgresql-user-{{ name }}: diff --git a/postgres/map.jinja b/postgres/map.jinja index c2889f4..75d02c8 100644 --- a/postgres/map.jinja +++ b/postgres/map.jinja @@ -1,22 +1,22 @@ {% import_yaml "postgres/defaults.yaml" as defaults %} {% import_yaml "postgres/osmap.yaml" as osmap %} {% import_yaml "postgres/codenamemap.yaml" as oscodenamemap %} -{% import_yaml "postgres/osfingermap.yaml" as osfingermap %} +{% import_yaml "postgres/osmajorreleasemap.yaml" as osmajorreleasemap %} -{% set _postgres = salt['grains.filter_by']( - osmap, - grain='os_family', +{% set postgres = salt['grains.filter_by']( + defaults, merge=salt['grains.filter_by']( - oscodenamemap, - grain='oscodename', + osmap, + grain='os_family', merge=salt['grains.filter_by']( - osfingermap, - grain='osfinger', - merge=salt['pillar.get']('postgres', {}) - ) - ) + oscodenamemap, + grain='oscodename', + merge=salt['grains.filter_by']( + osmajorreleasemap, + grain='osmajorrelease', + merge=salt['pillar.get']('postgres', {}), + ), + ), + ), + base='postgres', ) %} - -{% do defaults.postgres.update(_postgres) %} - -{% set postgres = defaults.postgres %} diff --git a/postgres/osfingermap.yaml b/postgres/osfingermap.yaml deleted file mode 100644 index 0967ef4..0000000 --- a/postgres/osfingermap.yaml +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/postgres/osmajorreleasemap.yaml b/postgres/osmajorreleasemap.yaml new file mode 100644 index 0000000..24a95e9 --- /dev/null +++ b/postgres/osmajorreleasemap.yaml @@ -0,0 +1,64 @@ +{% if grains['os_family'] == 'RedHat' %} + +### RedHat releases + + {% if salt['pillar.get']('postgres:use_upstream_repo', False) %} + {% set version = salt['pillar.get']('postgres:version', '9.5') %} + {% set data_dir = '/var/lib/pgsql/' ~ version ~ '/data' %} + +# PostgreSQL from upstream repository + +default: + prepare_cluster: + user: postgres + command: /usr/pgsql-{{ version }}/bin/initdb -D {{ data_dir }} + test: test -f {{ data_dir }}/PG_VERSION + env: {} +'6': + prepare_cluster: + user: root + command: service postgresql-{{ version }} initdb + test: test -f {{ data_dir }}/PG_VERSION + env: {} +'7': + prepare_cluster: + user: root + command: /usr/pgsql-{{ version }}/bin/postgresql95-setup initdb + test: test -f {{ data_dir }}/PG_VERSION + env: {} + + {% else %} + {% set data_dir = '/var/lib/pgsql/data' %} + +# PostgreSQL from OS repositories + +default: + prepare_cluster: + user: postgres + command: initdb -D {{ data_dir }} + test: test -f {{ data_dir }}/PG_VERSION + env: {} +'6': + prepare_cluster: + user: root + command: service postgresql initdb + test: test -f {{ data_dir }}/PG_VERSION + env: {} +'7': + prepare_cluster: + user: root + command: postgresql-setup initdb + test: test -f {{ data_dir }}/PG_VERSION + env: {} + + {% endif %} + +{% else %} + +### Empty YAML, no settings for other OS + +{} + +{% endif %} + +# vim: ft=sls diff --git a/postgres/osmap.yaml b/postgres/osmap.yaml index 0873ab3..9a72ac5 100644 --- a/postgres/osmap.yaml +++ b/postgres/osmap.yaml @@ -20,10 +20,9 @@ OpenBSD: user: _postgresql RedHat: -{%- if salt['pillar.get']('postgres:use_upstream_repo', False) %} - - {%- set version = salt['pillar.get']('postgres:version', '9.5') %} - {%- set release = version|replace('.', '') %} +{% if salt['pillar.get']('postgres:use_upstream_repo', False) %} + {% set version = salt['pillar.get']('postgres:version', '9.5') %} + {% set release = version|replace('.', '') %} version: {{ version }} pkg_repo: pgdg{{ release }} @@ -31,29 +30,16 @@ RedHat: pkg_client: postgresql{{ release }} conf_dir: /var/lib/pgsql/{{ version }}/data service: postgresql-{{ version }} - prepare_cluster: - user: postgres - command: /usr/pgsql-{{ version }}/bin/initdb -D /var/lib/pgsql/{{ version }}/data - test: test -f /var/lib/pgsql/{{ version }}/data/PG_VERSION - env: {} -{%- else %} +{% else %} pkg: postgresql-server pkg_client: postgresql - prepare_cluster: - {%- if grains['osmajorrelease'] >= 7 %} - user: root - command: postgresql-setup initdb - {%- else %} - user: postgres - command: initdb -D /var/lib/pgsql/data - {%- endif %} - test: test -f /var/lib/pgsql/data/PG_VERSION - env: {} -{%- endif %} +{% endif %} Suse: pkg: postgresql-server pkg_client: postgresql + +# vim: ft=sls