Merge pull request #395 from aboe76/simplify-map.jinja

Simplify map.jinja revert deep_merge solution from #193
This commit is contained in:
Imran Iqbal 2019-01-26 21:54:08 +00:00 committed by GitHub
commit 1d9643b14b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 187 additions and 230 deletions

View File

@ -1,240 +1,24 @@
# -*- 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 imports ##}
{% import_yaml "salt/defaults.yaml" as defaults %}
{% import_yaml "salt/osfamilymap.yaml" as osfamilymap %}
{% import_yaml "salt/osmap.yaml" as osmap %}
{% set lookup = salt['pillar.get']('salt:lookup', default={}, merge=True) %}
{% do defaults.salt.update(lookup) %}
{## Start with defaults from defaults.yaml ##}
{% import_yaml "salt/defaults.yaml" as default_settings %}
{# merge the osfamilymap #}
{% set osfamily = salt['grains.filter_by'](osfamilymap, grain='os_family') or{} %}
{% do salt['defaults.merge'](defaults['salt'], osfamily) %}
{##
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') %}
{# All minor releases appear in an `archive` sub-directory #}
{% if salt_release.split('.')|length >= 3 %}
{% set salt_release = 'archive/' ~ salt_release %}
{% endif %}
{% 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': {
'gitpython': {
'install_from_source': False,
},
'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',
'python_git': 'python2-gitpython',
'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': 'salt-minion',
'config_path': 'C:\salt\conf',
'minion_service': 'salt-minion',
},
'MacOS': {
'salt_minion': 'com.saltstack.salt',
'salt_minion_pkg_source': '',
'salt_minion_pkg_hash': '',
'config_path': '/private/etc/salt',
'minion_service': 'com.saltstack.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',
'api_service': 'salt:api',
'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 the osmap #}
{% set osmap = salt['grains.filter_by'](osmap, grain='os') or{} %}
{% do salt['defaults.merge'](defaults['salt'], osmap) %}
{## Merge in salt pillar ##}
{% set salt_settings = salt['pillar.get'](
'salt',
default=default_settings.salt,
merge=True)
%}
{% set salt_settings = salt['pillar.get']('salt', default=defaults['salt'], merge=True) %}
{## Merge in salt_formulas pillar ##}
{% set formulas_settings = salt['pillar.get'](
'salt_formulas',
default=default_settings.salt_formulas,
merge=True)
%}
{% set formulas_settings = salt['pillar.get']('salt_formulas',default=defaults['salt_formulas'], merge=True) %}

123
salt/osfamilymap.yaml Normal file
View File

@ -0,0 +1,123 @@
# -*- coding: utf-8 -*-
# vim: ft=yaml
{% set osrelease = salt['grains.get']('osrelease') %}
{% set salt_release = salt['pillar.get']('salt:release', 'latest') %}
{% if salt_release.split('.')|length >= 3 %}
{% set salt_release = 'archive/' ~ salt_release %}
{% endif %}
{% set os_lower = salt['grains.get']('os')|lower %}
{% set osmajorrelease = salt['grains.get']('osmajorrelease', osrelease)|string %}
{% set oscodename = salt['grains.get']('oscodename') %}
Debian:
pkgrepo: 'deb http://repo.saltstack.com/apt/{{ os_lower }}/{{ osmajorrelease }}/amd64/{{ salt_release }} {{ oscodename }} main'
key_url: 'https://repo.saltstack.com/apt/{{ os_lower }}/{{ osmajorrelease }}/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: python-pygit2
python_git: GitPython
gitfs:
gitpython:
install_from_source: False
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
python_git: python2-gitpython
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: salt-minion
config_path: 'C:\salt\conf'
minion_service: salt-minion
MacOS:
salt_minion: com.saltstack.salt
salt_minion_pkg_source: ''
salt_minion_pkg_hash: ''
config_path: /private/etc/salt
minion_service: com.saltstack.salt.minion

50
salt/osmap.yaml Normal file
View File

@ -0,0 +1,50 @@
# -*- coding: utf-8 -*-
# vim: ft=yaml
{% set osrelease = salt['grains.get']('osrelease') %}
{% set salt_release = salt['pillar.get']('salt:release', 'latest') %}
{% if salt_release.split('.')|length >= 3 %}
{% set salt_release = 'archive/' ~ salt_release %}
{% endif %}
{% set os_lower = salt['grains.get']('os')|lower %}
{% set osmajorrelease = salt['grains.get']('osmajorrelease', osrelease)|string %}
{% set oscodename = salt['grains.get']('oscodename') %}
Fedora:
pygit2: python2-pygit2
Ubuntu:
pkgrepo: 'deb http://repo.saltstack.com/apt/{{ os_lower }}/{{ osrelease }}/amd64/{{ salt_release }} {{ oscodename }} main'
key_url: 'https://repo.saltstack.com/apt/{{ 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: Null
Raspbian:
pkgrepo: 'deb http://repo.saltstack.com/apt/{{ os_lower }}/{{ osmajorrelease }}/armhf/{{ salt_release }} {{ oscodename }} main'
key_url: 'https://repo.saltstack.com/apt/{{ os_lower }}/{{ osmajorrelease }}/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'
api_service: 'salt:api'
python_dulwich: 'py27-dulwich'
gitfs:
dulwich:
install_from_source: False
config_path: /opt/local/etc/salt
master:
gitfs_provider: dulwich