From 34aae257e586dd3e1d8b093085a790381a8af656 Mon Sep 17 00:00:00 2001 From: Imran Iqbal Date: Thu, 21 Jun 2018 08:30:08 +0100 Subject: [PATCH 1/4] Allow configuration of cluster `name`, `locale` & `encoding` --- pillar.example | 7 +++++++ postgres/codenamemap.yaml | 7 ++++--- postgres/defaults.yaml | 5 +++++ postgres/repo.yaml | 1 + postgres/server/init.sls | 9 ++++++++- 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/pillar.example b/pillar.example index 45d9c1e..24b0556 100644 --- a/pillar.example +++ b/pillar.example @@ -26,6 +26,13 @@ postgres: - postgresql-contrib - postgresql-plpython + # CLUSTER + # The default `encoding` is derived from the `locale` so not recommended + # to provide a value for it unless necessary + cluster: + locale: en_GB.UTF-8 + # encoding: UTF8 + #'Alternatives system' priority incremental. 0 disables feature. linux: altpriority: 30 diff --git a/postgres/codenamemap.yaml b/postgres/codenamemap.yaml index 2e488f3..58985a9 100644 --- a/postgres/codenamemap.yaml +++ b/postgres/codenamemap.yaml @@ -16,8 +16,9 @@ {% else %} {% set fromrepo = name %} {% endif %} - {% set conf_dir = '/etc/postgresql/' ~ version ~ '/main' %} - {% set data_dir = '/var/lib/postgresql/' ~ version ~ '/main' %} + {% set cluster_name = repo.cluster_name %} + {% set conf_dir = '/etc/postgresql/{0}/{1}'.format(version, cluster_name) %} + {% set data_dir = '/var/lib/postgresql/{0}/{1}'.format(version, cluster_name) %} {{ codename|default(name, true) }}: # PostgreSQL packages are mostly downloaded from `main` repo component @@ -29,7 +30,7 @@ pkg: postgresql-{{ version }} pkg_client: postgresql-client-{{ version }} prepare_cluster: - pgcommand: pg_createcluster {{ version }} main -d + pgcommand: pg_createcluster {{ version }} {{ cluster_name }} -d user: root {% endmacro %} diff --git a/postgres/defaults.yaml b/postgres/defaults.yaml index 6dcf50d..2f470fb 100644 --- a/postgres/defaults.yaml +++ b/postgres/defaults.yaml @@ -21,6 +21,11 @@ postgres: user: postgres env: [] + cluster: + name: main # Debian-based only + locale: '' # Defaults to `C` + encoding: '' # Defaults to `SQL_ASCII` if `locale` not provided + conf_dir: /var/lib/pgsql/data data_dir: /var/lib/pgsql/data conf_dir_mode: '0700' diff --git a/postgres/repo.yaml b/postgres/repo.yaml index 51675e1..5d5887f 100644 --- a/postgres/repo.yaml +++ b/postgres/repo.yaml @@ -6,6 +6,7 @@ use_upstream_repo: {{ salt['pillar.get']('postgres:use_upstream_repo', defaults.postgres.use_upstream_repo) }} version: {{ salt['pillar.get']('postgres:version', defaults.postgres.version) }} fromrepo: {{ salt['pillar.get']('postgres:fromrepo', defaults.postgres.fromrepo) }} +cluster_name: {{ salt['pillar.get']('postgres:cluster:name', defaults.postgres.cluster.name) }} #Early lookup for system user on MacOS {% if grains.os == 'MacOS' %} diff --git a/postgres/server/init.sls b/postgres/server/init.sls index 987391e..417d279 100644 --- a/postgres/server/init.sls +++ b/postgres/server/init.sls @@ -76,7 +76,14 @@ postgresql-cluster-prepared: - name: {{ postgres.prepare_cluster.command }} - unless: {{ postgres.prepare_cluster.test }} {%- else %} - - name: {{ postgres.prepare_cluster.pgcommand }} {{ postgres.data_dir }} + {%- set cc_cmd = '{0} {1}'.format(postgres.prepare_cluster.pgcommand, postgres.data_dir) %} + {%- if postgres.cluster.locale %} + {%- set cc_cmd = '{0} --locale={1}'.format(cc_cmd, postgres.cluster.locale) %} + {%- endif %} + {%- if postgres.cluster.encoding %} + {%- set cc_cmd = '{0} --encoding={1}'.format(cc_cmd, postgres.cluster.encoding) %} + {%- endif %} + - name: {{ cc_cmd }} - unless: test -f {{ postgres.data_dir }}/{{ postgres.prepare_cluster.pgtestfile }} {%- endif %} - cwd: / From 9ce98916beaef3a262786449fd224494551e3603 Mon Sep 17 00:00:00 2001 From: Imran Iqbal Date: Thu, 21 Jun 2018 08:33:39 +0100 Subject: [PATCH 2/4] Remove trailing slash so `pkgrepo.absent` works for Apt --- postgres/codenamemap.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/postgres/codenamemap.yaml b/postgres/codenamemap.yaml index 58985a9..f888fb4 100644 --- a/postgres/codenamemap.yaml +++ b/postgres/codenamemap.yaml @@ -26,7 +26,7 @@ data_dir: {{ data_dir }} fromrepo: {{ fromrepo }} pkg_repo: - name: 'deb http://apt.postgresql.org/pub/repos/apt/ {{ name }}-pgdg main' + name: 'deb http://apt.postgresql.org/pub/repos/apt {{ name }}-pgdg main' pkg: postgresql-{{ version }} pkg_client: postgresql-client-{{ version }} prepare_cluster: From 944a077e56cb32e3d13d15afc0c6de2b1a7d6c4e Mon Sep 17 00:00:00 2001 From: Imran Iqbal Date: Thu, 21 Jun 2018 08:34:58 +0100 Subject: [PATCH 3/4] Fix `pillar.get` for `MacOS` user/group early lookup --- postgres/repo.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/postgres/repo.yaml b/postgres/repo.yaml index 5d5887f..49fb9b9 100644 --- a/postgres/repo.yaml +++ b/postgres/repo.yaml @@ -10,8 +10,8 @@ cluster_name: {{ salt['pillar.get']('postgres:cluster:name', defaults.postgres.c #Early lookup for system user on MacOS {% if grains.os == 'MacOS' %} - {% set sysuser = salt['pillar.get']('postgres.user', salt['cmd.run']("stat -f '%Su' /dev/console")) %} - {% set sysgroup = salt['pillar.get']('postgres.group', salt['cmd.run']("stat -f '%Sg' /dev/console")) %} + {% set sysuser = salt['pillar.get']('postgres:user', salt['cmd.run']("stat -f '%Su' /dev/console")) %} + {% set sysgroup = salt['pillar.get']('postgres:group', salt['cmd.run']("stat -f '%Sg' /dev/console")) %} user: {{ sysuser }} group: {{ sysgroup }} {% endif %} From f24b962ebc8a0568024bde48d96f73d1765727c4 Mon Sep 17 00:00:00 2001 From: Imran Iqbal Date: Sun, 24 Jun 2018 16:18:21 +0100 Subject: [PATCH 4/4] Move concatenation of cluster preparation command to `map.jinja` --- postgres/map.jinja | 10 ++++++++++ postgres/server/init.sls | 9 +-------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/postgres/map.jinja b/postgres/map.jinja index 55c0449..50c5953 100644 --- a/postgres/map.jinja +++ b/postgres/map.jinja @@ -20,3 +20,13 @@ ), base='postgres', ) %} + +{# Concatenate the cluster preparation command and then append it to the `postgres` dict #} +{% set pc_cmd = '{0} {1}'.format(postgres.prepare_cluster.pgcommand, postgres.data_dir) %} +{% if postgres.cluster.locale %} + {% set pc_cmd = '{0} --locale={1}'.format(pc_cmd, postgres.cluster.locale) %} +{% endif %} +{% if postgres.cluster.encoding %} + {% set pc_cmd = '{0} --encoding={1}'.format(pc_cmd, postgres.cluster.encoding) %} +{% endif %} +{% do postgres.update({'prepare_cluster_cmd': pc_cmd}) %} diff --git a/postgres/server/init.sls b/postgres/server/init.sls index 417d279..a576fde 100644 --- a/postgres/server/init.sls +++ b/postgres/server/init.sls @@ -76,14 +76,7 @@ postgresql-cluster-prepared: - name: {{ postgres.prepare_cluster.command }} - unless: {{ postgres.prepare_cluster.test }} {%- else %} - {%- set cc_cmd = '{0} {1}'.format(postgres.prepare_cluster.pgcommand, postgres.data_dir) %} - {%- if postgres.cluster.locale %} - {%- set cc_cmd = '{0} --locale={1}'.format(cc_cmd, postgres.cluster.locale) %} - {%- endif %} - {%- if postgres.cluster.encoding %} - {%- set cc_cmd = '{0} --encoding={1}'.format(cc_cmd, postgres.cluster.encoding) %} - {%- endif %} - - name: {{ cc_cmd }} + - name: {{ postgres.prepare_cluster_cmd }} - unless: test -f {{ postgres.data_dir }}/{{ postgres.prepare_cluster.pgtestfile }} {%- endif %} - cwd: /