# -*- 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.items() %} {%- 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 "salt/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 os_family_map = salt['grains.filter_by']({ 'Debian': { 'pkgrepo': 'deb http://repo.saltstack.com/apt/' + salt['grains.get']('os')|lower + '/' + salt['grains.get']('osmajorrelease', osrelease)|string + '/amd64/' + salt_release + ' ' + salt['grains.get']('oscodename') + ' main', 'key_url': 'https://repo.saltstack.com/apt/' + salt['grains.get']('os')|lower + '/' + salt['grains.get']('osmajorrelease', osrelease)|string + '/amd64/' + salt_release + '/SALTSTACK-GPG-KEY.pub', 'libgit2': 'libgit2-22', 'pyinotify': 'python-pyinotify', 'gitfs': { 'pygit2': { 'install_from_source': True, 'version': '0.22.1', 'git': { 'require_state': False, 'install_from_package': 'git', }, 'libgit2': { 'install_from_source': False, }, }, }, }, 'RedHat': { 'pkgrepo': 'https://repo.saltstack.com/yum/redhat/$releasever/$basearch/' + salt_release, 'key_url': 'https://repo.saltstack.com/yum/redhat/$releasever/$basearch/' + salt_release + '/SALTSTACK-GPG-KEY.pub', 'pygit2': salt['grains.filter_by']({ 'Fedora': 'python2-pygit2', 'default': 'python-pygit2', }, grain='os'), 'python_git': 'GitPython', 'gitfs': { 'pygit2': { 'install_from_source': False, 'git': { 'require_state': False, 'install_from_package': 'git', }, }, }, 'master': { 'gitfs_provider': 'pygit2' }, }, 'Suse': { 'pygit2': 'python-pygit2', 'pyinotify': 'python-pyinotify', 'gitfs': { 'pygit2': { 'install_from_source': False, 'git': { 'require_state': False, 'install_from_package': 'git', }, }, }, 'master': { 'gitfs_provider': 'pygit2' }, }, 'Gentoo': { 'salt_master': 'app-admin/salt', 'salt_minion': 'app-admin/salt', 'salt_syndic': 'app-admin/salt', 'salt_api': 'app-admin/salt', 'salt_cloud': 'app-admin/salt', 'pyinotify': 'dev-python/pyinotify', }, 'Arch': { 'salt_master': 'salt', 'salt_minion': 'salt', 'salt_syndic': 'salt', 'salt_cloud': 'salt', 'salt_api': 'salt', 'salt_ssh': 'salt', 'pygit2': 'python2-pygit2', 'libgit2': 'libgit2', 'pyinotify': 'python2-pyinotify', }, 'Alpine': { 'salt_master': 'salt-master', 'salt_minion': 'salt-minion', 'salt_syndic': 'salt-syndic', 'salt_cloud': 'salt-cloud', 'salt_api': 'salt-api', 'salt_ssh': 'salt-ssh', 'pygit2': 'py2-pygit2', 'libgit2': 'libgit2', }, 'FreeBSD': { 'salt_master': 'py27-salt', 'salt_minion': 'py27-salt', 'salt_syndic': 'py27-salt', 'salt_cloud': 'py27-salt', 'salt_api': 'py27-salt', 'salt_ssh': 'py27-salt', 'python_git': 'py27-GitPython', 'pygit2': 'py27-pygit2', 'config_path': '/usr/local/etc/salt', 'minion_service': 'salt_minion', 'master_service': 'salt_master', 'api_service': 'salt_api', 'syndic_service': 'salt_syndic', }, 'OpenBSD': { 'salt_master': 'salt', 'salt_minion': 'salt', 'salt_syndic': 'salt', 'salt_cloud': 'salt', 'salt_api': 'salt', 'salt_ssh': 'salt', 'config_path': '/etc/salt', 'minion_service': 'salt_minion', 'master_service': 'salt_master', 'python_git': 'py-GitPython', }, 'Windows': { 'salt_minion': 'saltstack.minion', 'config_path': 'C:\salt\conf', 'minion_service': 'salt-minion', }, }, merge=salt['grains.filter_by']({ 'Ubuntu': { 'pkgrepo': 'deb http://repo.saltstack.com/apt/' + salt['grains.get']('os')|lower + '/' + osrelease + '/amd64/' + salt_release + ' ' + salt['grains.get']('oscodename') + ' main', 'key_url': 'https://repo.saltstack.com/apt/' + salt['grains.get']('os')|lower + '/' + osrelease + '/amd64/' + salt_release + '/SALTSTACK-GPG-KEY.pub', 'pygit2': 'python-pygit2', 'gitfs': { 'pygit2': { 'install_from_source': False, 'git': { 'require_state': False, 'install_from_package': None, }, }, }, }, 'Raspbian': { 'pkgrepo': 'deb http://repo.saltstack.com/apt/' + salt['grains.get']('os_family')|lower + '/' + salt['grains.get']('osmajorrelease', osrelease)|string + '/armhf/' + salt_release + ' ' + salt['grains.get']('oscodename') + ' main', 'key_url': 'https://repo.saltstack.com/apt/' + salt['grains.get']('os_family')|lower + '/' + salt['grains.get']('osmajorrelease', osrelease)|string + '/armhf/' + salt_release + '/SALTSTACK-GPG-KEY.pub', }, 'SmartOS': { 'salt_master': 'salt', 'salt_minion': 'salt', 'salt_syndic': 'salt', 'salt_cloud': 'salt', 'salt_api': 'salt', 'salt_ssh': 'salt', 'minion_service': 'salt:minion', 'master_service': 'salt:master', 'python_dulwich': 'py27-dulwich', 'gitfs': { 'dulwich': { 'install_from_source': False, } }, 'config_path': '/opt/local/etc/salt', 'master': { 'gitfs_provider': 'dulwich' }, } }, grain='os', merge=salt['pillar.get']('salt:lookup'))) %} {## Merge the flavor_map to the default settings ##} {% do deep_merge(default_settings.salt,os_family_map) %} {## Merge in salt:lookup pillar ##} {% set salt_settings = salt['pillar.get']( 'salt', default=default_settings.salt, merge=True) %}