[postgres] Manage pg_hba.conf file for conf (closes #437936)
authorKatia Saurfelt <katia.saurfelt@logilab.fr>
Mon, 08 Jun 2015 15:41:04 +0200
changeset 41 85e8d844ae44
parent 40 54b3058cbca9
child 42 1a739d7e5a37
[postgres] Manage pg_hba.conf file for conf (closes #437936)
cubicweb/postgres.sls
cubicweb/postgres/init.sls
cubicweb/postgres/pg_hba.conf.jinja
--- a/cubicweb/postgres.sls	Fri Jun 05 18:06:03 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-{% set psql_version=pillar.get('postgresql_version', 9.1) %}
-
-pg-server:
-  pkg.installed:
-    - pkgs:
-      - postgresql-{{ psql_version }}
-      - postgresql-contrib-{{ psql_version }}
-      - postgresql-plpython-{{ psql_version }}
-  {% if grains['oscodename'] == 'wheezy' %}
-  file.managed:
-    - name: /etc/init.d/postgresql
-    - source: salt://cubicweb/postgresql_patched_init
-    - require_in:
-      - service: postgresql
-  {% endif %}
-  service.running:
-    - name: postgresql
-
-postgresql-plpython-{{ psql_version }}:
-  pkg.installed
-
-/etc/postgresql/{{ psql_version }}/main/pg_hba.conf:
-  file.append:
-    - text:
-          - host    all             all             0.0.0.0/0            md5
-    - watch_in :
-      service: postgresql
-
-{% for vhostname, vhost in pillar['cubicweb_apps'].iteritems() %}
- {% for name, config in vhost.iteritems() %}
-
-pg-{{vhostname}}-{{name}}:
-  postgres_user.present:
-    - name: {{ config.get('database',{}).get('user','cubicweb') }}
-    - password: {{ config.get('database',{}).get('password', 'cub1cweb') }}
-    - user: postgres
-    - require:
-      - service: postgresql
-  postgres_database.present:
-    - name: {{ config.database.name }}
-    - owner: {{ config.database.user }}
-    - encoding: 'UTF8'
-    - template: template0
-    {% if config.database.get('lc_collate', False) %}
-    - lc_collate: {{ config.database.lc_collate }}
-    {% endif %}
-    {% if config.database.get('lc_ctype', False) %}
-    - lc_ctype: {{ config.database.lc_ctype }}
-    {% endif %}
-    - require:
-      - postgres_user: pg-{{vhostname}}-{{name}}
-      - service: pg-server
-  postgres_extension.present:
-    - name: plpythonu
-  postgres_user:
-    - present
-    - name: {{ config.database.user }}
-    - password: {{ config.database.password }}
-    {% if config.database.get('superuser', False) %}
-    - superuser: True
-    {% endif %}
-    - require:
-      - service: postgresql
-      - pkg: postgresql-plpython-9.1
-      - postgres_database: pg-{{vhostname}}-{{name}}
- {% endfor %}
-{% endfor %}
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cubicweb/postgres/init.sls	Mon Jun 08 15:41:04 2015 +0200
@@ -0,0 +1,82 @@
+{% set psql_version=pillar.get('postgresql_version', 9.1) %}
+
+pg-server:
+  pkg.installed:
+    - pkgs:
+      - postgresql-{{ psql_version }}
+      - postgresql-contrib-{{ psql_version }}
+      - postgresql-plpython-{{ psql_version }}
+  {% if grains['oscodename'] == 'wheezy' %}
+  file.managed:
+    - name: /etc/init.d/postgresql
+    - source: salt://cubicweb/postgresql_patched_init
+    - require_in:
+      - service: postgresql
+  {% endif %}
+  service.running:
+    - name: postgresql
+
+postgresql-plpython-{{ psql_version }}:
+  pkg.installed
+
+/etc/postgresql/{{ psql_version }}/main/pg_hba.conf:
+  file.managed:
+    {% set psql_users=[] %}
+    {% for vhostname, vhost in pillar['cubicweb_apps'].iteritems() %}
+    {% for name, config in vhost.iteritems() %}
+    {% if config.database.user not in psql_users %}
+    {% do psql_users.append(config.database.user) %}
+    {% endif %}
+    {% endfor %}
+    {% endfor %}
+    - name: /etc/postgresql/{{ psql_version }}/main/pg_hba.conf
+    - source: salt://postgresql/pg_hba.conf.jinja
+    - user: postgres
+    - group: postgres
+    - mode: 644
+    - template: jinja
+    - context:
+        psql_users: {{ psql_users }}
+    - watch_in:
+        service: pg-server
+
+{% for vhostname, vhost in pillar['cubicweb_apps'].iteritems() %}
+ {% for name, config in vhost.iteritems() %}
+
+pg-{{vhostname}}-{{name}}:
+  postgres_user.present:
+    - name: {{ config.get('database',{}).get('user','cubicweb') }}
+    - password: {{ config.get('database',{}).get('password', 'cub1cweb') }}
+    - user: postgres
+    - require:
+      - service: postgresql
+  postgres_database.present:
+    - name: {{ config.database.name }}
+    - owner: {{ config.database.user }}
+    - encoding: 'UTF8'
+    - template: template0
+    {% if config.database.get('lc_collate', False) %}
+    - lc_collate: {{ config.database.lc_collate }}
+    {% endif %}
+    {% if config.database.get('lc_ctype', False) %}
+    - lc_ctype: {{ config.database.lc_ctype }}
+    {% endif %}
+    - require:
+      - postgres_user: pg-{{vhostname}}-{{name}}
+      - service: pg-server
+  postgres_extension.present:
+    - name: plpythonu
+  postgres_user:
+    - present
+    - name: {{ config.database.user }}
+    - password: {{ config.database.password }}
+    {% if config.database.get('superuser', False) %}
+    - superuser: True
+    {% endif %}
+    - require:
+      - service: postgresql
+      - pkg: postgresql-plpython-9.1
+      - postgres_database: pg-{{vhostname}}-{{name}}
+ {% endfor %}
+{% endfor %}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cubicweb/postgres/pg_hba.conf.jinja	Mon Jun 08 15:41:04 2015 +0200
@@ -0,0 +1,102 @@
+# PostgreSQL Client Authentication Configuration File
+# ===================================================
+#
+# Refer to the "Client Authentication" section in the PostgreSQL
+# documentation for a complete description of this file.  A short
+# synopsis follows.
+#
+# This file controls: which hosts are allowed to connect, how clients
+# are authenticated, which PostgreSQL user names they can use, which
+# databases they can access.  Records take one of these forms:
+#
+# local      DATABASE  USER  METHOD  [OPTIONS]
+# host       DATABASE  USER  ADDRESS  METHOD  [OPTIONS]
+# hostssl    DATABASE  USER  ADDRESS  METHOD  [OPTIONS]
+# hostnossl  DATABASE  USER  ADDRESS  METHOD  [OPTIONS]
+#
+# (The uppercase items must be replaced by actual values.)
+#
+# The first field is the connection type: "local" is a Unix-domain
+# socket, "host" is either a plain or SSL-encrypted TCP/IP socket,
+# "hostssl" is an SSL-encrypted TCP/IP socket, and "hostnossl" is a
+# plain TCP/IP socket.
+#
+# DATABASE can be "all", "sameuser", "samerole", "replication", a
+# database name, or a comma-separated list thereof. The "all"
+# keyword does not match "replication". Access to replication
+# must be enabled in a separate record (see example below).
+#
+# USER can be "all", a user name, a group name prefixed with "+", or a
+# comma-separated list thereof.  In both the DATABASE and USER fields
+# you can also write a file name prefixed with "@" to include names
+# from a separate file.
+#
+# ADDRESS specifies the set of hosts the record matches.  It can be a
+# host name, or it is made up of an IP address and a CIDR mask that is
+# an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that
+# specifies the number of significant bits in the mask.  A host name
+# that starts with a dot (.) matches a suffix of the actual host name.
+# Alternatively, you can write an IP address and netmask in separate
+# columns to specify the set of hosts.  Instead of a CIDR-address, you
+# can write "samehost" to match any of the server's own IP addresses,
+# or "samenet" to match any address in any subnet that the server is
+# directly connected to.
+#
+# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi",
+# "ident", "peer", "pam", "ldap", "radius" or "cert".  Note that
+# "password" sends passwords in clear text; "md5" is preferred since
+# it sends encrypted passwords.
+#
+# OPTIONS are a set of options for the authentication in the format
+# NAME=VALUE.  The available options depend on the different
+# authentication methods -- refer to the "Client Authentication"
+# section in the documentation for a list of which options are
+# available for which authentication methods.
+#
+# Database and user names containing spaces, commas, quotes and other
+# special characters must be quoted.  Quoting one of the keywords
+# "all", "sameuser", "samerole" or "replication" makes the name lose
+# its special character, and just match a database or username with
+# that name.
+#
+# This file is read on server startup and when the postmaster receives
+# a SIGHUP signal.  If you edit the file on a running system, you have
+# to SIGHUP the postmaster for the changes to take effect.  You can
+# use "pg_ctl reload" to do that.
+
+# Put your actual configuration here
+# ----------------------------------
+#
+# If you want to allow non-local connections, you need to add more
+# "host" records.  In that case you will also need to make PostgreSQL
+# listen on a non-local interface via the listen_addresses
+# configuration parameter, or via the -i or -h command line switches.
+
+
+
+
+# DO NOT DISABLE!
+# If you change this first entry you will need to make sure that the
+# database superuser can access the database using some other method.
+# Noninteractive access to all databases is required during automatic
+# maintenance (custom daily cronjobs, replication, and similar tasks).
+#
+# Database administrative login by Unix domain socket
+local   all             postgres                                peer
+
+# TYPE  DATABASE        USER            ADDRESS                 METHOD
+{% for user in users %}
+'local  all             {{ name }}                          md5'
+{% endfor %s}
+# "local" is for Unix domain socket connections only
+local   all             all                                     peer
+# IPv4 local connections:
+host    all             all             127.0.0.1/32            md5
+# IPv6 local connections:
+host    all             all             ::1/128                 md5
+# Allow replication connections from localhost, by a user with the
+# replication privilege.
+#local   replication     postgres                                peer
+#host    replication     postgres        127.0.0.1/32            md5
+#host    replication     postgres        ::1/128                 md5
+host    all             all             0.0.0.0/0            md5