mirror of
https://github.com/saltstack-formulas/postgres-formula.git
synced 2025-04-16 01:30:25 +00:00
Merge pull request #123 from vutny/remove-upstream-repo
Ensure upstream repo is configured or absent depending on `use_upstream_repo`
This commit is contained in:
commit
ea8c88c601
8 changed files with 114 additions and 62 deletions
40
README.rst
40
README.rst
|
@ -16,40 +16,54 @@ Available states
|
||||||
``postgres``
|
``postgres``
|
||||||
------------
|
------------
|
||||||
|
|
||||||
Installs the postgresql package.
|
Installs the PostgreSQL server package and prepares the DB cluster.
|
||||||
|
|
||||||
``postgres.python``
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
Installs the postgresql python module
|
|
||||||
|
|
||||||
``postgres.client``
|
``postgres.client``
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
Installs the postgresql client
|
Installs the PostgreSQL client binaries and libraries.
|
||||||
|
|
||||||
|
``postgres.python``
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
Installs the PostgreSQL adapter for Python.
|
||||||
|
|
||||||
|
``postgres.upstream``
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Configures the PostgreSQL Official (upstream) repository on target system if
|
||||||
|
applicable.
|
||||||
|
|
||||||
|
The state relies on the ``postgres:use_upstream_repo`` Pillar value which could
|
||||||
|
be set as following:
|
||||||
|
|
||||||
|
* ``True`` (default): adds the upstream repository to install packages from
|
||||||
|
* ``False``: makes sure that the repository configuration is absent
|
||||||
|
|
||||||
|
The ``postgres:version`` Pillar controls which version of the PostgreSQL
|
||||||
|
packages should be installed from the upstream repository. Defaults to ``9.5``.
|
||||||
|
|
||||||
Testing
|
Testing
|
||||||
=======
|
=======
|
||||||
|
|
||||||
Testing is done wit kitchen-salt
|
Testing is done with the ``kitchen-salt``.
|
||||||
|
|
||||||
``kitchen converge``
|
``kitchen converge``
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
Runs the postgres main state
|
Runs the ``postgres`` main state.
|
||||||
|
|
||||||
``kitchen verify``
|
``kitchen verify``
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
Runs serverspec tests on the actual instance
|
Runs ``serverspec`` tests on the actual instance.
|
||||||
|
|
||||||
``kitchen test``
|
``kitchen test``
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
Builds and runs test from scratch
|
Builds and runs tests from scratch.
|
||||||
|
|
||||||
``kitchen login``
|
``kitchen login``
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
Gives you ssh to the vagrant machine for manual testing
|
Gives you ssh to the vagrant machine for manual testing.
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
### Set parameters based on PostgreSQL version supplied with particular distro
|
### Set parameters based on PostgreSQL version supplied with particular distro
|
||||||
|
|
||||||
|
{% import_yaml "postgres/repo.yaml" as repo %}
|
||||||
|
|
||||||
{% macro debian_codename(name, version, codename=none) %}
|
{% macro debian_codename(name, version, codename=none) %}
|
||||||
{#
|
{#
|
||||||
Generate lookup dictionary map for Debian and derivative distributions
|
Generate lookup dictionary map for Debian and derivative distributions
|
||||||
|
@ -14,12 +16,14 @@
|
||||||
#}
|
#}
|
||||||
|
|
||||||
{# use upstream version if configured #}
|
{# use upstream version if configured #}
|
||||||
{% set version = upstream_version|default(version) %}
|
{% if repo.use_upstream_repo %}
|
||||||
|
{% set version = repo.version %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{{ codename|default(name, true) }}:
|
{{ codename|default(name, true) }}:
|
||||||
# PostgreSQL packages are mostly downloaded from `main` repo component
|
# PostgreSQL packages are mostly downloaded from `main` repo component
|
||||||
pkg_repo: 'deb http://apt.postgresql.org/pub/repos/apt/ {{ name }}-pgdg main {{ version }}'
|
pkg_repo:
|
||||||
pkg_repo_humanname: PostgreSQL Official Repository
|
name: 'deb http://apt.postgresql.org/pub/repos/apt {{ name }}-pgdg main {{ repo.version }}'
|
||||||
pkg: postgresql-{{ version }}
|
pkg: postgresql-{{ version }}
|
||||||
pkg_client: postgresql-client-{{ version }}
|
pkg_client: postgresql-client-{{ version }}
|
||||||
conf_dir: /etc/postgresql/{{ version }}/main
|
conf_dir: /etc/postgresql/{{ version }}/main
|
||||||
|
@ -31,11 +35,6 @@
|
||||||
|
|
||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
|
|
||||||
{% if salt['pillar.get']('postgres:use_upstream_repo', false) %}
|
|
||||||
{# upstream version will always override all versions given below #}
|
|
||||||
{% set upstream_version = salt['pillar.get']('postgres:version', '9.5') %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
## Debian GNU/Linux
|
## Debian GNU/Linux
|
||||||
{{ debian_codename('wheezy', '9.1') }}
|
{{ debian_codename('wheezy', '9.1') }}
|
||||||
{{ debian_codename('jessie', '9.4') }}
|
{{ debian_codename('jessie', '9.4') }}
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
|
# Default lookup dictionary
|
||||||
|
|
||||||
postgres:
|
postgres:
|
||||||
use_upstream_repo: False
|
use_upstream_repo: True
|
||||||
|
version: '9.5'
|
||||||
pkg: postgresql
|
pkg: postgresql
|
||||||
|
pkgs_extra: []
|
||||||
|
pkg_client: postgresql-client
|
||||||
pkg_dev: postgresql-devel
|
pkg_dev: postgresql-devel
|
||||||
pkg_libpq_dev: postgresql-libs
|
pkg_libpq_dev: postgresql-libs
|
||||||
pkg_client: postgresql-client
|
|
||||||
pkgs_extra: []
|
|
||||||
python: python-psycopg2
|
python: python-psycopg2
|
||||||
user: postgres
|
user: postgres
|
||||||
group: postgres
|
group: postgres
|
||||||
|
|
|
@ -1,5 +1,15 @@
|
||||||
{%- from "postgres/map.jinja" import postgres with context -%}
|
{%- from "postgres/map.jinja" import postgres with context -%}
|
||||||
|
|
||||||
|
{%- macro format_kwargs(kwarg) -%}
|
||||||
|
|
||||||
|
{%- filter indent(4) %}
|
||||||
|
{%- for k, v in kwarg|dictsort() %}
|
||||||
|
- {{ k }}: {{ v }}
|
||||||
|
{%- endfor %}
|
||||||
|
{%- endfilter %}
|
||||||
|
|
||||||
|
{%- endmacro %}
|
||||||
|
|
||||||
{%- macro format_state(name, state, kwarg) %}
|
{%- macro format_state(name, state, kwarg) %}
|
||||||
|
|
||||||
{%- do kwarg.update({'name': name}) %}
|
{%- do kwarg.update({'name': name}) %}
|
||||||
|
@ -12,9 +22,7 @@
|
||||||
|
|
||||||
{{ state }}-{{ name }}:
|
{{ state }}-{{ name }}:
|
||||||
{{ state }}.{{ ensure|default('present') }}:
|
{{ state }}.{{ ensure|default('present') }}:
|
||||||
{%- for k, v in kwarg|dictsort() %}
|
{{- format_kwargs(kwarg) }}
|
||||||
- {{ k }}: {{ v }}
|
|
||||||
{%- endfor %}
|
|
||||||
|
|
||||||
{%- endmacro %}
|
{%- endmacro %}
|
||||||
|
|
||||||
|
|
|
@ -1,33 +1,36 @@
|
||||||
|
{% import_yaml "postgres/repo.yaml" as repo %}
|
||||||
|
|
||||||
{% if grains['os_family'] == 'RedHat' %}
|
{% if grains['os_family'] == 'RedHat' %}
|
||||||
|
|
||||||
### RedHat releases
|
### RedHat releases
|
||||||
|
|
||||||
{% if salt['pillar.get']('postgres:use_upstream_repo', False) %}
|
{% if repo.use_upstream_repo %}
|
||||||
{% set version = salt['pillar.get']('postgres:version', '9.5') %}
|
|
||||||
{% set data_dir = '/var/lib/pgsql/' ~ version ~ '/data' %}
|
{% set data_dir = '/var/lib/pgsql/' ~ repo.version ~ '/data' %}
|
||||||
|
|
||||||
# PostgreSQL from upstream repository
|
# PostgreSQL from upstream repository
|
||||||
|
|
||||||
default:
|
default:
|
||||||
prepare_cluster:
|
prepare_cluster:
|
||||||
user: postgres
|
user: postgres
|
||||||
command: /usr/pgsql-{{ version }}/bin/initdb -D {{ data_dir }}
|
command: /usr/pgsql-{{ repo.version }}/bin/initdb -D {{ data_dir }}
|
||||||
test: test -f {{ data_dir }}/PG_VERSION
|
test: test -f {{ data_dir }}/PG_VERSION
|
||||||
env: {}
|
env: {}
|
||||||
'6':
|
'6':
|
||||||
prepare_cluster:
|
prepare_cluster:
|
||||||
user: root
|
user: root
|
||||||
command: service postgresql-{{ version }} initdb
|
command: service postgresql-{{ repo.version }} initdb
|
||||||
test: test -f {{ data_dir }}/PG_VERSION
|
test: test -f {{ data_dir }}/PG_VERSION
|
||||||
env: {}
|
env: {}
|
||||||
'7':
|
'7':
|
||||||
prepare_cluster:
|
prepare_cluster:
|
||||||
user: root
|
user: root
|
||||||
command: /usr/pgsql-{{ version }}/bin/postgresql95-setup initdb
|
command: /usr/pgsql-{{ repo.version }}/bin/postgresql95-setup initdb
|
||||||
test: test -f {{ data_dir }}/PG_VERSION
|
test: test -f {{ data_dir }}/PG_VERSION
|
||||||
env: {}
|
env: {}
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
{% set data_dir = '/var/lib/pgsql/data' %}
|
{% set data_dir = '/var/lib/pgsql/data' %}
|
||||||
|
|
||||||
# PostgreSQL from OS repositories
|
# PostgreSQL from OS repositories
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
{% import_yaml "postgres/repo.yaml" as repo %}
|
||||||
|
|
||||||
|
{% set release = repo.version|replace('.', '') %}
|
||||||
|
|
||||||
Arch:
|
Arch:
|
||||||
conf_dir: /var/lib/postgres/data
|
conf_dir: /var/lib/postgres/data
|
||||||
prepare_cluster:
|
prepare_cluster:
|
||||||
|
@ -9,7 +13,11 @@ Arch:
|
||||||
pkg_dev: postgresql
|
pkg_dev: postgresql
|
||||||
|
|
||||||
Debian:
|
Debian:
|
||||||
pkg_repo_file: /etc/apt/sources.list.d/pgdg.list
|
pkg_repo:
|
||||||
|
humanname: PostgreSQL Official Repository
|
||||||
|
key_url: 'https://www.postgresql.org/media/keys/ACCC4CF8.asc'
|
||||||
|
file: /etc/apt/sources.list.d/pgdg.list
|
||||||
|
pkg_repo_keyid: ACCC4CF8
|
||||||
pkg_dev: postgresql-server-dev-all
|
pkg_dev: postgresql-server-dev-all
|
||||||
pkg_libpq_dev: libpq-dev
|
pkg_libpq_dev: libpq-dev
|
||||||
|
|
||||||
|
@ -20,17 +28,19 @@ OpenBSD:
|
||||||
user: _postgresql
|
user: _postgresql
|
||||||
|
|
||||||
RedHat:
|
RedHat:
|
||||||
{% if salt['pillar.get']('postgres:use_upstream_repo', False) %}
|
pkg_repo:
|
||||||
{% set version = salt['pillar.get']('postgres:version', '9.5') %}
|
name: pgdg{{ release }}
|
||||||
{% set release = version|replace('.', '') %}
|
humanname: PostgreSQL {{ repo.version }} $releasever - $basearch
|
||||||
|
baseurl: 'https://download.postgresql.org/pub/repos/yum/{{ repo.version }}/redhat/rhel-$releasever-$basearch'
|
||||||
|
gpgcheck: 1
|
||||||
|
gpgkey: 'https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG-{{ release }}'
|
||||||
|
|
||||||
|
{% if repo.use_upstream_repo %}
|
||||||
|
|
||||||
pkg_repo: pgdg{{ release }}
|
|
||||||
pkg_repo_humanname: PostgreSQL {{ version }} $releasever - $basearch
|
|
||||||
pkg_repo_url: https://download.postgresql.org/pub/repos/yum/{{ version }}/redhat/rhel-$releasever-$basearch
|
|
||||||
pkg: postgresql{{ release }}-server
|
pkg: postgresql{{ release }}-server
|
||||||
pkg_client: postgresql{{ release }}
|
pkg_client: postgresql{{ release }}
|
||||||
conf_dir: /var/lib/pgsql/{{ version }}/data
|
conf_dir: /var/lib/pgsql/{{ repo.version }}/data
|
||||||
service: postgresql-{{ version }}
|
service: postgresql-{{ repo.version }}
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
|
|
11
postgres/repo.yaml
Normal file
11
postgres/repo.yaml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
# This file allows to get PostgreSQL version and upstream repo settings
|
||||||
|
# early from Pillar to set correct lookup dictionaty items
|
||||||
|
|
||||||
|
{% import_yaml "postgres/defaults.yaml" as defaults %}
|
||||||
|
|
||||||
|
use_upstream_repo: {{ salt['pillar.get']('postgres:use_upstream_repo',
|
||||||
|
defaults.postgres.use_upstream_repo) }}
|
||||||
|
version: {{ salt['pillar.get']('postgres:version',
|
||||||
|
defaults.postgres.version) }}
|
||||||
|
|
||||||
|
# vim: ft=sls
|
|
@ -1,29 +1,33 @@
|
||||||
{%- from "postgres/map.jinja" import postgres with context %}
|
{%- from "postgres/map.jinja" import postgres with context -%}
|
||||||
|
{%- from "postgres/macros.jinja" import format_kwargs with context -%}
|
||||||
|
|
||||||
{%- if grains['os_family'] == 'Debian' -%}
|
{%- if 'pkg_repo' in postgres -%}
|
||||||
|
|
||||||
|
{%- if postgres.use_upstream_repo -%}
|
||||||
|
|
||||||
|
# Add upstream repository for your distro
|
||||||
install-postgresql-repo:
|
install-postgresql-repo:
|
||||||
pkgrepo.managed:
|
pkgrepo.managed:
|
||||||
- humanname: {{ postgres.pkg_repo_humanname }}
|
{{- format_kwargs(postgres.pkg_repo) }}
|
||||||
- name: {{ postgres.pkg_repo }}
|
|
||||||
- keyid: B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8
|
|
||||||
- keyserver: keyserver.ubuntu.com
|
|
||||||
- file: {{ postgres.pkg_repo_file }}
|
|
||||||
|
|
||||||
{%- elif grains['os_family'] == 'RedHat' -%}
|
{%- else -%}
|
||||||
|
|
||||||
|
# Remove the repo configuration (and GnuPG key) as requested
|
||||||
|
remove-postgresql-repo:
|
||||||
|
pkgrepo.absent:
|
||||||
|
- name: {{ postgres.pkg_repo.name }}
|
||||||
|
{%- if 'pkg_repo_keyid' in postgres %}
|
||||||
|
- keyid: {{ postgres.pkg_repo_keyid }}
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
{%- endif -%}
|
||||||
|
|
||||||
|
{%- else -%}
|
||||||
|
|
||||||
|
# Notify that we don't manage this distro
|
||||||
install-postgresql-repo:
|
install-postgresql-repo:
|
||||||
file.managed:
|
test.show_notification:
|
||||||
- name: /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
|
- text: |
|
||||||
- source: https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG
|
PostgreSQL does not provide package repository for {{ grains['osfinger'] }}
|
||||||
- source_hash: md5=78b5db170d33f80ad5a47863a7476b22
|
|
||||||
pkgrepo.managed:
|
|
||||||
- name: {{ postgres.pkg_repo }}
|
|
||||||
- humanname: {{ postgres.pkg_repo_humanname }}
|
|
||||||
- baseurl: {{ postgres.pkg_repo_url }}
|
|
||||||
- gpgcheck: 1
|
|
||||||
- gpgkey: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
|
|
||||||
- require:
|
|
||||||
- file: install-postgresql-repo
|
|
||||||
|
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
Loading…
Add table
Reference in a new issue