Skip to content

Commit faa487d

Browse files
authored
Merge pull request #234 from noelmcloughlin/remove_states
Enhance remove S/W support
2 parents 332fe7b + 9d2f69a commit faa487d

File tree

10 files changed

+242
-39
lines changed

10 files changed

+242
-39
lines changed

README.rst

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ Creates such DB objects as: users, tablespaces, databases, schemas and extension
3131
See ``pillar.example`` file for details.
3232

3333
``postgres.python``
34-
-------------------
34+
----------------------
3535

3636
Installs the PostgreSQL adapter for Python on Linux.
3737

@@ -83,11 +83,36 @@ The state relies on the ``postgres:use_upstream_repo`` Pillar value which could
8383
The ``postgres:version`` Pillar controls which version of the PostgreSQL packages should be
8484
installed from the upstream Linux repository. Defaults to ``9.5``.
8585

86+
87+
Removal states
88+
===============
89+
90+
``postgres.dropped``
91+
--------------------
92+
93+
Meta state to remove Postgres software. By default the release specified, or installed by, the formula is targeted only. To target multiple releases, set pillar ``postgres.removal.multiple_releases: True``.
94+
95+
``postgres.server.remove``
96+
------------------------
97+
98+
Remove server, lib, and contrib packages. The ``postgres.server.remove`` will retain data by default (no data loss) - set pillar ``postgres.remove.data: True`` to remove data and configuration directories also.
99+
100+
``postgres.client.remove``
101+
------------------------
102+
103+
Remove client package.
104+
105+
``postgres.dev.remove``
106+
----------------------
107+
108+
Remove development and python packages.
109+
110+
86111
Testing
87112
=======
88-
The postgres state was tested on MacOS (El Capitan 10.11.6)
113+
The ``postgres`` state was tested on MacOS (El Capitan 10.11.6), and ``remove`` states on Ubuntu, Centos, and Fedora.
89114

90-
Testing is done with the ``kitchen-salt``.
115+
Linux testing is done with the ``kitchen-salt``.
91116

92117
``kitchen converge``
93118
--------------------

pillar.example

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,4 +184,9 @@ postgres:
184184
maintenance_db: db1
185185
#postgis: {}
186186

187+
remove:
188+
data: True
189+
multiple_releases: True
190+
releases: ['9.6', '10',]
191+
187192
# vim: ft=yaml ts=2 sts=2 sw=2 et

postgres/client/remove.sls

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
{%- from "postgres/map.jinja" import postgres with context -%}
2+
3+
#remove release installed by formula
4+
postgresql-client-removed:
5+
pkg.removed:
6+
- pkgs:
7+
{% if postgres.pkg_client %}
8+
- {{ postgres.pkg_client }}
9+
{% endif %}
10+
11+
{%- if postgres.remove.multiple_releases %}
12+
#search for and cleandown multiple releases
13+
14+
{% for release in postgres.remove.releases %}
15+
{% if 'bin_dir' in postgres %}
16+
{%- for bin in postgres.client_bins %}
17+
{% set path = '/usr/pgsql-' + release|string + '/bin/' + bin %}
18+
19+
postgresql{{ release }}-client-{{ bin }}-alternative-remove:
20+
alternatives.remove:
21+
- name: {{ bin }}
22+
- path: {{ path }}
23+
{% if grains.os in ('Fedora', 'CentOS',) %}
24+
{# bypass bug #}
25+
- onlyif: alternatives --display {{ bin }}
26+
{% else %}
27+
- onlyif: test -f {{ path }}
28+
{% endif %}
29+
- require_in:
30+
- pkg: postgresql{{ release }}-client-pkgs-removed
31+
{%- endfor %}
32+
{%- endif %}
33+
34+
postgresql{{ release }}-client-pkgs-removed:
35+
pkg.purged:
36+
- pkgs:
37+
- postgresql
38+
- postgresql-{{ release }}
39+
- postgresql-{{ release|replace('.', '') }}
40+
- postgresql{{ release }}-common
41+
- postgresql{{ release }}-jdbc
42+
- postgresql{{ release }}
43+
- postgresql{{ release|replace('.', '') }}
44+
45+
{% endfor %}
46+
47+
{%- endif %}

postgres/defaults.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,8 @@ postgres:
8080
linux:
8181
#Alternatives system are disabled by a 'altpriority=0' pillar.
8282
altpriority: 0
83+
84+
remove:
85+
data: False
86+
multiple_releases: False
87+
releases: ['9.2', '9.3', '9.4', '9.5', '9.6', '10',]

postgres/dev.sls

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ postgresql-{{ bin }}-altinstall:
2323
- link: {{ salt['file.join']('/usr/bin', bin) }}
2424
- path: {{ path }}
2525
- priority: {{ postgres.linux.altpriority }}
26+
{% if grains.os in ('Fedora', 'CentOS',) %} {# bypass bug #}
27+
- onlyif: alternatives --display {{ bin }}
28+
{% else %}
2629
- onlyif: test -f {{ path }}
30+
{% endif %}
2731
2832
{%- endfor %}
2933
{%- endif %}

postgres/dev/remove.sls

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{%- from "postgres/map.jinja" import postgres with context -%}
2+
3+
# remove release installed by formula
4+
postgresql-devel-removed:
5+
pkg.removed:
6+
- pkgs:
7+
{% if postgres.pkg_dev %}
8+
- {{ postgres.pkg_dev }}
9+
{% endif %}
10+
{% if postgres.pkg_libpq_dev %}
11+
- {{ postgres.pkg_libpq_dev }}
12+
{% endif %}
13+
{% if postgres.pkg_python %}
14+
- {{ postgres.pkg_python }}
15+
{% endif %}
16+
17+
{%- if postgres.remove.multiple_releases %}
18+
#search for and cleandown multiple releases
19+
20+
{% for release in postgres.remove.releases %}
21+
{% if 'bin_dir' in postgres %}
22+
{%- for bin in postgres.dev_bins %}
23+
{% set path = '/usr/pgsql-' + release|string + '/bin/' + bin %}
24+
25+
postgresql{{ release }}-devel-{{ bin }}-alternative-remove:
26+
alternatives.remove:
27+
- name: {{ bin }}
28+
- path: {{ path }}
29+
{% if grains.os in ('Fedora', 'CentOS',) %}
30+
{# bypass bug #}
31+
- onlyif: alternatives --display {{ bin }}
32+
{% else %}
33+
- onlyif: test -f {{ path }}
34+
{% endif %}
35+
- require_in:
36+
- pkg: postgresql{{ release }}-devel-pkgs-removed
37+
{%- endfor %}
38+
{%- endif %}
39+
40+
postgresql{{ release }}-devel-pkgs-removed:
41+
pkg.purged:
42+
- pkgs:
43+
- postgresql-dev
44+
- postgresql-dev-{{ release|replace('.', '') }}
45+
- postgresql-server-dev
46+
- postgresql-server-dev-{{ release|replace('.', '') }}
47+
- postgresql{{ release }}-jdbc
48+
- postgresql{{ release|replace('.', '') }}-jdbc
49+
- postgresql-{{ release }}
50+
- postgresql-{{ release|replace('.', '') }}
51+
- {{ postgres.pkg_python or "postgresql-python" }}
52+
53+
{% endfor %}
54+
55+
{%- endif %}

postgres/dropped.sls

Lines changed: 4 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,5 @@
1-
{% from tpldir + "/map.jinja" import postgres with context %}
21

3-
postgresql-dead:
4-
service.dead:
5-
- name: {{ postgres.service }}
6-
7-
postgresql-removed:
8-
pkg.removed:
9-
- pkgs:
10-
{% if postgres.pkg %}
11-
- {{ postgres.pkg }}
12-
{% endif %}
13-
{% if postgres.pkg_client %}
14-
- {{ postgres.pkg_client }}
15-
{% endif %}
16-
{% if postgres.pkg_dev %}
17-
- {{ postgres.pkg_dev }}
18-
{% endif %}
19-
{% if postgres.pkg_libpq_dev %}
20-
- {{ postgres.pkg_libpq_dev }}
21-
{% endif %}
22-
{% if postgres.pkgs_extra %}
23-
{% for pkg in postgres.pkgs_extra %}
24-
- {{ pkg }}
25-
{% endfor %}
26-
{% endif %}
27-
28-
postgres-dir-absent:
29-
file.absent:
30-
- names:
31-
- {{ postgres.conf_dir }}
32-
- {{ postgres.data_dir }}
2+
include:
3+
- postgres.server.remove
4+
- postgres.client.remove
5+
- postgres.dev.remove

postgres/osmap.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,7 @@
33
Fedora:
44
pkg_repo:
55
baseurl: 'https://download.postgresql.org/pub/repos/yum/{{ repo.version }}/fedora/fedora-$releasever-$basearch'
6+
remove:
7+
releases: ['9.4', '9.5', '9.6', '10',]
68

79
# vim: ft=sls

postgres/server/init.sls

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ postgresql-server:
3636
- group: wheel
3737
- require_in:
3838
- service: postgresql-running
39-
{%- else %}
39+
4040
4141
# Alternatives system. Make server binaries available in $PATH
42-
{%- if 'bin_dir' in postgres and postgres.linux.altpriority %}
42+
{%- elif 'bin_dir' in postgres and postgres.linux.altpriority %}
4343
{%- for bin in postgres.server_bins %}
4444
{%- set path = salt['file.join'](postgres.bin_dir, bin) %}
4545
@@ -56,9 +56,7 @@ postgresql-{{ bin }}-altinstall:
5656
- cmd: postgresql-cluster-prepared
5757
5858
{%- endfor %}
59-
{%- endif %}
60-
61-
{%- endif %}
59+
{%- endif %}
6260
6361
postgresql-cluster-prepared:
6462
file.directory:

postgres/server/remove.sls

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
{%- from "postgres/map.jinja" import postgres with context %}
2+
3+
postgresql-dead:
4+
service.dead:
5+
- name: {{ postgres.service }}
6+
- enable: False
7+
8+
postgresql-repo-removed:
9+
pkgrepo.absent:
10+
- name: {{ postgres.pkg_repo.name }}
11+
{%- if 'pkg_repo_keyid' in postgres %}
12+
- keyid: {{ postgres.pkg_repo_keyid }}
13+
{%- endif %}
14+
15+
#remove release installed by formula
16+
postgresql-server-removed:
17+
pkg.removed:
18+
- pkgs:
19+
{% if postgres.pkg %}
20+
- {{ postgres.pkg }}
21+
{% endif %}
22+
{% if postgres.pkgs_extra %}
23+
{% for pkg in postgres.pkgs_extra %}
24+
- {{ pkg }}
25+
{% endfor %}
26+
{% endif %}
27+
28+
{%- if postgres.remove.multiple_releases %}
29+
#search for and cleandown multiple releases
30+
31+
{% for release in postgres.remove.releases %}
32+
postgresql{{ release }}-server-pkgs-removed:
33+
pkg.purged:
34+
- pkgs:
35+
- {{ postgres.pkg if postgres.pkg else "postgresql" }}
36+
- postgresql-server
37+
- postgresql-libs
38+
- postgresql-contrib
39+
- postgresql-server-{{ release }}
40+
- postgresql-libs-{{ release }}
41+
- postgresql-contrib-{{ release }}
42+
- postgresql{{ release }}-contrib
43+
- postgresql{{ release }}-server
44+
- postgresql{{ release }}-libs
45+
- postgresql{{ release }}-contrib
46+
- postgresql{{ release|replace('.', '') }}-contrib
47+
- postgresql{{ release|replace('.', '') }}-server
48+
- postgresql{{ release|replace('.', '') }}-libs
49+
- postgresql{{ release|replace('.', '') }}-contrib
50+
51+
{% if 'bin_dir' in postgres %}
52+
{% for bin in postgres.server_bins %}
53+
{% set path = '/usr/pgsql-' + release|string + '/bin/' + bin %}
54+
55+
postgresql{{ release }}-server-{{ bin }}-alternative-remove:
56+
alternatives.remove:
57+
- name: {{ bin }}
58+
- path: {{ path }}
59+
{% if grains.os in ('Fedora', 'CentOS',) %}
60+
{# bypass bug #}
61+
- onlyif: alternatives --display {{ bin }}
62+
{% else %}
63+
- onlyif: test -f {{ path }}
64+
{% endif %}
65+
66+
{% endfor %}
67+
{% endif %}
68+
69+
{%- if postgres.remove.data %}
70+
#allow data loss? default is no
71+
postgresql{{ release }}-dataconf-removed:
72+
file.absent:
73+
- names:
74+
- {{ postgres.conf_dir }}
75+
- {{ postgres.data_dir }}
76+
- /var/lib/postgresql
77+
- /var/lib/pgsql
78+
79+
{% for name, tblspace in postgres.tablespaces|dictsort() %}
80+
postgresql{{ release }}-tablespace-dir-{{ name }}-removed:
81+
file.absent:
82+
- name: {{ tblspace.directory }}
83+
- require:
84+
- file: postgresql{{ release }}-dataconf-removed
85+
{% endfor %}
86+
{% endif %}
87+
88+
{% endfor %}
89+
{%- endif %}

0 commit comments

Comments
 (0)