diff --git a/_modules/postgres_ext.py b/_modules/postgres_ext.py index 3165487..6dfaba8 100644 --- a/_modules/postgres_ext.py +++ b/_modules/postgres_ext.py @@ -33,13 +33,6 @@ def _run_psql(cmd, runas=None, password=None, host=None, port=None, user=None): if runas is None: if not 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: user = runas diff --git a/postgres/defaults.yaml b/postgres/defaults.yaml index 25a32a2..703a38e 100644 --- a/postgres/defaults.yaml +++ b/postgres/defaults.yaml @@ -7,6 +7,7 @@ postgres: python: python-psycopg2 service: postgresql conf_dir: /var/lib/pgsql/data + data_dir: /var/lib/pgsql/data create_cluster: False init_db: False version: 9.1 @@ -20,5 +21,7 @@ postgres: pg_hba.conf: salt://postgres/pg_hba.conf commands: initdb: service postgresql initdb - postgres_user: postgres - postgres_group: postgres + initdb_user: root + initdb_args: --data-checksum + user: postgres + group: postgres diff --git a/postgres/init.sls b/postgres/init.sls index 65f7db8..51ea9c8 100644 --- a/postgres/init.sls +++ b/postgres/init.sls @@ -5,49 +5,54 @@ include: - postgres.upstream {% endif %} -{{ postgres.conf_dir }}: +postgresql-config-dir: file.directory: - - user: {{ postgres.postgres_user }} - - group: {{ postgres.postgres_group }} + - name: {{ postgres.conf_dir }} + - user: {{ postgres.user }} + - group: {{ postgres.group }} - makedirs: True +{% if postgres.conf_dir == postgres.data_dir %} + - require: + - cmd: postgresql-cluster-prepared +{% endif %} -install-postgresql: +postgresql-installed: pkg.installed: - name: {{ postgres.pkg }} - 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 %} -create-postgresql-cluster: - cmd.run: - - cwd: / - user: root - - name: pg_createcluster {{ postgres.version }} main --start - - unless: test -f {{ postgres.conf_dir }}/postgresql.conf - - env: - LC_ALL: C.UTF-8 + - name: pg_createcluster {{ postgres.version }} main + - unless: + - test -f {{ postgres.conf_dir }}/environment {% endif %} - {% if postgres.init_db != False %} -postgresql-initdb: - cmd.run: - - cwd: / - - user: root - - name: {{ postgres.commands.initdb }} - - unless: test -f {{ postgres.conf_dir }}/postgresql.conf + - user: {{ postgres.initdb_user }} + - name: {{ postgres.commands.initdb }} {{ postgres.initdb_args }} -D {{ postgres.data_dir }} + - unless: + - test -f {{ postgres.data_dir }}/PG_VERSION +{% endif %} + - require: + - pkg: postgresql-installed - env: LC_ALL: C.UTF-8 -{% endif %} -run-postgresql: +postgresql-running: service.running: - enable: True - reload: True - name: {{ postgres.service }} + - reload: true - require: - - pkg: install-postgresql + - cmd: postgresql-cluster-prepared {% if postgres.pkgs_extra %} -install-postgres-extra: +postgresql-extra-pkgs-installed: pkg.installed: - pkgs: {{ postgres.pkgs_extra }} {% endif %} @@ -66,26 +71,31 @@ postgresql-conf: - backup: False {% endif -%} - watch_in: - - service: run-postgresql + - service: postgresql-running + - require: + - file: postgresql-config-dir {% endif %} -pg_hba.conf: +postgresql-pg_hba: file.managed: - name: {{ postgres.conf_dir }}/pg_hba.conf - source: {{ postgres['pg_hba.conf'] }} - template: jinja - - user: {{ postgres.postgres_user }} - - group: {{ postgres.postgres_group }} + - user: {{ postgres.user }} + - group: {{ postgres.group }} - mode: 644 - require: - - pkg: install-postgresql - - onlyif: test -f {{ postgres.conf_dir }}/postgresql.conf + - file: postgresql-config-dir - watch_in: - - service: run-postgresql + - service: postgresql-running {% for name, user in postgres.users.items() %} -postgres-user-{{ name }}: -{% if user.get('ensure', 'present') == 'present' %} +postgresql-user-{{ name }}: +{% if user.get('ensure', 'present') == 'absent' %} + postgres_user.absent: + - name: {{ name }} + - user: {{ user.get('runas', postgres.user) }} +{% else %} postgres_user.present: - name: {{ name }} - createdb: {{ user.get('createdb', False) }} @@ -94,21 +104,21 @@ postgres-user-{{ name }}: - inherit: {{ user.get('inherit', True) }} - replication: {{ user.get('replication', False) }} - password: {{ user.get('password', 'changethis') }} - - user: {{ user.get('runas', postgres.postgres_user) }} + - user: {{ user.get('runas', postgres.user) }} - 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 %} -{% endfor%} + - require: + - service: postgresql-running +{% endfor %} {% 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: - name: {{ name }} - encoding: {{ db.get('encoding', 'UTF8') }} @@ -118,16 +128,16 @@ postgres-db-{{ name }}: {% if db.get('owner') %} - owner: {{ db.get('owner') }} {% endif %} - - user: {{ db.get('runas', postgres.postgres_user) }} + - user: {{ db.get('runas', postgres.user) }} - require: - - service: run-postgresql + - service: postgresql-running {% if db.get('user') %} - - postgres_user: postgres-user-{{ db.get('user') }} + - postgres_user: postgresql-user-{{ db.get('user') }} {% endif %} {% if db.schemas is defined %} {% for schema, schema_args in db.schemas.items() %} -postgres-schema-{{ schema }}-for-db-{{ name }}: +postgresql-schema-{{ schema }}-for-db-{{ name }}: postgres_schema.present: - name: {{ schema }} - dbname: {{ name }} @@ -135,28 +145,34 @@ postgres-schema-{{ schema }}-for-db-{{ name }}: {% for arg, value in schema_args.items() %} - {{ arg }}: {{ value }} {% endfor %} + - require: + - service: postgresql-running {% endif %} {% endfor %} {% endif %} {% if db.extensions is defined %} {% for ext, ext_args in db.extensions.items() %} -postgres-ext-{{ ext }}-for-db-{{ name }}: +postgresql-ext-{{ ext }}-for-db-{{ name }}: postgres_extension.present: - name: {{ ext }} - - user: {{ db.get('runas', postgres.postgres_user) }} + - user: {{ db.get('runas', postgres.user) }} - maintenance_db: {{ name }} {% if ext_args is not none %} {% for arg, value in ext_args.items() %} - {{ arg }}: {{ value }} {% endfor %} + - require: + - service: postgresql-running {% endif %} {% endfor %} {% endif %} -{% endfor%} +{% endif %} +{% endfor %} + {% for name, directory in postgres.tablespaces.items() %} -postgres-tablespace-dir-perms-{{ directory}}: +postgresql-tablespace-dir-perms-{{ directory}}: file.directory: - name: {{ directory }} - user: postgres @@ -166,10 +182,12 @@ postgres-tablespace-dir-perms-{{ directory}}: - user - group -postgres-tablespace-{{ name }}: +postgresql-tablespace-{{ name }}: postgres_tablespace.present: - name: {{ name }} - directory: {{ directory }} - require: - - service: run-postgresql -{% endfor%} + - service: postgresql-running + - file: postgresql-tablespace-dir-perms-{{ directory}} +{% endfor %} + diff --git a/postgres/map.jinja b/postgres/map.jinja index 415e344..c6032f0 100644 --- a/postgres/map.jinja +++ b/postgres/map.jinja @@ -3,7 +3,7 @@ {% import_yaml "postgres/codenamemap.yaml" as codemap %} {# 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 oscodename data #} {% set oscode = salt['grains.filter_by'](codemap, diff --git a/postgres/osmap.yaml b/postgres/osmap.yaml index f6ed69b..23abd64 100644 --- a/postgres/osmap.yaml +++ b/postgres/osmap.yaml @@ -1,7 +1,8 @@ RedHat: init_db: True commands: - initdb: sudo -u postgres initdb /var/lib/pgsql/data + initdb: initdb + initdb_user: postgres pkg: postgresql-server pkg_client: postgresql pkg_repo: pgdg94 @@ -11,7 +12,13 @@ Debian: pkg_repo_file: /etc/apt/sources.list.d/pgdg.list pkg_libpq_dev: libpq-dev Suse: + init_db: True commands: - initdb: sudo -u postgres initdb /var/lib/pgsql/data + initdb: initdb + initdb_user: postgres pkg: postgresql-server pkg_client: postgresql +FreeBSD: + user: pgsql +OpenBSD: + user: _postgresql