diff --git a/salt/map.jinja b/salt/map.jinja index b873fd3..6b9756a 100644 --- a/salt/map.jinja +++ b/salt/map.jinja @@ -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) %} diff --git a/salt/osfamilymap.yaml b/salt/osfamilymap.yaml new file mode 100644 index 0000000..68785ad --- /dev/null +++ b/salt/osfamilymap.yaml @@ -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 diff --git a/salt/osmap.yaml b/salt/osmap.yaml new file mode 100644 index 0000000..9b640db --- /dev/null +++ b/salt/osmap.yaml @@ -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 + + +