From 967fa6504b27fa2d12f9e56b11e9dde86ff90033 Mon Sep 17 00:00:00 2001 From: Brian Jackson Date: Wed, 22 Apr 2015 17:47:02 -0500 Subject: [PATCH] Switch to new style map.jinja Move this formula to the new style map.jinja. Still need to sort out RedHat handling, but it's not any worse than it was before (i.e. horribly broken) --- pillar.example | 2 +- postgres/client.sls | 4 +-- postgres/codenamemap.yaml | 9 +++++ postgres/defaults.yaml | 18 ++++++++++ postgres/init.sls | 44 ++++++++++------------- postgres/map.jinja | 74 +++++++++++---------------------------- postgres/osmap.yaml | 6 ++++ postgres/upstream.sls | 7 ++-- 8 files changed, 81 insertions(+), 83 deletions(-) create mode 100644 postgres/codenamemap.yaml create mode 100644 postgres/defaults.yaml create mode 100644 postgres/osmap.yaml diff --git a/pillar.example b/pillar.example index 4aece09..eb34251 100644 --- a/pillar.example +++ b/pillar.example @@ -1,7 +1,7 @@ postgres: pg_hba.conf: salt://postgres/pg_hba.conf - use_upstream_repo: True + use_upstream_repo: False lookup: pkg: 'postgresql-9.3' diff --git a/postgres/client.sls b/postgres/client.sls index d171f9a..84b9e07 100644 --- a/postgres/client.sls +++ b/postgres/client.sls @@ -1,6 +1,6 @@ {% from "postgres/map.jinja" import postgres with context %} -{% if salt['pillar.get']('postgres:use_upstream_repo') %} +{% if postgres.use_upstream_repo %} include: - postgres.upstream {% endif %} @@ -8,7 +8,7 @@ include: install-postgresql-client: pkg.installed: - name: {{ postgres.pkg_client }} - - refresh: {{ salt['pillar.get']('postgres:use_upstream_repo', False) }} + - refresh: {{ postgres.use_upstream_repo }} {% if postgres.pkg_libpq_dev != False %} install-postgres-libpq-dev: diff --git a/postgres/codenamemap.yaml b/postgres/codenamemap.yaml new file mode 100644 index 0000000..8759e4c --- /dev/null +++ b/postgres/codenamemap.yaml @@ -0,0 +1,9 @@ +wheezy: + pkg_repo: deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main +jessie: + version: 9.4 + pkg_repo: deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main +trusty: + version: 9.3 +utopic: + version: 9.4 diff --git a/postgres/defaults.yaml b/postgres/defaults.yaml new file mode 100644 index 0000000..fe9c3fa --- /dev/null +++ b/postgres/defaults.yaml @@ -0,0 +1,18 @@ +postgres: + pkg: postgresql + pkg_dev: postgresql-devel + pkg_libpq_dev: postgresql-libs + pkg_client: postgresql-client + pkg_contrib: postgresql-contrib + python: python-psycopg2 + service: postgresql + conf_dir: /var/lib/pgsql/data + create_cluster: False + init_db: False + version: 9.1 + use_upstream_repo: False + users: {} + acls: [] + databases: {} + postgresconf: "" + pg_hba.conf: salt://postgres/pg_hba.conf diff --git a/postgres/init.sls b/postgres/init.sls index f1a2009..2d444ed 100644 --- a/postgres/init.sls +++ b/postgres/init.sls @@ -1,6 +1,6 @@ {% from "postgres/map.jinja" import postgres with context %} -{% if salt['pillar.get']('postgres:use_upstream_repo') %} +{% if postgres.use_upstream_repo %} include: - postgres.upstream {% endif %} @@ -8,7 +8,7 @@ include: install-postgresql: pkg.installed: - name: {{ postgres.pkg }} - - refresh: {{ salt['pillar.get']('postgres:use_upstream_repo', False) }} + - refresh: {{ postgres.use_upstream_repo }} {% if postgres.create_cluster != False %} create-postgresql-cluster: @@ -57,25 +57,24 @@ install-postgres-contrib: - name: {{ postgres.pkg_contrib }} {% endif %} -{% if 'postgresconf' in pillar.get('postgres', {}) %} +{% if postgres.postgresconf %} postgresql-conf: file.blockreplace: - name: {{ postgres.conf_dir }}/postgresql.conf - marker_start: "# Managed by SaltStack: listen_addresses: please do not edit" - marker_end: "# Managed by SaltStack: end of salt managed zone --" - content: | - {{ salt['pillar.get']('postgres:postgresconf') | indent(8) }} + {{ postgres.postgresconf|indent(8) }} - show_changes: True - append_if_not_found: True - watch_in: - service: postgresql {% endif %} -{% if 'pg_hba.conf' in pillar.get('postgres', {}) %} pg_hba.conf: file.managed: - name: {{ postgres.conf_dir }}/pg_hba.conf - - source: {{ salt['pillar.get']('postgres:pg_hba.conf', 'salt://postgres/pg_hba.conf') }} + - source: {{ postgres['pg_hba.conf'] }} - template: jinja - user: postgres - group: postgres @@ -84,37 +83,32 @@ pg_hba.conf: - pkg: {{ postgres.pkg }} - watch_in: - service: postgresql -{% endif %} -{% if 'users' in pillar.get('postgres', {}) %} -{% for name, user in salt['pillar.get']('postgres:users').items() %} +{% for name, user in postgres.users.items() %} postgres-user-{{ name }}: postgres_user.present: - name: {{ name }} - - createdb: {{ salt['pillar.get']('postgres:users:' + name + ':createdb', False) }} - - password: {{ salt['pillar.get']('postgres:users:' + name + ':password', 'changethis') }} - - runas: postgres + - createdb: {{ user.get('createdb', False) }} + - password: {{ user.get('password', 'changethis') }} + - user: {{ user.get('runas', 'postgres') }} - require: - service: {{ postgres.service }} {% endfor%} -{% endif %} -{% if 'databases' in pillar.get('postgres', {}) %} -{% for name, db in salt['pillar.get']('postgres:databases').items() %} +{% for name, db in postgres.databases.items() %} postgres-db-{{ name }}: postgres_database.present: - name: {{ name }} - - encoding: {{ salt['pillar.get']('postgres:databases:'+ name +':encoding', 'UTF8') }} - - lc_ctype: {{ salt['pillar.get']('postgres:databases:'+ name +':lc_ctype', 'en_US.UTF8') }} - - lc_collate: {{ salt['pillar.get']('postgres:databases:'+ name +':lc_collate', 'en_US.UTF8') }} - - template: {{ salt['pillar.get']('postgres:databases:'+ name +':template', 'template0') }} - {% if salt['pillar.get']('postgres:databases:'+ name +':owner') %} - - owner: {{ salt['pillar.get']('postgres:databases:'+ name +':owner') }} + - encoding: {{ db.get('encoding', 'UTF8') }} + - lc_ctype: {{ db.get('lc_ctype', 'en_US.UTF8') }} + - lc_collate: {{ db.get('lc_collate', 'en_US.UTF8') }} + - template: {{ db.get('template', 'template0') }} + {% if db.get('owner') %} + - owner: {{ db.get('owner') }} {% endif %} - - runas: {{ salt['pillar.get']('postgres:databases:'+ name +':runas', 'postgres') }} - {% if salt['pillar.get']('postgres:databases:'+ name +':user') %} + - user: {{ db.get('runas', 'postgres') }} + {% if db.get('user') %} - require: - - postgres_user: postgres-user-{{ salt['pillar.get']('postgres:databases:'+ name +':user') }} + - postgres_user: postgres-user-{{ db.get('user') }} {% endif %} {% endfor%} -{% endif %} diff --git a/postgres/map.jinja b/postgres/map.jinja index 543b4ab..415e344 100644 --- a/postgres/map.jinja +++ b/postgres/map.jinja @@ -1,54 +1,22 @@ -{% set pg_version = salt['grains.filter_by']({ - 'RedHat' : { 'id': '9.1' }, - 'Arch' : { 'id': '9.1' }, - 'Debian' : { 'id': '9.3' }, -}, merge=salt['grains.filter_by']({ - '14.04' : { 'id': '9.3' }, - '14.10' : { 'id': '9.4' }, -}, grain='lsb_distrib_release', merge=salt['grains.filter_by']({ - 'jessie' : { 'id': '9.4' }, - 'wheezy' : { 'id': '9.1' }, -}, grain='lsb_distrib_codename', merge=salt['pillar.get']('postgres:lookup')))) %} +{% import_yaml "postgres/defaults.yaml" as defaults %} +{% import_yaml "postgres/osmap.yaml" as osmap %} +{% import_yaml "postgres/codenamemap.yaml" as codemap %} -{% set postgres = salt['grains.filter_by']({ - 'RedHat': { - 'pkg' : 'postgresql-server', - 'pkg_dev' : 'postgresql-devel', - 'pkg_libpq_dev' : 'postgresql-libs', - 'pkg_client' : 'postgresql-client', - 'python' : 'python-psycopg2', - 'service' : 'postgresql', - 'conf_dir' : '/var/lib/pgsql/data', - 'create_cluster' : False, - 'init_db' : True, - 'version' : pg_version.id, - }, - 'Arch': { - 'pkg' : 'postgresql', - 'pkg_dev' : 'postgresql-devel', - 'pkg_libpq_dev' : 'postgresql-libs', - 'pkg_client' : 'postgresql-client', - 'python' : 'python-psycopg2', - 'service' : 'postgresql', - 'conf_dir' : '/var/lib/pgsql/data', - 'create_cluster' : False, - 'init_db' : True, - 'version' : pg_version.id, - }, - 'Debian': { - 'pkg' : 'postgresql-' + pg_version.id, - 'pkg_dev' : 'postgresql-server-dev-' + pg_version.id, - 'pkg_libpq_dev' : 'libpq-dev', - 'pkg_client' : 'postgresql-client-'+ pg_version.id, - 'pkg_contrib' : 'postgresql-contrib-' + pg_version.id, - 'pkg_repo' : 'deb http://apt.postgresql.org/pub/repos/apt/ ' + grains['lsb_distrib_codename'] + '-pgdg main', - 'pkg_repo_file' : '/etc/apt/sources.list.d/pgdg.list', - 'python' : 'python-pygresql', - 'service' : 'postgresql', - 'pg_hba' : '/etc/postgresql/' + pg_version.id + '/main/pg_hba.conf', - 'conf_dir' : '/etc/postgresql/' + pg_version.id + '/main', - 'create_cluster' : False, - 'init_db' : False, - 'version' : pg_version.id, - }, -}, merge=salt['pillar.get']('postgres:lookup')) %} +{# get the settings for the os_family grain #} +{% set osfam = salt['grains.filter_by'](osmap) or {} %} +{# get the settings for the oscodename grain, os_family data will override + oscodename data #} +{% set oscode = salt['grains.filter_by'](codemap, + grain='oscodename', + merge=osfam) or {} %} + +{# merge the os family/codename specific data over the defaults #} +{% do defaults.postgres.update(oscode) %} + +{# merge the pillar:lookup dict into the defaults/os specific dict #} +{% set lookup = salt['pillar.get']('postgres:lookup', + default=defaults.postgres, + merge=True) %} + +{# merge the actual postgres pillar into the above combined dict #} +{% set postgres = salt['pillar.get']('postgres', default=lookup, merge=True) %} diff --git a/postgres/osmap.yaml b/postgres/osmap.yaml new file mode 100644 index 0000000..dc4224e --- /dev/null +++ b/postgres/osmap.yaml @@ -0,0 +1,6 @@ +RedHat: + pkg_repo: pgdg94 + repo_baseurl: http://yum.postgresql.org/9.4/redhat/rhel-$releasever-$basearch +Arch: {} +Debian: + pkg_repo_file: /etc/apt/sources.list.d/pgdg.list diff --git a/postgres/upstream.sls b/postgres/upstream.sls index d5da6da..14ec148 100644 --- a/postgres/upstream.sls +++ b/postgres/upstream.sls @@ -1,11 +1,14 @@ {% from "postgres/map.jinja" import postgres with context %} -{% if grains['os'] == 'Ubuntu' %} # Other distro support should be added here +{% if grains['os_family'] == 'Debian' %} install-postgresql-repo: pkgrepo.managed: - humanname: PostgreSQL Official Repository - - name: {{ postgres.pkg_repo }} + - name: {{ postgres.pkg_repo }} {{ postgres.version }} - keyid: B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8 - keyserver: keyserver.ubuntu.com - file: {{ postgres.pkg_repo_file }} + - require_in: + - pkg: {{ postgres.pkg }} {% endif %} +