Homebrew Postgres on MacOS

This commit is contained in:
noelmcloughlin 2018-03-08 12:30:25 +00:00
parent 1e527c4b91
commit a34a4c270c
12 changed files with 60 additions and 38 deletions

View file

@ -77,7 +77,8 @@ The state relies on the ``postgres:use_upstream_repo`` Pillar value which could
* ``True`` (default): adds the upstream repository to install packages from
* ``False``: makes sure that the repository configuration is absent
* ``postgresapp`` (MacOS) uses upstream PostgresApp package repository.
* ``'postgresapp'`` (MacOS) uses upstream PostgresApp package repository.
* ``'homebrew'`` (MacOS) uses Homebrew postgres
The ``postgres:version`` Pillar controls which version of the PostgreSQL packages should be
installed from the upstream Linux repository. Defaults to ``9.5``.

View file

@ -6,8 +6,9 @@ postgres:
version: '9.6'
### MACOS
# Set to 'postgresapp' to install that upstream MacOS package
# Set to 'postgresapp' OR 'homebrew' for MacOS
#use_upstream_repo: 'postgresapp'
#use_upstream_repo: 'homebrew'
# PACKAGE
# These pillars are typically never required.

View file

@ -7,7 +7,7 @@
{%- endif %}
{%- endfor %}
{%- if postgres.use_upstream_repo %}
{%- if postgres.use_upstream_repo == true %}
include:
- postgres.upstream
{%- endif %}
@ -16,7 +16,7 @@ include:
postgresql-client-libs:
pkg.installed:
- pkgs: {{ pkgs }}
{%- if postgres.use_upstream_repo %}
{%- if postgres.use_upstream_repo == true %}
- refresh: True
- require:
- pkgrepo: postgresql-repo

View file

@ -16,7 +16,7 @@
#}
{# use upstream version if configured #}
{% if repo.use_upstream_repo %}
{% if repo.use_upstream_repo == true %}
{% set version = repo.version %}
{% endif %}
@ -49,7 +49,7 @@
#}
{# use upstream version if configured #}
{% if repo.use_upstream_repo %}
{% if repo.use_upstream_repo == true %}
{% set version = repo.version %}
{% endif %}

View file

@ -29,20 +29,17 @@ postgres_maxfiles_limits_conf:
- context:
soft_limit: {{ postgres.limits.soft or postgres.limits.hard }}
hard_limit: {{ postgres.limits.hard or postgres.limits.soft }}
- group: wheel
- group: {{ postgres.group }}
{% endif %}
# MacOS Shortcut for system user
{% if postgres.systemuser|lower not in (None, '',) %}
{% if postgres.use_upstream_repo == 'postgresapp' %}
# Shortcut for PostgresApp
postgres-desktop-shortcut-clean:
file.absent:
- name: '{{ postgres.userhomes }}/{{ postgres.systemuser }}/Desktop/postgres'
- name: '{{ postgres.userhomes }}/{{ postgres.user }}/Desktop/Postgres ({{ postgres.use_upstream_repo }})'
- require_in:
- file: postgres-desktop-shortcut-add
{% endif %}
postgres-desktop-shortcut-add:
file.managed:
- name: /tmp/mac_shortcut.sh
@ -50,12 +47,13 @@ postgres-desktop-shortcut-add:
- mode: 755
- template: jinja
- context:
user: {{ postgres.systemuser }}
user: {{ postgres.user }}
homes: {{ postgres.userhomes }}
cmd.run:
- name: /tmp/mac_shortcut.sh {{ postgres.use_upstream_repo }}
- runas: {{ postgres.systemuser }}
- name: '/tmp/mac_shortcut.sh "Postgres ({{ postgres.use_upstream_repo }})"'
- runas: {{ postgres.user }}
- require:
- file: postgres-desktop-shortcut-add
{% endif %}
{% endif %}

View file

@ -3,7 +3,7 @@
include:
{% if postgres.use_upstream_repo == 'postgresapp' %}
- postgres.macos.postgresapp
{% else %}
{% elif postgres.use_upstream_repo == 'homebrew' %}
- postgres.server
- postgres.client
{% endif %}

View file

@ -27,9 +27,7 @@ pg-download-archive:
interval: {{ pg.macos.dl.interval }}
{% endif %}
{%- if pg.macos.postgresapp.sum %}
#Check hashstring for archive downloads
{%- if grains['saltversioninfo'] <= [2016, 11, 6] %}
{%- if pg.macos.postgresapp.sum %}
pg-check-archive-hash:
module.run:
- name: file.check_hash
@ -40,7 +38,6 @@ pg-check-archive-hash:
- require_in:
- archive: pg-package-install
{%- endif %}
{%- endif %}
pg-package-install:
macpackage.installed:
@ -56,7 +53,7 @@ pg-package-install:
- file: pg-package-install
- file: pg-remove-archive
file.append:
- name: {{ pg.userhomes }}/{{ pg.systemuser }}/.bash_profile
- name: {{ pg.userhomes }}/{{ pg.user }}/.bash_profile
- text: 'export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin'
pg-remove-archive:

View file

@ -33,7 +33,7 @@ RedHat:
gpgcheck: 1
gpgkey: 'https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG-{{ release }}'
{% if repo.use_upstream_repo %}
{% if repo.use_upstream_repo == true %}
{% set data_dir = '/var/lib/pgsql/' ~ repo.version ~ '/data' %}
@ -104,7 +104,7 @@ Suse:
gpgcheck: 1
gpgautoimport: True
{% if repo.use_upstream_repo %}
{% if repo.use_upstream_repo == true %}
{# Pillars needed are 'use_upstream_repo: True' and 'version: n.n'. #}
{# Avoid setting package names as pillars, as may corrupt postgres. #}
{% set lib_dir = '/var/lib/pgsql/' ~ repo.version ~ '/data' %}
@ -133,13 +133,14 @@ Suse:
{% endif %}
{%- if grains.os == 'MacOS' %}
## jinja check avoids rendering noise/failure on Linux
MacOS:
{# todo: homebrew postgresql #}
{% if repo.use_upstream_repo == 'homebrew' %}
{%- if repo.use_upstream_repo == 'homebrew' %}
service: homebrew.mxcl.postgresql
{% elif repo.use_upstream_repo == 'postgresapp' %}
{%- elif repo.use_upstream_repo == 'postgresapp' %}
service: com.postgresapp.Postgres2
{% endif %}
{%- endif %}
pkg: postgresql
pkg_client:
pkg_libpq_dev:
@ -152,5 +153,6 @@ MacOS:
test: test -f /Users/{{ repo.user }}/Library/AppSupport/postgres_{{ repo.use_upstream_repo }}/PG_VERSION
user: {{ repo.user }}
group: {{ repo.group }}
{%- endif %}
# vim: ft=sls

View file

@ -4,7 +4,7 @@
{%- if postgres.bake_image %}
{%- do includes.append('postgres.server.image') %}
{%- endif %}
{%- if postgres.use_upstream_repo -%}
{%- if postgres.use_upstream_repo == true -%}
{%- do includes.append('postgres.upstream') %}
{%- endif %}
@ -18,16 +18,27 @@ include:
postgresql-server:
pkg.installed:
- pkgs: {{ pkgs }}
{%- if postgres.use_upstream_repo %}
{%- if postgres.use_upstream_repo == true %}
- refresh: True
- require:
- pkgrepo: postgresql-repo
{%- endif %}
{%- if grains.os == 'MacOS' %}
#Register as Launchd LaunchAgent for system users
- require_in:
- file: postgresql-server
file.managed:
- name: /Library/LaunchAgents/{{ postgres.service }}.plist
- source: /usr/local/opt/postgres/{{ postgres.service }}.plist
- group: wheel
- require_in:
- service: postgresql-running
{%- else %}
# Alternatives system. Make server binaries available in $PATH
{%- if 'bin_dir' in postgres and postgres.linux.altpriority %}
{%- for bin in postgres.server_bins %}
{%- set path = salt['file.join'](postgres.bin_dir, bin) %}
{%- if 'bin_dir' in postgres and postgres.linux.altpriority %}
{%- for bin in postgres.server_bins %}
{%- set path = salt['file.join'](postgres.bin_dir, bin) %}
{{ bin }}:
alternatives.install:
@ -40,7 +51,9 @@ postgresql-server:
- require_in:
- cmd: postgresql-cluster-prepared
{%- endfor %}
{%- endfor %}
{%- endif %}
{%- endif %}
postgresql-cluster-prepared:
@ -59,6 +72,12 @@ postgresql-config-dir:
- name: {{ postgres.conf_dir }}
- user: {{ postgres.user }}
- group: {{ postgres.group }}
- dir_mode: 775
- force: True
- file_mode: 644
- recurse:
- user
- group
- makedirs: True
- require:
- cmd: postgresql-cluster-prepared
@ -134,7 +153,9 @@ postgresql-running:
service.running:
- name: {{ postgres.service }}
- enable: True
{% if grains.os not in ('MacOS',) %}
- reload: True
{% endif %}
- watch:
- file: postgresql-pg_hba

View file

@ -7,7 +7,7 @@
<string>limit.maxfiles</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>/bin/launchctl</string>
<string>limit</string>
<string>maxfiles</string>
<string>{{ soft_limit }}</string>

View file

@ -1,8 +1,8 @@
#!/usr/bin/env bash
vendor=$1
shortcutName='${1}'
app="postgres.app"
Source="/Applications/$app"
Destination="{{ homes }}/{{ user }}/Desktop"
Destination="{{ homes }}/{{ user }}/Desktop/${shortcutName}"
/usr/bin/osascript -e "tell application \"Finder\" to make alias file to POSIX file \"$Source\" at POSIX file \"$Destination\""

View file

@ -3,7 +3,7 @@
{%- if 'pkg_repo' in postgres -%}
{%- if postgres.use_upstream_repo -%}
{%- if postgres.use_upstream_repo == true -%}
# Add upstream repository for your distro
postgresql-repo:
@ -25,9 +25,11 @@ postgresql-repo:
{%- else -%}
# Notify that we don't manage this distro
{% if grains.os not in ('Windows', 'MacOS',) %}
postgresql-repo:
test.show_notification:
- text: |
PostgreSQL does not provide package repository for {{ grains['osfinger'] }}
{% endif %}
{%- endif %}