Add client role
diff --git a/.kitchen.yml b/.kitchen.yml
index ca383ea..38cc9d7 100644
--- a/.kitchen.yml
+++ b/.kitchen.yml
@@ -40,4 +40,8 @@
provisioner:
pillars-from-files:
postgresql.sls: tests/pillar/postgresql_server.sls
+ - name: postgresql_client
+ provisioner:
+ pillars-from-files:
+ postgresql.sls: tests/pillar/postgresql_client.sls
# vim: ft=yaml sw=2 ts=2 sts=2 tw=125
diff --git a/README.rst b/README.rst
index 1a27053..6685805 100644
--- a/README.rst
+++ b/README.rst
@@ -271,6 +271,32 @@
name: repuser
password: password
+Client
+------
+
+.. code-block:: yaml
+
+ postgresql:
+ client:
+ server:
+ server01:
+ admin:
+ host: database.host
+ port: 5432
+ user: root
+ password: password
+ database:
+ mydb:
+ enabled: true
+ encoding: 'UTF8'
+ locale: 'en_US'
+ users:
+ - name: test
+ password: test
+ host: localhost
+ createdb: true
+ rights: all privileges
+
Sample usage
============
diff --git a/metadata/service/client/init.yml b/metadata/service/client/init.yml
new file mode 100644
index 0000000..cb05254
--- /dev/null
+++ b/metadata/service/client/init.yml
@@ -0,0 +1,8 @@
+applications:
+- postgresql
+classes:
+- service.postgresql.client.support
+parameters:
+ postgresql:
+ client:
+ enabled: true
diff --git a/metadata/service/client/support.yml b/metadata/service/client/support.yml
new file mode 100644
index 0000000..191dce6
--- /dev/null
+++ b/metadata/service/client/support.yml
@@ -0,0 +1,13 @@
+parameters:
+ postgresql:
+ _support:
+ backupninja:
+ enabled: false
+ collectd:
+ enabled: false
+ heka:
+ enabled: false
+ sensu:
+ enabled: false
+ sphinx:
+ enabled: true
diff --git a/metadata/service/server/local.yml b/metadata/service/server/local.yml
index e66ab6e..3487c11 100644
--- a/metadata/service/server/local.yml
+++ b/metadata/service/server/local.yml
@@ -1,7 +1,7 @@
applications:
- postgresql
classes:
-- service.postgresql.support
+- service.postgresql.server.support
parameters:
postgresql:
server:
diff --git a/metadata/service/server/single.yml b/metadata/service/server/single.yml
index 2cf1984..15c28bb 100644
--- a/metadata/service/server/single.yml
+++ b/metadata/service/server/single.yml
@@ -1,7 +1,7 @@
applications:
- postgresql
classes:
-- service.postgresql.support
+- service.postgresql.server.support
parameters:
postgresql:
server:
diff --git a/metadata/service/support.yml b/metadata/service/server/support.yml
similarity index 100%
rename from metadata/service/support.yml
rename to metadata/service/server/support.yml
diff --git a/postgresql/_database.sls b/postgresql/_database.sls
new file mode 100644
index 0000000..ff99e57
--- /dev/null
+++ b/postgresql/_database.sls
@@ -0,0 +1,63 @@
+{%- for user in database.users %}
+
+postgresql_user_{{ svr_name|default('localhost') }}_{{ database_name }}_{{ user.name }}:
+ postgres_user.present:
+ - name: {{ user.name }}
+ - user: postgres
+ {% if user.get('createdb', False) %}
+ - createdb: enabled
+ {% endif %}
+ - password: {{ user.password }}
+ {%- if server is defined %}
+ - require:
+ - service: postgresql_service
+ {%- endif %}
+ {%- if admin is defined %}
+ {%- for k, p in admin.iteritems() %}
+ - db_{{ k }}: {{ p }}
+ {%- endfor %}
+ {%- endif %}
+
+{%- endfor %}
+
+postgresql_database_{{ svr_name|default('localhost') }}_{{ 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 %}
+ {%- if admin is defined %}
+ {%- for k, p in admin.iteritems() %}
+ - db_{{ k }}: {{ p }}
+ {%- endfor %}
+ {%- endif %}
+
+{%- 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 %}
diff --git a/postgresql/client.sls b/postgresql/client.sls
new file mode 100644
index 0000000..5871eda
--- /dev/null
+++ b/postgresql/client.sls
@@ -0,0 +1,15 @@
+{%- from "postgresql/map.jinja" import client with context %}
+{%- if client.get('enabled', True) %}
+
+postgresql_client_packages:
+ pkg.installed:
+ - names: {{ client.pkgs }}
+
+{%- for svr_name, svr in client.get('server', {}).iteritems() %}
+ {%- set admin = svr.get('admin', {}) %}
+ {%- for database_name, database in svr.get('database', {}).iteritems() %}
+ {%- include "postgresql/_database.sls" %}
+ {%- endfor %}
+{%- endfor %}
+
+{%- endif %}
diff --git a/postgresql/init.sls b/postgresql/init.sls
index 0224dfa..3d7acb9 100644
--- a/postgresql/init.sls
+++ b/postgresql/init.sls
@@ -3,6 +3,9 @@
{% if pillar.postgresql.server is defined %}
- postgresql.server
{% endif %}
+{% if pillar.postgresql.client is defined %}
+- postgresql.client
+{% endif %}
{% if pillar.postgresql.cluster is defined %}
- postgresql.cluster
{% endif %}
diff --git a/postgresql/map.jinja b/postgresql/map.jinja
index 13831cc..4e590fe 100644
--- a/postgresql/map.jinja
+++ b/postgresql/map.jinja
@@ -7,7 +7,7 @@
{%- set default_version = '9.5' %}
{%- endif %}
-{%- set version_uni = pillar.postgresql.server.get('version', default_version)|string %}
+{%- set version_uni = pillar.postgresql.get('server', {}).get('version', default_version)|string %}
{%- set version = version_uni.encode() %}
{%- set version_numbers = version|replace('.', '') %}
{%- set server = salt['grains.filter_by']({
@@ -50,3 +50,9 @@
'wal_level': 'hot_standby'
}
}, merge=salt['pillar.get']('postgresql:cluster')) %}
+
+{%- set client = salt['grains.filter_by']({
+ 'Debian': {
+ 'pkgs': ['postgresql-client'],
+ }
+}, merge=salt['pillar.get']('postgresql:client')) %}
diff --git a/postgresql/meta/sphinx.yml b/postgresql/meta/sphinx.yml
index 1857ae9..ce37012 100644
--- a/postgresql/meta/sphinx.yml
+++ b/postgresql/meta/sphinx.yml
@@ -1,10 +1,18 @@
-{%- from "postgresql/map.jinja" import server with context %}
doc:
name: postgresql
description: PostgreSQL is an object-relational database management system.
role:
+ {%- if pillar.postgresql.server is defined %}
+ {%- from "postgresql/map.jinja" import server with context %}
server:
name: server
param:
bind:
value: {{ server.bind.address }}:{{ server.bind.port }}
+ {%- endif %}
+ {%- if pillar.postgresql.client is defined %}
+ {%- from "postgresql/map.jinja" import client with context %}
+ client:
+ name: client
+ param: {}
+ {%- endif %}
diff --git a/postgresql/server.sls b/postgresql/server.sls
index 883a787..ecbe7ba 100644
--- a/postgresql/server.sls
+++ b/postgresql/server.sls
@@ -64,45 +64,17 @@
- file: /root/.pgpass
{%- for database_name, database in server.get('database', {}).iteritems() %}
+ {%- include "postgresql/_database.sls" %}
-{%- 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', []) %}
+ {%- 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 %}
+ {%- endif %}
database_{{ database_name }}_{{ extension_name }}_extension_present:
postgres_extension.present:
@@ -112,7 +84,7 @@
- require:
- postgres_database: postgresql_database_{{ database_name }}
-{%- else %}
+ {%- else %}
database_{{ database_name }}_{{ extension_name }}_extension_absent:
postgres_extension.present:
@@ -122,35 +94,8 @@
- 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 %}
-
+ {%- endif %}
+ {%- endfor %}
{%- endfor %}
{%- endif %}
@@ -178,7 +123,7 @@
- source: salt://postgresql/files/restore_wal.sh
- mode: 770
- template: jinja
- - require:
+ - require:
- file: postgresql_dirs
restore_postgresql_server:
diff --git a/tests/pillar/postgresql_client.sls b/tests/pillar/postgresql_client.sls
new file mode 100644
index 0000000..b29f069
--- /dev/null
+++ b/tests/pillar/postgresql_client.sls
@@ -0,0 +1,21 @@
+postgresql:
+ client:
+ enabled: true
+ server:
+ server01:
+ admin:
+ host: database.host
+ port: 5432
+ user: root
+ password: password
+ database:
+ testing:
+ enabled: true
+ encoding: 'UTF8'
+ locale: 'en_US'
+ users:
+ - name: test
+ password: test
+ host: localhost
+ createdb: true
+ rights: all privileges