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