From 8e41067c6998652be9b44a2906d1a4f4cbe87a27 Mon Sep 17 00:00:00 2001 From: Dafydd Jones Date: Mon, 7 Nov 2016 18:49:38 +0000 Subject: [PATCH] allow non-default config settings in master.d/f_defaults.conf (similar to PR#247) --- salt/files/master.d/f_defaults.conf | 37 +++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/salt/files/master.d/f_defaults.conf b/salt/files/master.d/f_defaults.conf index 702f852..b97bf57 100644 --- a/salt/files/master.d/f_defaults.conf +++ b/salt/files/master.d/f_defaults.conf @@ -3,7 +3,9 @@ {% set reserved_keys = ['master', 'minion', 'cloud', 'salt_cloud_certs', 'engines'] -%} {% set cfg_salt = pillar.get('salt', {}) -%} {% set cfg_master = cfg_salt.get('master', {}) -%} +{% set default_keys = [] -%} {%- macro get_config(configname, default_value) -%} +{%- do default_keys.append(configname) %} {%- if configname in cfg_master -%} {{ configname }}: {{ cfg_master[configname]|json }} {%- elif configname in cfg_salt and configname not in reserved_keys -%} @@ -78,6 +80,7 @@ # "states", "returners", etc. # Like 'extension_modules' but can take an array of paths {% if 'module_dirs' in cfg_master -%} +{%- do default_keys.append('module_dirs') %} module_dirs: {%- for dir in cfg_master['module_dirs'] %} - {{ dir}} @@ -152,6 +155,7 @@ module_dirs: # Only events returns matching tags in a whitelist {% if 'event_return_whitelist' in cfg_master -%} +{%- do default_keys.append('event_return_whitelist') %} event_return_whitelist: {%- for event_return in cfg_master['event_return_whitelist'] %} - {{ event_return }} @@ -169,6 +173,7 @@ event_return_whitelist: # Store all event returns _except_ the tags in a blacklist {% if 'event_return_blacklist' in cfg_master -%} +{%- do default_keys.append('event_return_blacklist') %} event_return_blacklist: {%- for event_return in cfg_master['event_return_blacklist'] %} - {{ event_return }} @@ -328,6 +333,7 @@ event_return_blacklist: # capabilities to non root users. By default this capability is completely # disabled. {% if 'client_acl' in cfg_master -%} +{%- do default_keys.append('client_acl') %} client_acl: {%- for name, user in cfg_master['client_acl']|dictsort %} {{ name}}: @@ -356,6 +362,7 @@ client_acl: # running any commands. It would also blacklist any use of the "cmd" # module. This is completely disabled by default. {% if 'client_acl_blacklist' in cfg_master %} +{%- do default_keys.append('client_acl_blacklist') %} client_acl_blacklist: users: {% for user in cfg_master['client_acl_blacklist'].get('users', []) %} @@ -549,6 +556,7 @@ client_acl_blacklist: # #master_tops: {} {% if 'master_tops' in cfg_master %} +{%- do default_keys.append('master_tops') %} master_tops: {%- for master in cfg_master['master_tops'] -%} {%- if cfg_master['master_tops'][master] is string %} @@ -641,6 +649,7 @@ master_tops: # - /srv/salt/prod/states # {% if 'file_roots' in cfg_master -%} +{%- do default_keys.append('file_roots') %} {{ file_roots(cfg_master['file_roots']) }} {%- elif 'file_roots' in cfg_salt -%} {{ file_roots(cfg_salt['file_roots']) }} @@ -686,6 +695,7 @@ master_tops: # and don't want all the '.svn' folders and content synced to your minions, # you could set this to '/\.svn($|/)'. By default nothing is ignored. {% if 'file_ignore_regex' in cfg_master %} +{%- do default_keys.append('file_ignore_regex') %} file_ignore_regex: {% for regex in cfg_master['file_ignore_regex'] %} - {{ regex }} @@ -706,6 +716,7 @@ file_ignore_regex: # to file_ignore_regex above, but works on globs instead of regex. By default # nothing is ignored. {% if 'file_ignore_glob' in cfg_master %} +{%- do default_keys.append('file_ignore_glob') %} file_ignore_glob: {% for glob in cfg_master['file_ignore_glob'] %} - {{ glob }} @@ -738,6 +749,7 @@ file_ignore_glob: # - git # - roots {% if 'fileserver_backend' in cfg_master -%} +{%- do default_keys.append('fileserver_backend') %} fileserver_backend: {%- for backend in cfg_master['fileserver_backend'] %} - {{ backend }} @@ -811,6 +823,7 @@ fileserver_backend: # Note: file:// repos will be treated as a remote, so refs you want used must # exist in that repo as *local* refs. {% if 'gitfs_remotes' in cfg_master -%} +{%- do default_keys.append('gitfs_remotes') %} gitfs_remotes: {%- for remote in cfg_master['gitfs_remotes'] %} {%- if remote is iterable and remote is not string %} @@ -847,6 +860,7 @@ gitfs_remotes: # The gitfs_env_whitelist and gitfs_env_blacklist parameters allow for greater # control over which branches/tags are exposed as fileserver environments. {% if 'gitfs_env_whitelist' in cfg_master -%} +{%- do default_keys.append('gitfs_env_whitelist') %} gitfs_env_whitelist: {%- for git_env in cfg_master['gitfs_env_whitelist'] %} - {{ git_env }} @@ -858,6 +872,7 @@ gitfs_env_whitelist: {% endif %} {% if 'gitfs_env_blacklist' in cfg_master -%} +{%- do default_keys.append('gitfs_env_blacklist') %} gitfs_env_blacklist: {%- for git_env in cfg_master['gitfs_env_blacklist'] %} - {{ git_env }} @@ -921,6 +936,7 @@ gitfs_env_blacklist: # a top file and sls files. However, pillar data does not need to be in the # highstate format, and is generally just key/value pairs. {% if 'pillar_roots' in cfg_master -%} +{%- do default_keys.append('pillar_roots') %} pillar_roots: {%- for name, roots in cfg_master['pillar_roots']|dictsort %} {{ name }}: @@ -943,6 +959,7 @@ pillar_roots: {%- endif %} {% if 'ext_pillar' in cfg_master %} +{%- do default_keys.append('ext_pillar') %} ext_pillar: {%- for pillar in cfg_master['ext_pillar'] -%} {%- for key in pillar -%} @@ -1122,6 +1139,7 @@ ext_pillar: # This is not recommended, since it would allow anyone who gets root on any # single minion to instantly have root on all of the minions! {% if 'peer' in cfg_master %} +{%- do default_keys.append('peer') %} peer: {% for name, roots in cfg_master['peer'].items() %} {{ name }}: @@ -1155,6 +1173,7 @@ peer: # foo.example.com: # - manage.up {% if 'peer_run' in cfg_master %} +{%- do default_keys.append('peer_run') %} peer_run: {% for name, roots in cfg_master['peer_run'].items() %} {{ name }}: @@ -1185,6 +1204,7 @@ peer_run: # data only, minions web* to get all network.* and disk.* mine data and all other # minions won't get any mine data. {% if 'mine_get' in cfg_master -%} +{%- do default_keys.append('mine_get') %} mine_get: {%- for minion, data in cfg_master['mine_get']|dictsort %} {{ minion }}: @@ -1268,6 +1288,7 @@ mine_get: # 'salt.modules': 'debug' # {% if 'log_granular_levels' in cfg_master %} +{%- do default_keys.append('log_granular_levels') %} log_granular_levels: {% for name, lvl in cfg_master['log_granular_levels'].items() %} {{ name }}: {{ lvl }} @@ -1289,6 +1310,7 @@ log_granular_levels: # group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com' # group2: 'G@os:Debian and foo.domain.com' {%- if 'nodegroups' in cfg_master %} +{%- do default_keys.append('nodegroups') %} nodegroups: {%- for name, lvl in cfg_master['nodegroups'].items() %} {{ name }}: {{ lvl }} @@ -1323,6 +1345,7 @@ nodegroups: # List of git repositories to include with the local repo: {% if 'winrepo_remotes_ng' in cfg_master %} +{%- do default_keys.append('winrepo_remotes_ng') %} winrepo_remotes_ng: {% for repo in cfg_master['winrepo_remotes_ng'] %} - {{ repo }} @@ -1347,6 +1370,7 @@ winrepo_remotes_ng: # List of git repositories to include with the local repo: {% if 'winrepo_remotes' in cfg_master %} +{%- do default_keys.append('winrepo_remotes') %} winrepo_remotes: {% for repo in cfg_master['winrepo_remotes'] %} - {{ repo }} @@ -1373,6 +1397,7 @@ winrepo_remotes: # List of git repositories to include with the local repo: {% if 'win_gitrepos' in cfg_master %} +{%- do default_keys.append('win_gitrepos') %} win_gitrepos: {% for repo in cfg_master['win_gitrepos'] %} - {{ repo }} @@ -1400,6 +1425,7 @@ win_gitrepos: {{ get_config('event_match_type', 'startswith') }} {%- if 'halite' in cfg_master %} +{%- do default_keys.append('halite') %} ##### Halite ##### ########################################## halite: @@ -1409,6 +1435,7 @@ halite: {%- endif %} {%- if 'rest_cherrypy' in cfg_master %} +{%- do default_keys.append('rest_cherrypy') %} ##### rest_cherrypy ##### ########################################## rest_cherrypy: @@ -1418,6 +1445,7 @@ rest_cherrypy: {%- endif %} {%- if 'rest_tornado' in cfg_master %} +{%- do default_keys.append('rest_tornado') %} ##### rest_tornado ##### ########################################### rest_tornado: @@ -1433,6 +1461,7 @@ rest_tornado: {%- endif %} {%- if 'consul_config' in cfg_master %} +{%- do default_keys.append('consul_config') %} ##### consul_config ##### ########################################## consul_config: @@ -1442,6 +1471,7 @@ consul_config: {%- endif %} {% if 'mongo' in cfg_master -%} +{%- do default_keys.append('mongo') %} ##### mongodb connection settings ##### ########################################## {%- for name, value in cfg_master['mongo'].items() %} @@ -1449,8 +1479,15 @@ mongo.{{ name }}: {{ value }} {%- endfor %} {% if 'alternative.mongo' in cfg_master -%} +{%- do default_keys.append('alternative.mongo') %} {%- for name, value in cfg_master['alternative.mongo'].items() %} alternative.mongo.{{ name }}: {{ value }} {%- endfor %} {% endif %} {%- endif %} + +{%- for configname in cfg_master %} +{%- if configname not in reserved_keys and configname not in default_keys %} +{{ configname }}: {{ cfg_master[configname]|json }} +{%- endif %} +{%- endfor %}