Skip to content

Commit 2ed71f6

Browse files
author
Denys Havrysh
committed
Ensure upstream repo is configured or absent depending on use_upstream_repo
1 parent b972237 commit 2ed71f6

File tree

7 files changed

+107
-63
lines changed

7 files changed

+107
-63
lines changed

Diff for: README.rst

+25-11
Original file line numberDiff line numberDiff line change
@@ -16,40 +16,54 @@ Available states
1616
``postgres``
1717
------------
1818

19-
Installs the postgresql package.
19+
Installs the PostgreSQL server package and prepares the DB cluster.
2020

21-
``postgres.python``
21+
``postgres.client``
2222
-------------------
2323

24-
Installs the postgresql python module
24+
Installs the PostgreSQL client binaries and libraries.
2525

26-
``postgres.client``
26+
``postgres.python``
2727
-------------------
2828

29-
Installs the postgresql client
29+
Installs the PostgreSQL adapter for Python.
30+
31+
``postgres.upstream``
32+
---------------------
33+
34+
Configures the PostgreSQL Official (upstream) repository on target system if
35+
applicable.
36+
37+
The state relies on the ``postgres:use_upstream_repo`` Pillar value which could
38+
be set as following:
39+
40+
* ``False`` (default): makes sure that the repository configuration is absent
41+
* ``True``: adds the upstream repository to install packages from
42+
43+
The ``postgres:version`` Pillar controls which version of the PostgreSQL
44+
packages should be installed from the upstream repository. Defaults to ``9.5``.
3045

3146
Testing
3247
=======
3348

34-
Testing is done wit kitchen-salt
49+
Testing is done with the ``kitchen-salt``.
3550

3651
``kitchen converge``
3752
--------------------
3853

39-
Runs the postgres main state
54+
Runs the ``postgres`` main state.
4055

4156
``kitchen verify``
4257
------------------
4358

44-
Runs serverspec tests on the actual instance
59+
Runs ``serverspec`` tests on the actual instance.
4560

4661
``kitchen test``
4762
----------------
4863

49-
Builds and runs test from scratch
64+
Builds and runs tests from scratch.
5065

5166
``kitchen login``
5267
-----------------
5368

54-
Gives you ssh to the vagrant machine for manual testing
55-
69+
Gives you ssh to the vagrant machine for manual testing.

Diff for: postgres/client.sls

+13-12
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
1-
{% from "postgres/map.jinja" import postgres with context %}
1+
{%- from "postgres/map.jinja" import postgres with context -%}
2+
3+
{%- set pkgs = [] %}
4+
{%- for pkg in (postgres.pkg_client, postgres.pkg_libpq_dev) %}
5+
{%- if pkg %}
6+
{%- do pkgs.append(pkg) %}
7+
{%- endif %}
8+
{%- endfor -%}
29
3-
{% if postgres.use_upstream_repo %}
410
include:
511
- postgres.upstream
6-
{% endif %}
7-
8-
install-postgresql-client:
9-
pkg.installed:
10-
- name: {{ postgres.pkg_client }}
11-
- refresh: {{ postgres.use_upstream_repo }}
1212
13-
{% if postgres.pkg_libpq_dev %}
14-
install-postgres-libpq-dev:
13+
postgresql-client:
1514
pkg.installed:
16-
- name: {{ postgres.pkg_libpq_dev }}
17-
{% endif %}
15+
- pkgs: {{ pkgs }}
16+
- refresh: {{ 'pkg_repo' in postgres }}
17+
- require:
18+
- sls: postgres.upstream

Diff for: postgres/codenamemap.yaml

+7-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
### Set parameters based on PostgreSQL version supplied with particular distro
22

3+
{% set use_upstream_repo = salt['pillar.get']('postgres:use_upstream_repo', false) %}
4+
{% set upstream_version = salt['pillar.get']('postgres:version', '9.5') %}
5+
36
{% macro debian_codename(name, version, codename=none) %}
47
{#
58
Generate lookup dictionary map for Debian and derivative distributions
@@ -14,12 +17,13 @@
1417
#}
1518

1619
{# use upstream version if configured #}
17-
{% set version = upstream_version|default(version) %}
20+
{% if use_upstream_repo %}
21+
{% set version = upstream_version %}
22+
{% endif %}
1823

1924
{{ codename|default(name, true) }}:
2025
# PostgreSQL packages are mostly downloaded from `main` repo component
21-
pkg_repo: 'deb http://apt.postgresql.org/pub/repos/apt/ {{ name }}-pgdg main {{ version }}'
22-
pkg_repo_humanname: PostgreSQL Official Repository
26+
pkg_repo: 'deb http://apt.postgresql.org/pub/repos/apt {{ name }}-pgdg main {{ upstream_version }}'
2327
pkg: postgresql-{{ version }}
2428
pkg_client: postgresql-client-{{ version }}
2529
conf_dir: /etc/postgresql/{{ version }}/main
@@ -31,11 +35,6 @@
3135

3236
{% endmacro %}
3337

34-
{% if salt['pillar.get']('postgres:use_upstream_repo', false) %}
35-
{# upstream version will always override all versions given below #}
36-
{% set upstream_version = salt['pillar.get']('postgres:version', '9.5') %}
37-
{% endif %}
38-
3938
## Debian GNU/Linux
4039
{{ debian_codename('wheezy', '9.1') }}
4140
{{ debian_codename('jessie', '9.4') }}

Diff for: postgres/defaults.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
postgres:
22
use_upstream_repo: False
33
pkg: postgresql
4+
pkgs_extra: []
5+
pkg_client: postgresql-client
46
pkg_dev: postgresql-devel
57
pkg_libpq_dev: postgresql-libs
6-
pkg_client: postgresql-client
7-
pkgs_extra: []
88
python: python-psycopg2
99
user: postgres
1010
group: postgres

Diff for: postgres/init.sls

+5-9
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,17 @@
1-
# -*- mode: yaml -*-
2-
31
{%- from "postgres/map.jinja" import postgres with context -%}
42
{%- from "postgres/macros.jinja" import format_state with context -%}
53
6-
{%- if postgres.use_upstream_repo %}
7-
84
include:
95
- postgres.upstream
106
11-
{%- endif %}
12-
137
### Installation states
148
15-
postgresql-installed:
9+
postgresql-server:
1610
pkg.installed:
1711
- name: {{ postgres.pkg }}
18-
- refresh: {{ postgres.use_upstream_repo }}
12+
- refresh: {{ 'pkg_repo' in postgres }}
13+
- require:
14+
- sls: postgres.upstream
1915
2016
# make sure the data directory and contents have been initialized
2117
postgresql-cluster-prepared:
@@ -27,7 +23,7 @@ postgresql-cluster-prepared:
2723
- unless:
2824
- {{ postgres.prepare_cluster.test }}
2925
- require:
30-
- pkg: postgresql-installed
26+
- pkg: postgresql-server
3127
3228
postgresql-config-dir:
3329
file.directory:

Diff for: postgres/osmap.yaml

+16-5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
{% set version = salt['pillar.get']('postgres:version', '9.5') %}
2+
{% set release = version|replace('.', '') %}
3+
14
Arch:
25
conf_dir: /var/lib/postgres/data
36
prepare_cluster:
@@ -9,6 +12,9 @@ Arch:
912
pkg_dev: postgresql
1013

1114
Debian:
15+
pkg_repo_humanname: PostgreSQL Official Repository
16+
pkg_repo_keyid: ACCC4CF8
17+
pkg_repo_keyurl: 'https://www.postgresql.org/media/keys/ACCC4CF8.asc'
1218
pkg_repo_file: /etc/apt/sources.list.d/pgdg.list
1319
pkg_dev: postgresql-server-dev-all
1420
pkg_libpq_dev: libpq-dev
@@ -20,13 +26,18 @@ OpenBSD:
2026
user: _postgresql
2127

2228
RedHat:
23-
{% if salt['pillar.get']('postgres:use_upstream_repo', False) %}
24-
{% set version = salt['pillar.get']('postgres:version', '9.5') %}
25-
{% set release = version|replace('.', '') %}
26-
2729
pkg_repo: pgdg{{ release }}
30+
pkg_repo_keyfile: /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG-{{ release }}
31+
pkg_repo_keyurl:
32+
- 'https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG-{{ release }}'
33+
# Fallback key URL
34+
- 'https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG'
35+
pkg_repo_keyhash: md5=78b5db170d33f80ad5a47863a7476b22
2836
pkg_repo_humanname: PostgreSQL {{ version }} $releasever - $basearch
29-
pkg_repo_url: https://download.postgresql.org/pub/repos/yum/{{ version }}/redhat/rhel-$releasever-$basearch
37+
pkg_repo_url: 'https://download.postgresql.org/pub/repos/yum/{{ version }}/redhat/rhel-$releasever-$basearch'
38+
39+
{% if salt['pillar.get']('postgres:use_upstream_repo', false) %}
40+
3041
pkg: postgresql{{ release }}-server
3142
pkg_client: postgresql{{ release }}
3243
conf_dir: /var/lib/pgsql/{{ version }}/data

Diff for: postgres/upstream.sls

+39-16
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,56 @@
1-
{%- from "postgres/map.jinja" import postgres with context %}
1+
{%- from "postgres/map.jinja" import postgres with context -%}
22
3-
{%- if grains['os_family'] == 'Debian' -%}
3+
{%- if not postgres.use_upstream_repo and 'pkg_repo' in postgres -%}
44
5-
install-postgresql-repo:
5+
postgres-repo:
6+
pkgrepo.absent:
7+
- name: {{ postgres.pkg_repo }}
8+
{%- if 'pkg_repo_keyid' in postgres %}
9+
- keyid: {{ postgres.pkg_repo_keyid }}
10+
{%- endif %}
11+
12+
{%- if 'pkg_repo_keyfile' in postgres %}
13+
14+
postgresql-repo-keyfile:
15+
file.absent:
16+
- name: {{ postgres.pkg_repo_keyfile }}
17+
- require:
18+
- pkgrepo: postgres-repo
19+
20+
{%- endif %}
21+
22+
{%- elif grains['os_family'] == 'Debian' -%}
23+
24+
postgresql-repo:
625
pkgrepo.managed:
7-
- humanname: {{ postgres.pkg_repo_humanname }}
826
- name: {{ postgres.pkg_repo }}
9-
- keyid: B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8
10-
- keyserver: keyserver.ubuntu.com
27+
- humanname: {{ postgres.pkg_repo_humanname }}
28+
- key_url: {{ postgres.pkg_repo_keyurl }}
1129
- file: {{ postgres.pkg_repo_file }}
12-
- require_in:
13-
- pkg: postgresql-installed
1430
1531
{%- elif grains['os_family'] == 'RedHat' -%}
1632
17-
install-postgresql-repo:
33+
postgresql-repo-keyfile:
1834
file.managed:
19-
- name: /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
20-
- source: https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG
21-
- source_hash: md5=78b5db170d33f80ad5a47863a7476b22
35+
- name: {{ postgres.pkg_repo_keyfile }}
36+
- source: {{ postgres.pkg_repo_keyurl }}
37+
- source_hash: {{ postgres.pkg_repo_keyhash }}
38+
39+
postgresql-repo:
2240
pkgrepo.managed:
2341
- name: {{ postgres.pkg_repo }}
2442
- humanname: {{ postgres.pkg_repo_humanname }}
2543
- baseurl: {{ postgres.pkg_repo_url }}
2644
- gpgcheck: 1
27-
- gpgkey: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
45+
- gpgkey: 'file://{{ postgres.pkg_repo_keyfile }}'
2846
- require:
29-
- file: install-postgresql-repo
30-
- require_in:
31-
- pkg: postgresql-installed
47+
- file: postgresql-repo-keyfile
48+
49+
{%- else -%}
50+
51+
postgresql-repo:
52+
test.show_notification:
53+
- text: |
54+
PostgreSQL does not provide package repository for {{ grains['os_family'] }}
3255
3356
{%- endif %}

0 commit comments

Comments
 (0)