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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								salt/files/default/master.d/engine.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								salt/files/default/master.d/engine.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
			
		||||
########################################################################
 | 
			
		||||
## File managed by Salt.
 | 
			
		||||
## Your changes will be overwritten.
 | 
			
		||||
########################################################################
 | 
			
		||||
							
								
								
									
										4
									
								
								salt/files/default/master.d/f_defaults.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								salt/files/default/master.d/f_defaults.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
			
		||||
########################################################################
 | 
			
		||||
## File managed by Salt.
 | 
			
		||||
## Your changes will be overwritten.
 | 
			
		||||
########################################################################
 | 
			
		||||
							
								
								
									
										4
									
								
								salt/files/default/master.d/lxc_profiles.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								salt/files/default/master.d/lxc_profiles.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
			
		||||
########################################################################
 | 
			
		||||
## File managed by Salt.
 | 
			
		||||
## Your changes will be overwritten.
 | 
			
		||||
########################################################################
 | 
			
		||||
							
								
								
									
										4
									
								
								salt/files/default/master.d/reactor.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								salt/files/default/master.d/reactor.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
			
		||||
########################################################################
 | 
			
		||||
## File managed by Salt.
 | 
			
		||||
## Your changes will be overwritten.
 | 
			
		||||
########################################################################
 | 
			
		||||
							
								
								
									
										4
									
								
								salt/files/default/minion.d/beacons.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								salt/files/default/minion.d/beacons.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
			
		||||
########################################################################
 | 
			
		||||
## File managed by Salt.
 | 
			
		||||
## Your changes will be overwritten.
 | 
			
		||||
########################################################################
 | 
			
		||||
							
								
								
									
										4
									
								
								salt/files/default/minion.d/engine.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								salt/files/default/minion.d/engine.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
			
		||||
########################################################################
 | 
			
		||||
## File managed by Salt.
 | 
			
		||||
## Your changes will be overwritten.
 | 
			
		||||
########################################################################
 | 
			
		||||
							
								
								
									
										4
									
								
								salt/files/default/minion.d/f_defaults.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								salt/files/default/minion.d/f_defaults.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
			
		||||
########################################################################
 | 
			
		||||
## File managed by Salt.
 | 
			
		||||
## Your changes will be overwritten.
 | 
			
		||||
########################################################################
 | 
			
		||||
							
								
								
									
										4
									
								
								salt/files/default/minion.d/reactor.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								salt/files/default/minion.d/reactor.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
			
		||||
########################################################################
 | 
			
		||||
## File managed by Salt.
 | 
			
		||||
## Your changes will be overwritten.
 | 
			
		||||
########################################################################
 | 
			
		||||
							
								
								
									
										101
									
								
								salt/libtofs.jinja
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								salt/libtofs.jinja
									
									
									
									
									
										Normal file
									
								
							@ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user