diff --git a/postfix/defaults.yaml b/postfix/defaults.yaml index 4cdf80d..0ff63f7 100644 --- a/postfix/defaults.yaml +++ b/postfix/defaults.yaml @@ -2,11 +2,11 @@ # vim: ft=yaml postfix: - aliases_file: /etc/aliases - config_path: /etc/postfix - package: postfix - postsrsd_pkg: postsrsd - postgrey_pkg: postgrey - root_grp: root - service: postfix - xbin_prefix: /usr + aliases_file: /etc/aliases + config_path: /etc/postfix + package: postfix + postsrsd_pkg: postsrsd + postgrey_pkg: postgrey + root_grp: root + service: postfix + xbin_prefix: /usr diff --git a/postfix/map.jinja b/postfix/map.jinja index af305fd..341d727 100644 --- a/postfix/map.jinja +++ b/postfix/map.jinja @@ -1,81 +1,15 @@ # -*- coding: utf-8 -*- # vim: ft=jinja -{%- macro deep_merge(a, b) %} -{#- This whole `'dict' in x.__class__.__name__` mess is a - workaround for the missing mapping test in CentOS 6's - ancient Jinja2, see #193 #} -{%- for k,v in b.iteritems() %} -{%- if v is string or v is number %} -{%- do a.update({ k: v }) %} -{%- elif 'dict' not in v.__class__.__name__ %} -{%- if a[k] is not defined %} -{%- do a.update({ k: v }) %} -{%- elif a[k] is iterable and 'dict' not in a[k].__class__.__name__ and - a[k] is not string %} -{%- do a.update({ k: v|list + a[k]|list}) %} -{%- else %} -{%- do a.update({ k: v }) %} -{%- endif %} -{%- elif 'dict' in v.__class__.__name__ %} -{%- if a[k] is not defined %} -{%- do a.update({ k: v }) %} -{%- elif 'dict' in a[k].__class__.__name__ %} -{%- do a.update({ k: v }) %} -{%- else %} -{%- do deep_merge(a[k], v) %} -{%- endif %} -{%- else %} -{%- do a.update({ k: 'ERROR: case not contempled in merging!' }) %} -{%- endif %} -{%- endfor %} -{%- endmacro %} +{% import_yaml "postfix/defaults.yaml" as defaults %} +{% import_yaml "postfix/osmap.yaml" as osmap %} - -{## Start with defaults from defaults.yaml ##} -{% import_yaml "postfix/defaults.yaml" as default_settings %} - -{## -Setup variable using grains['os_family'] based logic, only add key:values here -that differ from whats in defaults.yaml -##} -{% set osrelease = salt['grains.get']('osrelease') %} -{# set salt_release = salt['pillar.get']('salt:release', 'latest') #} -{# set postfix = salt['grains.filter_by'](#} -{% set os_family_map = salt['grains.filter_by']({ - 'Debian': { - 'policyd_spf_pkg': 'postfix-policyd-spf-python', - 'pcre_pkg': 'postfix-pcre', - 'mysql_pkg': 'postfix-mysql', - }, - 'Gentoo': { - 'package': 'mail-mta/postfix', - 'policyd_spf_pkg': 'mail-filter/pypolicyd-spf', - 'postgrey_pkg': 'mail-filter/postgrey', - 'postsrsd_pkg': 'mail-filter/postsrsd', - 'aliases_file': '/etc/mail/aliases', - }, - 'RedHat': { - 'policyd_spf_pkg': 'pypolicyd-spf', - }, - 'Arch' : { - 'policyd_spf_pkg': 'python-postfix-policyd-spf', - }, - 'FreeBSD' : { - 'policyd_spf_pkg': 'py27-postfix-policyd-spf-python', - 'aliases_file': '/etc/mail/aliases', - 'xbin_prefix': '/usr/local', - 'config_path': '/usr/local/etc/postfix', - 'root_grp': 'wheel', - }, -}, merge=salt['pillar.get']('postfix:lookup')) %} - -{## Merge the flavor_map to the default settings ##} -{% do deep_merge(default_settings.postfix, os_family_map) %} - -{## Merge in postfix:lookup pillar ##} -{% set postfix = salt['pillar.get']( - 'postfix', - default=default_settings.postfix, - merge=True) +{% set postfix = salt['grains.filter_by']( + defaults, + merge=salt['grains.filter_by']( + osmap, + grain='os', + merge=salt['pillar.get']('postfix:lookup', {}), + ), + base='postfix') %} diff --git a/postfix/osmap.yaml b/postfix/osmap.yaml new file mode 100644 index 0000000..a63d17a --- /dev/null +++ b/postfix/osmap.yaml @@ -0,0 +1,24 @@ +Arch: + policyd_spf_pkg: python-postfix-policyd-spf + +Debian: + policyd_spf_pkg: postfix-policyd-spf-python + pcre_pkg: postfix-pcre + mysql_pkg: postfix-mysql + +FreeBSD: + policyd_spf_pkg: py27-postfix-policyd-spf-python + aliases_file: /etc/mail/aliases + xbin_prefix: /usr/local + config_path: /usr/local/etc/postfix + root_grp: wheel + +Gentoo: + package: mail-mta/postfix + policyd_spf_pkg: mail-filter/pypolicyd-spf + postsrsd_pkg: mail-filter/postsrsd + postgrey_pkg: mail-filter/postgrey + aliases_file: /etc/mail/aliases + +RedHat: + policyd_spf_pkg: pypolicyd-spf