Merge pull request #93 from tgoodaire/master

Allow initdb to be run as other users, cleanup of dependencies
This commit is contained in:
Niels Abspoel
2016-05-25 21:57:35 +02:00
5 changed files with 86 additions and 65 deletions

View File

@@ -33,13 +33,6 @@ def _run_psql(cmd, runas=None, password=None, host=None, port=None, user=None):
if runas is None: if runas is None:
if not host: if not host:
host = __salt__['config.option']('postgres.host') host = __salt__['config.option']('postgres.host')
if not host or host.startswith('/'):
if 'FreeBSD' in __grains__['os_family']:
runas = 'pgsql'
if 'OpenBSD' in __grains__['os_family']:
runas = '_postgresql'
else:
runas = 'postgres'
if user is None: if user is None:
user = runas user = runas

View File

@@ -7,6 +7,7 @@ postgres:
python: python-psycopg2 python: python-psycopg2
service: postgresql service: postgresql
conf_dir: /var/lib/pgsql/data conf_dir: /var/lib/pgsql/data
data_dir: /var/lib/pgsql/data
create_cluster: False create_cluster: False
init_db: False init_db: False
version: 9.1 version: 9.1
@@ -20,5 +21,7 @@ postgres:
pg_hba.conf: salt://postgres/pg_hba.conf pg_hba.conf: salt://postgres/pg_hba.conf
commands: commands:
initdb: service postgresql initdb initdb: service postgresql initdb
postgres_user: postgres initdb_user: root
postgres_group: postgres initdb_args: --data-checksum
user: postgres
group: postgres

View File

@@ -5,49 +5,54 @@ include:
- postgres.upstream - postgres.upstream
{% endif %} {% endif %}
{{ postgres.conf_dir }}: postgresql-config-dir:
file.directory: file.directory:
- user: {{ postgres.postgres_user }} - name: {{ postgres.conf_dir }}
- group: {{ postgres.postgres_group }} - user: {{ postgres.user }}
- group: {{ postgres.group }}
- makedirs: True - makedirs: True
{% if postgres.conf_dir == postgres.data_dir %}
- require:
- cmd: postgresql-cluster-prepared
{% endif %}
install-postgresql: postgresql-installed:
pkg.installed: pkg.installed:
- name: {{ postgres.pkg }} - name: {{ postgres.pkg }}
- refresh: {{ postgres.use_upstream_repo }} - refresh: {{ postgres.use_upstream_repo }}
# make sure the data directory and contents have been initialized
postgresql-cluster-prepared:
cmd.run:
- cwd: /
{% if postgres.create_cluster != False %} {% if postgres.create_cluster != False %}
create-postgresql-cluster:
cmd.run:
- cwd: /
- user: root - user: root
- name: pg_createcluster {{ postgres.version }} main --start - name: pg_createcluster {{ postgres.version }} main
- unless: test -f {{ postgres.conf_dir }}/postgresql.conf - unless:
- env: - test -f {{ postgres.conf_dir }}/environment
LC_ALL: C.UTF-8
{% endif %} {% endif %}
{% if postgres.init_db != False %} {% if postgres.init_db != False %}
postgresql-initdb: - user: {{ postgres.initdb_user }}
cmd.run: - name: {{ postgres.commands.initdb }} {{ postgres.initdb_args }} -D {{ postgres.data_dir }}
- cwd: / - unless:
- user: root - test -f {{ postgres.data_dir }}/PG_VERSION
- name: {{ postgres.commands.initdb }} {% endif %}
- unless: test -f {{ postgres.conf_dir }}/postgresql.conf - require:
- pkg: postgresql-installed
- env: - env:
LC_ALL: C.UTF-8 LC_ALL: C.UTF-8
{% endif %}
run-postgresql: postgresql-running:
service.running: service.running:
- enable: True - enable: True
- reload: True - reload: True
- name: {{ postgres.service }} - name: {{ postgres.service }}
- reload: true
- require: - require:
- pkg: install-postgresql - cmd: postgresql-cluster-prepared
{% if postgres.pkgs_extra %} {% if postgres.pkgs_extra %}
install-postgres-extra: postgresql-extra-pkgs-installed:
pkg.installed: pkg.installed:
- pkgs: {{ postgres.pkgs_extra }} - pkgs: {{ postgres.pkgs_extra }}
{% endif %} {% endif %}
@@ -66,26 +71,31 @@ postgresql-conf:
- backup: False - backup: False
{% endif -%} {% endif -%}
- watch_in: - watch_in:
- service: run-postgresql - service: postgresql-running
- require:
- file: postgresql-config-dir
{% endif %} {% endif %}
pg_hba.conf: postgresql-pg_hba:
file.managed: file.managed:
- name: {{ postgres.conf_dir }}/pg_hba.conf - name: {{ postgres.conf_dir }}/pg_hba.conf
- source: {{ postgres['pg_hba.conf'] }} - source: {{ postgres['pg_hba.conf'] }}
- template: jinja - template: jinja
- user: {{ postgres.postgres_user }} - user: {{ postgres.user }}
- group: {{ postgres.postgres_group }} - group: {{ postgres.group }}
- mode: 644 - mode: 644
- require: - require:
- pkg: install-postgresql - file: postgresql-config-dir
- onlyif: test -f {{ postgres.conf_dir }}/postgresql.conf
- watch_in: - watch_in:
- service: run-postgresql - service: postgresql-running
{% for name, user in postgres.users.items() %} {% for name, user in postgres.users.items() %}
postgres-user-{{ name }}: postgresql-user-{{ name }}:
{% if user.get('ensure', 'present') == 'present' %} {% if user.get('ensure', 'present') == 'absent' %}
postgres_user.absent:
- name: {{ name }}
- user: {{ user.get('runas', postgres.user) }}
{% else %}
postgres_user.present: postgres_user.present:
- name: {{ name }} - name: {{ name }}
- createdb: {{ user.get('createdb', False) }} - createdb: {{ user.get('createdb', False) }}
@@ -94,21 +104,21 @@ postgres-user-{{ name }}:
- inherit: {{ user.get('inherit', True) }} - inherit: {{ user.get('inherit', True) }}
- replication: {{ user.get('replication', False) }} - replication: {{ user.get('replication', False) }}
- password: {{ user.get('password', 'changethis') }} - password: {{ user.get('password', 'changethis') }}
- user: {{ user.get('runas', postgres.postgres_user) }} - user: {{ user.get('runas', postgres.user) }}
- superuser: {{ user.get('superuser', False) }} - superuser: {{ user.get('superuser', False) }}
- require:
- service: run-postgresql
{% else %}
postgres_user.absent:
- name: {{ name }}
- user: {{ user.get('runas', postgres.postgres_user) }}
- require:
- service: run-postgresql
{% endif %} {% endif %}
{% endfor%} - require:
- service: postgresql-running
{% endfor %}
{% for name, db in postgres.databases.items() %} {% for name, db in postgres.databases.items() %}
postgres-db-{{ name }}: postgresql-db-{{ name }}:
{% if db.get('ensure', 'present') == 'absent' %}
postgres_database.absent:
- name: {{ name }}
- require:
- service: postgresql-running
{% else %}
postgres_database.present: postgres_database.present:
- name: {{ name }} - name: {{ name }}
- encoding: {{ db.get('encoding', 'UTF8') }} - encoding: {{ db.get('encoding', 'UTF8') }}
@@ -118,16 +128,16 @@ postgres-db-{{ name }}:
{% if db.get('owner') %} {% if db.get('owner') %}
- owner: {{ db.get('owner') }} - owner: {{ db.get('owner') }}
{% endif %} {% endif %}
- user: {{ db.get('runas', postgres.postgres_user) }} - user: {{ db.get('runas', postgres.user) }}
- require: - require:
- service: run-postgresql - service: postgresql-running
{% if db.get('user') %} {% if db.get('user') %}
- postgres_user: postgres-user-{{ db.get('user') }} - postgres_user: postgresql-user-{{ db.get('user') }}
{% endif %} {% endif %}
{% if db.schemas is defined %} {% if db.schemas is defined %}
{% for schema, schema_args in db.schemas.items() %} {% for schema, schema_args in db.schemas.items() %}
postgres-schema-{{ schema }}-for-db-{{ name }}: postgresql-schema-{{ schema }}-for-db-{{ name }}:
postgres_schema.present: postgres_schema.present:
- name: {{ schema }} - name: {{ schema }}
- dbname: {{ name }} - dbname: {{ name }}
@@ -135,28 +145,34 @@ postgres-schema-{{ schema }}-for-db-{{ name }}:
{% for arg, value in schema_args.items() %} {% for arg, value in schema_args.items() %}
- {{ arg }}: {{ value }} - {{ arg }}: {{ value }}
{% endfor %} {% endfor %}
- require:
- service: postgresql-running
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% if db.extensions is defined %} {% if db.extensions is defined %}
{% for ext, ext_args in db.extensions.items() %} {% for ext, ext_args in db.extensions.items() %}
postgres-ext-{{ ext }}-for-db-{{ name }}: postgresql-ext-{{ ext }}-for-db-{{ name }}:
postgres_extension.present: postgres_extension.present:
- name: {{ ext }} - name: {{ ext }}
- user: {{ db.get('runas', postgres.postgres_user) }} - user: {{ db.get('runas', postgres.user) }}
- maintenance_db: {{ name }} - maintenance_db: {{ name }}
{% if ext_args is not none %} {% if ext_args is not none %}
{% for arg, value in ext_args.items() %} {% for arg, value in ext_args.items() %}
- {{ arg }}: {{ value }} - {{ arg }}: {{ value }}
{% endfor %} {% endfor %}
- require:
- service: postgresql-running
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% endfor%} {% endif %}
{% endfor %}
{% for name, directory in postgres.tablespaces.items() %} {% for name, directory in postgres.tablespaces.items() %}
postgres-tablespace-dir-perms-{{ directory}}: postgresql-tablespace-dir-perms-{{ directory}}:
file.directory: file.directory:
- name: {{ directory }} - name: {{ directory }}
- user: postgres - user: postgres
@@ -166,10 +182,12 @@ postgres-tablespace-dir-perms-{{ directory}}:
- user - user
- group - group
postgres-tablespace-{{ name }}: postgresql-tablespace-{{ name }}:
postgres_tablespace.present: postgres_tablespace.present:
- name: {{ name }} - name: {{ name }}
- directory: {{ directory }} - directory: {{ directory }}
- require: - require:
- service: run-postgresql - service: postgresql-running
{% endfor%} - file: postgresql-tablespace-dir-perms-{{ directory}}
{% endfor %}

View File

@@ -3,7 +3,7 @@
{% import_yaml "postgres/codenamemap.yaml" as codemap %} {% import_yaml "postgres/codenamemap.yaml" as codemap %}
{# get the settings for the os_family grain #} {# get the settings for the os_family grain #}
{% set osfam = salt['grains.filter_by'](osmap) or {} %} {% set osfam = salt['grains.filter_by'](osmap, grain='os_family') or {} %}
{# get the settings for the oscodename grain, os_family data will override {# get the settings for the oscodename grain, os_family data will override
oscodename data #} oscodename data #}
{% set oscode = salt['grains.filter_by'](codemap, {% set oscode = salt['grains.filter_by'](codemap,

View File

@@ -1,7 +1,8 @@
RedHat: RedHat:
init_db: True init_db: True
commands: commands:
initdb: sudo -u postgres initdb /var/lib/pgsql/data initdb: initdb
initdb_user: postgres
pkg: postgresql-server pkg: postgresql-server
pkg_client: postgresql pkg_client: postgresql
pkg_repo: pgdg94 pkg_repo: pgdg94
@@ -11,7 +12,13 @@ Debian:
pkg_repo_file: /etc/apt/sources.list.d/pgdg.list pkg_repo_file: /etc/apt/sources.list.d/pgdg.list
pkg_libpq_dev: libpq-dev pkg_libpq_dev: libpq-dev
Suse: Suse:
init_db: True
commands: commands:
initdb: sudo -u postgres initdb /var/lib/pgsql/data initdb: initdb
initdb_user: postgres
pkg: postgresql-server pkg: postgresql-server
pkg_client: postgresql pkg_client: postgresql
FreeBSD:
user: pgsql
OpenBSD:
user: _postgresql