diff --git a/cron/config.sls b/cron/config/file.sls similarity index 82% rename from cron/config.sls rename to cron/config/file.sls index 55748eb..ccc0333 100644 --- a/cron/config.sls +++ b/cron/config/file.sls @@ -1,10 +1,12 @@ # -*- coding: utf-8 -*- # vim: ft=sls -{%- from "cron/map.jinja" import cron_settings with context %} +{#- Get the `tplroot` from `tpldir` #} +{%- set tplroot = tpldir.split('/')[0] %} +{%- from tplroot ~ "/map.jinja" import cron with context %} -{%- if 'tasks' in cron_settings %} -{%- for task,task_options in cron_settings.tasks.items() %} +{%- if 'tasks' in cron %} + {%- for task,task_options in cron.tasks.items() %} cron.{{ task }}: cron.{{ task_options.type|default('present') }}: @@ -37,5 +39,6 @@ cron.{{ task }}: {%- if 'comment' in task_options %} - comment: {{ task_options.comment }} {%- endif %} -{%- endfor %} + + {%- endfor %} {%- endif %} diff --git a/cron/config/init.sls b/cron/config/init.sls new file mode 100644 index 0000000..465ddfe --- /dev/null +++ b/cron/config/init.sls @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# vim: ft=sls + +include: + - .file diff --git a/cron/defaults.yaml b/cron/defaults.yaml new file mode 100644 index 0000000..2b0646b --- /dev/null +++ b/cron/defaults.yaml @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# vim: ft=yaml +--- +cron: {} diff --git a/cron/init.sls b/cron/init.sls index 74ad02e..858a8e6 100644 --- a/cron/init.sls +++ b/cron/init.sls @@ -2,6 +2,6 @@ # vim: ft=sls include: - - cron.install - - cron.config - - cron.service + - .package + - .config + - .service diff --git a/cron/install.sls b/cron/install.sls deleted file mode 100644 index 91baef8..0000000 --- a/cron/install.sls +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- -# vim: ft=sls - -{%- from "cron/map.jinja" import cron_settings with context %} - -cron.install: - pkg.installed: - - name: {{ cron_settings.pkg }} diff --git a/cron/map.jinja b/cron/map.jinja index 5b107f9..12a1790 100644 --- a/cron/map.jinja +++ b/cron/map.jinja @@ -1,24 +1,49 @@ # -*- coding: utf-8 -*- # vim: ft=jinja -{%- set os_family_map = salt['grains.filter_by']({ - 'RedHat': { - 'pkg': 'cronie', - 'service': 'crond', - }, - 'Suse': { - 'pkg': 'cronie', - 'service': 'cron', - }, - 'Debian': { - 'pkg': 'cron', - 'service': 'cron', - }, - }, grain='os_family', merge=salt['pillar.get']('cron:lookup')) %} +{#- Get the `tplroot` from `tpldir` #} +{%- set tplroot = tpldir.split('/')[0] %} +{#- Start imports as #} +{%- import_yaml tplroot ~ "/defaults.yaml" as default_settings %} +{%- import_yaml tplroot ~ "/osarchmap.yaml" as osarchmap %} +{%- import_yaml tplroot ~ "/osfamilymap.yaml" as osfamilymap %} +{%- import_yaml tplroot ~ "/osmap.yaml" as osmap %} +{%- import_yaml tplroot ~ "/osfingermap.yaml" as osfingermap %} -{%- set cron_settings = salt['pillar.get']( - 'cron', - default=os_family_map, - merge=True - ) +{#- Retrieve the config dict only once #} +{%- set _config = salt['config.get'](tplroot, default={}) %} + +{%- set defaults = salt['grains.filter_by']( + default_settings, + default=tplroot, + merge=salt['grains.filter_by']( + osarchmap, + grain='osarch', + merge=salt['grains.filter_by']( + osfamilymap, + grain='os_family', + merge=salt['grains.filter_by']( + osmap, + grain='os', + merge=salt['grains.filter_by']( + osfingermap, + grain='osfinger', + merge=salt['grains.filter_by']( + _config, + default='lookup' + ) + ) + ) + ) + ) + ) %} + +{%- set config = salt['grains.filter_by']( + {'defaults': defaults}, + default='defaults', + merge=_config + ) +%} + +{%- set cron = config %} diff --git a/cron/osarchmap.yaml b/cron/osarchmap.yaml new file mode 100644 index 0000000..ab3bc1f --- /dev/null +++ b/cron/osarchmap.yaml @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# vim: ft=yaml +# +# Setup variables using grains['osarch'] based logic. +# You just need to add the key:values for an `osarch` that differ +# from `defaults.yaml`. +# Only add an `osarch` which is/will be supported by the formula. +# +# If you do not need to provide defaults via the `osarch` grain, +# you will need to provide at least an empty dict in this file, e.g. +# osarch: {} +--- +amd64: + arch: amd64 + +x86_64: + arch: amd64 + +386: + arch: 386 + +arm64: + arch: arm64 + +armv6l: + arch: armv6l + +armv7l: + arch: armv7l + +ppc64le: + arch: ppc64le + +s390x: + arch: s390x diff --git a/cron/osfamilymap.yaml b/cron/osfamilymap.yaml new file mode 100644 index 0000000..733daa0 --- /dev/null +++ b/cron/osfamilymap.yaml @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# vim: ft=yaml +# +# Setup variables using grains['os_family'] based logic. +# You just need to add the key:values for an `os_family` that differ +# from `defaults.yaml` + `osarch.yaml`. +# Only add an `os_family` which is/will be supported by the formula. +# +# If you do not need to provide defaults via the `os_family` grain, +# you will need to provide at least an empty dict in this file, e.g. +# osfamilymap: {} +--- +Debian: + pkg: cron + service: cron + +RedHat: + pkg: cronie + service: crond + +Suse: + pkg: cronie + service: cron diff --git a/cron/osfingermap.yaml b/cron/osfingermap.yaml new file mode 100644 index 0000000..221bedf --- /dev/null +++ b/cron/osfingermap.yaml @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +# vim: ft=yaml +# +# Setup variables using grains['osfinger'] based logic. +# You just need to add the key:values for an `osfinger` that differ +# from `defaults.yaml` + `osarch.yaml` + `os_family.yaml` + `osmap.yaml`. +# Only add an `osfinger` which is/will be supported by the formula. +# +# If you do not need to provide defaults via the `os_finger` grain, +# you will need to provide at least an empty dict in this file, e.g. +# osfingermap: {} +--- +osfingermap: {} diff --git a/cron/osmap.yaml b/cron/osmap.yaml new file mode 100644 index 0000000..2ec94b4 --- /dev/null +++ b/cron/osmap.yaml @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +# vim: ft=yaml +# +# Setup variables using grains['os'] based logic. +# You just need to add the key:values for an `os` that differ +# from `defaults.yaml` + `osarch.yaml` + `os_family.yaml`. +# Only add an `os` which is/will be supported by the formula. +# +# If you do not need to provide defaults via the `os` grain, +# you will need to provide at least an empty dict in this file, e.g. +# osmap: {} +--- +osmap: {} diff --git a/cron/package/init.sls b/cron/package/init.sls new file mode 100644 index 0000000..d3e5518 --- /dev/null +++ b/cron/package/init.sls @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# vim: ft=sls + +include: + - .install diff --git a/cron/package/install.sls b/cron/package/install.sls new file mode 100644 index 0000000..036a5f4 --- /dev/null +++ b/cron/package/install.sls @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# vim: ft=sls + +{#- Get the `tplroot` from `tpldir` #} +{%- set tplroot = tpldir.split('/')[0] %} +{%- from tplroot ~ "/map.jinja" import cron with context %} + +cron.install: + pkg.installed: + - name: {{ cron.pkg }} diff --git a/cron/service.sls b/cron/service.sls deleted file mode 100644 index 1e46a94..0000000 --- a/cron/service.sls +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- -# vim: ft=sls - -{%- from "cron/map.jinja" import cron_settings with context %} - -cron.service: -{%- if 'enabled' not in cron_settings or ( 'enabled' in cron_settings and cron_settings.enabled ) %} - service.running: - - name: {{ cron_settings.service }} - - enable: True -{%- else %} - service.dead: - - name: {{ cron_settings.service }} - - enable: False -{%- endif %} diff --git a/cron/service/init.sls b/cron/service/init.sls new file mode 100644 index 0000000..6fe4d1a --- /dev/null +++ b/cron/service/init.sls @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# vim: ft=sls + +include: + - .running diff --git a/cron/service/running.sls b/cron/service/running.sls new file mode 100644 index 0000000..6aaad1b --- /dev/null +++ b/cron/service/running.sls @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# vim: ft=sls + +{#- Get the `tplroot` from `tpldir` #} +{%- set tplroot = tpldir.split('/')[0] %} +{%- from tplroot ~ "/map.jinja" import cron with context %} + +cron.service: +{%- if 'enabled' not in cron or ( 'enabled' in cron and cron.enabled ) %} + service.running: + - name: {{ cron.service }} + - enable: true +{%- else %} + service.dead: + - name: {{ cron.service }} + - enable: false +{%- endif %} diff --git a/docs/README.rst b/docs/README.rst index 04a9467..a6a3c36 100644 --- a/docs/README.rst +++ b/docs/README.rst @@ -49,7 +49,7 @@ Available states ^^^^^^^^ Installs and configures the cron package. -``cron.install`` +``cron.package`` ^^^^^^^^^^^^^^^^ Installs the cron package.