diff --git a/pillar.example b/pillar.example index 3e5f21d..2b64166 100644 --- a/pillar.example +++ b/pillar.example @@ -47,6 +47,9 @@ postgres: - ['local', 'db1', 'localUser'] - ['host', 'db2', 'remoteUser', '123.123.0.0/24'] + tablespaces: + my_space: /srv/my_tablespace + databases: db1: owner: 'localUser' @@ -68,9 +71,10 @@ postgres: template: 'template0' lc_ctype: 'C.UTF-8' lc_collate: 'C.UTF-8' + tablespace: 'my_space' # optional extensions to enable on database - extensions: - postgis: + # 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/init.sls b/postgres/init.sls index 6166576..e6f8de5 100644 --- a/postgres/init.sls +++ b/postgres/init.sls @@ -112,6 +112,27 @@ postgresql-user-{{ name }}: - service: postgresql-running {% endfor %} +{% for name, directory in postgres.tablespaces.items() %} +postgresql-tablespace-dir-perms-{{ directory}}: + file.directory: + - name: {{ directory }} + - user: postgres + - group: postgres + - makedirs: True + - recurse: + - user + - group + +postgresql-tablespace-{{ name }}: + postgres_tablespace.present: + - name: {{ name }} + - directory: {{ directory }} + - user: postgres + - require: + - service: postgresql-running + - file: postgresql-tablespace-dir-perms-{{ directory}} +{% endfor %} + {% for name, db in postgres.databases.items() %} postgresql-db-{{ name }}: {% if db.get('ensure', 'present') == 'absent' %} @@ -126,6 +147,7 @@ postgresql-db-{{ name }}: - lc_ctype: {{ db.get('lc_ctype', 'en_US.UTF8') }} - lc_collate: {{ db.get('lc_collate', 'en_US.UTF8') }} - template: {{ db.get('template', 'template0') }} + - tablespace: {{ db.get('tablespace', 'pg_default') }} {% if db.get('owner') %} - owner: {{ db.get('owner') }} {% endif %} @@ -171,24 +193,3 @@ postgresql-ext-{{ ext }}-for-db-{{ name }}: {% endif %} {% endfor %} - -{% for name, directory in postgres.tablespaces.items() %} -postgresql-tablespace-dir-perms-{{ directory}}: - file.directory: - - name: {{ directory }} - - user: postgres - - group: postgres - - makedirs: True - - recurse: - - user - - group - -postgresql-tablespace-{{ name }}: - postgres_tablespace.present: - - name: {{ name }} - - directory: {{ directory }} - - require: - - service: postgresql-running - - file: postgresql-tablespace-dir-perms-{{ directory}} -{% endfor %} - diff --git a/test/integration/default/serverspec/postgres_spec.rb b/test/integration/default/serverspec/postgres_spec.rb index 8977a5a..68c4096 100644 --- a/test/integration/default/serverspec/postgres_spec.rb +++ b/test/integration/default/serverspec/postgres_spec.rb @@ -1,10 +1,21 @@ -require "serverspec" +require 'serverspec' -describe service("postgres") do +describe service('postgresql') do it { should be_enabled } it { should be_running } end -describe port("5432") do +describe port('5432') do it { should be_listening } end + +describe file('/srv/my_tablespace') do + it { should be_directory } + it { should be_mode 700 } + it { should be_owned_by 'postgres' } + it { should be_grouped_into 'postgres' } +end + +describe command('su - postgres -c "psql -qtc \"\l+ db2\""') do + its(:stdout) { should match(/db2.*localUser.*UTF8.*C.UTF-8.*C.UTF-8.*my_space/) } +end