Merge pull request #398 from myii/PR_master-f_defaults
feat(`tofs`): allow TOFS for master+minion configuration
This commit is contained in:
commit
05b71abff7
|
@ -46,7 +46,32 @@ salt:
|
|||
salt_minion_pkg_source: 'https://repo.saltstack.com/osx/salt-2017.7.4-py3-x86_64.pkg'
|
||||
salt_minion_pkg_hash: 'https://repo.saltstack.com/osx/salt-2017.7.4-py3-x86_64.pkg.md5'
|
||||
|
||||
# tofs:
|
||||
# The files_switch key serves as a selector for alternative
|
||||
# directories under the formula files directory. See TOFS pattern
|
||||
# doc for more info.
|
||||
# Note: Any value not evaluated by `config.get` will be used literally.
|
||||
# This can be used to set custom paths, as many levels deep as required.
|
||||
# files_switch:
|
||||
# - any/path/can/be/used/here
|
||||
# - id
|
||||
# - osfinger
|
||||
# - os
|
||||
# - os_family
|
||||
# All aspects of path/file resolution are customisable using the options below.
|
||||
# This is unnecessary in most cases; there are sensible defaults.
|
||||
# path_prefix: template_alt
|
||||
# dirs:
|
||||
# files: files_alt
|
||||
# default: default_alt
|
||||
# source_files:
|
||||
# salt-master:
|
||||
# - 'alt_master.d'
|
||||
# salt-minion:
|
||||
# - 'alt_minion.d'
|
||||
|
||||
# salt master config
|
||||
master_config_use_TOFS: True
|
||||
master:
|
||||
fileserver_backend:
|
||||
- git
|
||||
|
@ -127,6 +152,7 @@ salt:
|
|||
- /srv/salt/reactors/deploy.sls
|
||||
|
||||
# salt minion config:
|
||||
minion_config_use_TOFS: True
|
||||
minion:
|
||||
|
||||
# single master setup
|
||||
|
|
|
@ -10,6 +10,8 @@ salt:
|
|||
|
||||
minion_remove_config: False
|
||||
master_remove_config: False
|
||||
minion_config_use_TOFS: False
|
||||
master_config_use_TOFS: False
|
||||
|
||||
minion_service: salt-minion
|
||||
master_service: salt-master
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
########################################################################
|
||||
## File managed by Salt.
|
||||
## Your changes will be overwritten.
|
||||
########################################################################
|
|
@ -0,0 +1,4 @@
|
|||
########################################################################
|
||||
## File managed by Salt.
|
||||
## Your changes will be overwritten.
|
||||
########################################################################
|
|
@ -0,0 +1,4 @@
|
|||
########################################################################
|
||||
## File managed by Salt.
|
||||
## Your changes will be overwritten.
|
||||
########################################################################
|
|
@ -0,0 +1,4 @@
|
|||
########################################################################
|
||||
## File managed by Salt.
|
||||
## Your changes will be overwritten.
|
||||
########################################################################
|
|
@ -0,0 +1,4 @@
|
|||
########################################################################
|
||||
## File managed by Salt.
|
||||
## Your changes will be overwritten.
|
||||
########################################################################
|
|
@ -0,0 +1,4 @@
|
|||
########################################################################
|
||||
## File managed by Salt.
|
||||
## Your changes will be overwritten.
|
||||
########################################################################
|
|
@ -0,0 +1,4 @@
|
|||
########################################################################
|
||||
## File managed by Salt.
|
||||
## Your changes will be overwritten.
|
||||
########################################################################
|
|
@ -0,0 +1,4 @@
|
|||
########################################################################
|
||||
## File managed by Salt.
|
||||
## Your changes will be overwritten.
|
||||
########################################################################
|
|
@ -0,0 +1,101 @@
|
|||
{%- macro files_switch(source_files,
|
||||
lookup=None,
|
||||
default_files_switch=['id', 'os_family'],
|
||||
indent_width=6,
|
||||
v1_path_prefix='') %}
|
||||
{#-
|
||||
Returns a valid value for the "source" parameter of a "file.managed"
|
||||
state function. This makes easier the usage of the Template Override and
|
||||
Files Switch (TOFS) pattern.
|
||||
|
||||
Params:
|
||||
* source_files: ordered list of files to look for
|
||||
* lookup: key under '<tplroot>:tofs:source_files' to override
|
||||
list of source files
|
||||
* default_files_switch: if there's no config (e.g. pillar)
|
||||
'<tplroot>:tofs:files_switch' this is the ordered list of grains to
|
||||
use as selector switch of the directories under
|
||||
"<path_prefix>/files"
|
||||
* indent_witdh: indentation of the result value to conform to YAML
|
||||
* v1_path_prefix: (deprecated) only used for injecting a path prefix into
|
||||
the source, to support older TOFS configs
|
||||
|
||||
Example (based on a `tplroot` of `xxx`):
|
||||
|
||||
If we have a state:
|
||||
|
||||
Deploy configuration:
|
||||
file.managed:
|
||||
- name: /etc/yyy/zzz.conf
|
||||
- source: {{ files_switch(['/etc/yyy/zzz.conf', '/etc/yyy/zzz.conf.jinja'],
|
||||
lookup='Deploy configuration'
|
||||
) }}
|
||||
- template: jinja
|
||||
|
||||
In a minion with id=theminion and os_family=RedHat, it's going to be
|
||||
rendered as:
|
||||
|
||||
Deploy configuration:
|
||||
file.managed:
|
||||
- name: /etc/yyy/zzz.conf
|
||||
- source:
|
||||
- salt://xxx/files/theminion/etc/yyy/zzz.conf
|
||||
- salt://xxx/files/theminion/etc/yyy/zzz.conf.jinja
|
||||
- salt://xxx/files/RedHat/etc/yyy/zzz.conf
|
||||
- salt://xxx/files/RedHat/etc/yyy/zzz.conf.jinja
|
||||
- salt://xxx/files/default/etc/yyy/zzz.conf
|
||||
- salt://xxx/files/default/etc/yyy/zzz.conf.jinja
|
||||
- template: jinja
|
||||
#}
|
||||
{#- Get the `tplroot` from `tpldir` #}
|
||||
{%- set tplroot = tpldir.split('/')[0] %}
|
||||
{%- set path_prefix = salt['config.get'](tplroot ~ ':tofs:path_prefix', tplroot) %}
|
||||
{%- set files_dir = salt['config.get'](tplroot ~ ':tofs:dirs:files', 'files') %}
|
||||
{%- set files_switch_list = salt['config.get'](
|
||||
tplroot ~ ':tofs:files_switch',
|
||||
default_files_switch
|
||||
) %}
|
||||
{#- Lookup source_files (v2), files (v1), or fallback to source_files parameter #}
|
||||
{%- set src_files = salt['config.get'](
|
||||
tplroot ~ ':tofs:source_files:' ~ lookup,
|
||||
salt['config.get'](
|
||||
tplroot ~ ':tofs:files:' ~ lookup,
|
||||
source_files
|
||||
)
|
||||
) %}
|
||||
{#- Only add to [''] when supporting older TOFS implementations #}
|
||||
{%- set path_prefix_exts = [''] %}
|
||||
{%- if v1_path_prefix != '' %}
|
||||
{%- do path_prefix_exts.append(v1_path_prefix) %}
|
||||
{%- endif %}
|
||||
{%- for path_prefix_ext in path_prefix_exts %}
|
||||
{%- set path_prefix_inc_ext = path_prefix ~ path_prefix_ext %}
|
||||
{#- For older TOFS implementation, use `files_switch` from the config #}
|
||||
{#- Use the default, new method otherwise #}
|
||||
{%- set fsl = salt['config.get'](
|
||||
tplroot ~ path_prefix_ext|replace('/', ':') ~ ':files_switch',
|
||||
files_switch_list
|
||||
) %}
|
||||
{#- Append an empty value to evaluate as `default` in the loop below #}
|
||||
{%- if '' not in fsl %}
|
||||
{%- do fsl.append('') %}
|
||||
{%- endif %}
|
||||
{%- for fs in fsl %}
|
||||
{%- for src_file in src_files %}
|
||||
{%- if fs %}
|
||||
{%- set fs_dir = salt['config.get'](fs, fs) %}
|
||||
{%- else %}
|
||||
{%- set fs_dir = salt['config.get'](tplroot ~ ':tofs:dirs:default', 'default') %}
|
||||
{%- endif %}
|
||||
{%- set url = [
|
||||
'- salt:/',
|
||||
path_prefix_inc_ext.strip('/'),
|
||||
files_dir.strip('/'),
|
||||
fs_dir.strip('/'),
|
||||
src_file.strip('/'),
|
||||
] | select | join('/') %}
|
||||
{{ url | indent(indent_width, true) }}
|
||||
{%- endfor %}
|
||||
{%- endfor %}
|
||||
{%- endfor %}
|
||||
{%- endmacro %}
|
|
@ -1,4 +1,6 @@
|
|||
{% from "salt/map.jinja" import salt_settings with context %}
|
||||
{%- set tplroot = tpldir.split('/')[0] %}
|
||||
{%- from tplroot ~ "/map.jinja" import salt_settings with context %}
|
||||
{%- from tplroot ~ "/libtofs.jinja" import files_switch with context %}
|
||||
|
||||
salt-master:
|
||||
{% if salt_settings.install_packages %}
|
||||
|
@ -14,8 +16,16 @@ salt-master:
|
|||
{% endif %}
|
||||
file.recurse:
|
||||
- name: {{ salt_settings.config_path }}/master.d
|
||||
{%- if salt_settings.master_config_use_TOFS %}
|
||||
- template: ''
|
||||
- source: {{ files_switch(['master.d'],
|
||||
lookup='salt-master'
|
||||
)
|
||||
}}
|
||||
{%- else %}
|
||||
- template: jinja
|
||||
- source: salt://{{ slspath }}/files/master.d
|
||||
{%- endif %}
|
||||
- clean: {{ salt_settings.clean_config_d_dir }}
|
||||
- exclude_pat: _*
|
||||
service.running:
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
{% from "salt/map.jinja" import salt_settings with context %}
|
||||
{%- set tplroot = tpldir.split('/')[0] %}
|
||||
{%- from tplroot ~ "/map.jinja" import salt_settings with context %}
|
||||
{%- from tplroot ~ "/libtofs.jinja" import files_switch with context %}
|
||||
|
||||
{% if salt_settings.install_packages and grains.os == 'MacOS' and salt_settings.salt_minion_pkg_source != '' and salt_settings.version != '' %}
|
||||
{# only download IF we know where to get the pkg from and if we know what version to check the current install (if installed) against #}
|
||||
|
@ -45,12 +47,20 @@ salt-minion:
|
|||
{% endif %}
|
||||
file.recurse:
|
||||
- name: {{ salt_settings.config_path }}/minion.d
|
||||
{%- if salt_settings.minion_config_use_TOFS %}
|
||||
- template: ''
|
||||
- source: {{ files_switch(['minion.d'],
|
||||
lookup='salt-minion'
|
||||
)
|
||||
}}
|
||||
{%- else %}
|
||||
- template: jinja
|
||||
- source: salt://{{ slspath }}/files/minion.d
|
||||
- clean: {{ salt_settings.clean_config_d_dir }}
|
||||
- exclude_pat: _*
|
||||
- context:
|
||||
standalone: False
|
||||
{%- endif %}
|
||||
- clean: {{ salt_settings.clean_config_d_dir }}
|
||||
- exclude_pat: _*
|
||||
service.running:
|
||||
- enable: True
|
||||
- name: {{ salt_settings.minion_service }}
|
||||
|
|
Loading…
Reference in New Issue