2018-07-30 13:52:13 +02:00
|
|
|
From e8c1b2c5a8af5cc6f4551918f695d1463a6eb584 Mon Sep 17 00:00:00 2001
|
2018-05-16 11:48:03 +02:00
|
|
|
From: Matei Albu <malbu@suse.de>
|
|
|
|
Date: Sun, 6 May 2018 21:15:58 +0200
|
|
|
|
Subject: [PATCH] Option to merge current pillar with opts['pillar']
|
|
|
|
during pillar compile
|
|
|
|
|
|
|
|
Fixes #47501
|
|
|
|
(cherry picked from commit 2f1485e)
|
|
|
|
---
|
|
|
|
doc/ref/configuration/minion.rst | 28 ++++++++++++++++++++++++++++
|
|
|
|
salt/config/__init__.py | 4 +++-
|
|
|
|
salt/pillar/__init__.py | 7 +++++++
|
|
|
|
3 files changed, 38 insertions(+), 1 deletion(-)
|
|
|
|
|
|
|
|
diff --git a/doc/ref/configuration/minion.rst b/doc/ref/configuration/minion.rst
|
2018-07-30 13:52:13 +02:00
|
|
|
index c9010a702b..d9823b78d8 100644
|
2018-05-16 11:48:03 +02:00
|
|
|
--- a/doc/ref/configuration/minion.rst
|
|
|
|
+++ b/doc/ref/configuration/minion.rst
|
|
|
|
@@ -3219,3 +3219,31 @@ URL of the repository:
|
|
|
|
Replace ``<commit_id>`` with the SHA1 hash of a commit ID. Specifying a commit
|
|
|
|
ID is useful in that it allows one to revert back to a previous version in the
|
|
|
|
event that an error is introduced in the latest revision of the repo.
|
|
|
|
+
|
|
|
|
+``ssh_merge_pillar``
|
|
|
|
+--------------------
|
|
|
|
+
|
|
|
|
+.. versionadded:: 2018.3.2
|
|
|
|
+
|
|
|
|
+Default: ``True``
|
|
|
|
+
|
|
|
|
+Merges the compiled pillar data with the pillar data already available globally.
|
|
|
|
+This is useful when using ``salt-ssh`` or ``salt-call --local`` and overriding the pillar
|
|
|
|
+data in a state file:
|
|
|
|
+
|
|
|
|
+.. code-block:: yaml
|
|
|
|
+
|
|
|
|
+ apply_showpillar:
|
|
|
|
+ module.run:
|
|
|
|
+ - name: state.apply
|
|
|
|
+ - mods:
|
|
|
|
+ - showpillar
|
|
|
|
+ - kwargs:
|
|
|
|
+ pillar:
|
|
|
|
+ test: "foo bar"
|
|
|
|
+
|
|
|
|
+If set to ``True`` the ``showpillar`` state will have access to the
|
|
|
|
+global pillar data.
|
|
|
|
+
|
|
|
|
+If set to ``False`` only the overriding pillar data will be available
|
|
|
|
+to the ``showpillar`` state.
|
|
|
|
diff --git a/salt/config/__init__.py b/salt/config/__init__.py
|
2018-07-30 13:52:13 +02:00
|
|
|
index 432364b201..feda0abac1 100644
|
2018-05-16 11:48:03 +02:00
|
|
|
--- a/salt/config/__init__.py
|
|
|
|
+++ b/salt/config/__init__.py
|
2018-07-30 13:52:13 +02:00
|
|
|
@@ -989,6 +989,7 @@ VALID_OPTS = {
|
2018-05-16 11:48:03 +02:00
|
|
|
'ssh_identities_only': bool,
|
|
|
|
'ssh_log_file': six.string_types,
|
|
|
|
'ssh_config_file': six.string_types,
|
|
|
|
+ 'ssh_merge_pillar': bool,
|
|
|
|
|
|
|
|
# Enable ioflo verbose logging. Warning! Very verbose!
|
|
|
|
'ioflo_verbose': int,
|
2018-07-30 13:52:13 +02:00
|
|
|
@@ -1485,6 +1486,7 @@ DEFAULT_MINION_OPTS = {
|
2018-05-16 11:48:03 +02:00
|
|
|
},
|
|
|
|
'discovery': False,
|
|
|
|
'schedule': {},
|
|
|
|
+ 'ssh_merge_pillar': True
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFAULT_MASTER_OPTS = {
|
2018-07-30 13:52:13 +02:00
|
|
|
@@ -2089,7 +2091,7 @@ def _validate_ssh_minion_opts(opts):
|
2018-05-16 11:48:03 +02:00
|
|
|
|
|
|
|
for opt_name in list(ssh_minion_opts):
|
|
|
|
if re.match('^[a-z0-9]+fs_', opt_name, flags=re.IGNORECASE) \
|
|
|
|
- or 'pillar' in opt_name \
|
|
|
|
+ or ('pillar' in opt_name and not 'ssh_merge_pillar' == opt_name) \
|
|
|
|
or opt_name in ('fileserver_backend',):
|
|
|
|
log.warning(
|
|
|
|
'\'%s\' is not a valid ssh_minion_opts parameter, ignoring',
|
|
|
|
diff --git a/salt/pillar/__init__.py b/salt/pillar/__init__.py
|
2018-07-30 13:52:13 +02:00
|
|
|
index fc1e34f75d..fc3ce0a5c0 100644
|
2018-05-16 11:48:03 +02:00
|
|
|
--- a/salt/pillar/__init__.py
|
|
|
|
+++ b/salt/pillar/__init__.py
|
2018-07-30 13:52:13 +02:00
|
|
|
@@ -1014,6 +1014,13 @@ class Pillar(object):
|
2018-05-16 11:48:03 +02:00
|
|
|
mopts['file_roots'] = self.actual_file_roots
|
|
|
|
mopts['saltversion'] = __version__
|
|
|
|
pillar['master'] = mopts
|
|
|
|
+ if 'pillar' in self.opts and self.opts.get('ssh_merge_pillar', False):
|
|
|
|
+ pillar = merge(
|
|
|
|
+ self.opts['pillar'],
|
|
|
|
+ pillar,
|
|
|
|
+ self.merge_strategy,
|
|
|
|
+ self.opts.get('renderer', 'yaml'),
|
|
|
|
+ self.opts.get('pillar_merge_lists', False))
|
|
|
|
if errors:
|
|
|
|
for error in errors:
|
|
|
|
log.critical('Pillar render error: %s', error)
|
|
|
|
--
|
2018-07-30 13:52:13 +02:00
|
|
|
2.13.7
|
2018-05-16 11:48:03 +02:00
|
|
|
|
|
|
|
|