Import map.jinja+defaults.yaml structure from salt-formula

Now using the `deep_merge()` macro so we can move the
values which are identical on most distributions from
`map.jinja` to `defaults.yaml`.
This commit is contained in:
Florian Ermisch 2017-08-24 11:21:48 +02:00 committed by Wurzel Kollektiv
parent 7fc82e0bd2
commit f30c63f9ed
2 changed files with 66 additions and 18 deletions

10
postfix/defaults.yaml Normal file
View File

@ -0,0 +1,10 @@
# -*- coding: utf-8 -*-
# vim: ft=yaml
postfix:
aliases_file: /etc/aliases
config_path: /etc/postfix
package: postfix
postsrsd_pkg: postsrsd
postgrey_pkg: postgrey
service: postfix

View File

@ -1,36 +1,74 @@
{% set postfix = salt['grains.filter_by']({ # -*- 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 %}
{## 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': { 'Debian': {
'package': 'postfix',
'policyd_spf_pkg': 'postfix-policyd-spf-python', 'policyd_spf_pkg': 'postfix-policyd-spf-python',
'postsrsd_pkg': 'postsrsd',
'postgrey_pkg': 'postgrey',
'pcre_pkg': 'postfix-pcre', 'pcre_pkg': 'postfix-pcre',
'mysql_pkg': 'postfix-mysql', 'mysql_pkg': 'postfix-mysql',
'service': 'postfix',
'aliases_file': '/etc/aliases',
}, },
'Gentoo': { 'Gentoo': {
'package': 'mail-mta/postfix', 'package': 'mail-mta/postfix',
'policyd_spf_pkg': 'mail-filter/pypolicyd-spf', 'policyd_spf_pkg': 'mail-filter/pypolicyd-spf',
'postsrsd_pkg': 'mail-filter/postsrsd',
'postgrey_pkg': 'mail-filter/postgrey', 'postgrey_pkg': 'mail-filter/postgrey',
'service': 'postfix', 'postsrsd_pkg': 'mail-filter/postsrsd',
'aliases_file': '/etc/mail/aliases', 'aliases_file': '/etc/mail/aliases',
}, },
'RedHat': { 'RedHat': {
'package': 'postfix',
'policyd_spf_pkg': 'pypolicyd-spf', 'policyd_spf_pkg': 'pypolicyd-spf',
'postsrsd_pkg': 'postsrsd',
'postgrey_pkg': 'postgrey',
'service': 'postfix',
'aliases_file': '/etc/aliases',
}, },
'Arch' : { 'Arch' : {
'package': 'postfix',
'policyd_spf_pkg': 'python-postfix-policyd-spf', 'policyd_spf_pkg': 'python-postfix-policyd-spf',
'postsrsd_pkg': 'postsrsd',
'postgrey_pkg': 'postgrey',
'service': 'postfix',
'aliases_file': '/etc/aliases',
}, },
}, merge=salt['pillar.get']('postfix:lookup')) %} }, 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)
%}