Removed PR 65185 changes since incomplete solution

This commit is contained in:
David Murphy 2023-12-20 14:52:50 -07:00 committed by Daniel Wozniak
parent 7b0c0afdc3
commit 70c22eff62
5 changed files with 4 additions and 100 deletions

View file

@ -1 +1 @@
Ensure initial _sync_grains only occurs if masterless minion in class SMinion initialization
Removed PR 65185 changes since incomplete solution

View file

@ -45,15 +45,12 @@ log = logging.getLogger(__name__)
MAX_FILENAME_LENGTH = 255
def get_file_client(opts, pillar=False, force_local=False):
def get_file_client(opts, pillar=False):
"""
Read in the ``file_client`` option and return the correct type of file
server
"""
if force_local:
client = "local"
else:
client = opts.get("file_client", "remote")
client = opts.get("file_client", "remote")
if pillar and client == "local":
client = "pillar"

View file

@ -114,24 +114,6 @@ log = logging.getLogger(__name__)
# 6. Handle publications
def _sync_grains(opts):
# if local client (masterless minion), need sync of custom grains
# as they may be used in pillar compilation
# in addition, with masterless minion some opts may not be filled
# at this point of syncing,for example sometimes does not contain
# extmod_whitelist and extmod_blacklist hence set those to defaults,
# empty dict, if not part of opts, as ref'd in
# salt.utils.extmod sync function
if "local" == opts.get("file_client", "remote"):
if opts.get("extmod_whitelist", None) is None:
opts["extmod_whitelist"] = {}
if opts.get("extmod_blacklist", None) is None:
opts["extmod_blacklist"] = {}
salt.utils.extmods.sync(opts, "grains", force_local=True)
def resolve_dns(opts, fallback=True):
"""
Resolves the master_ip and master_uri options
@ -939,7 +921,6 @@ class SMinion(MinionBase):
# Late setup of the opts grains, so we can log from the grains module
import salt.loader
_sync_grains(opts)
opts["grains"] = salt.loader.grains(opts)
super().__init__(opts)

View file

@ -39,7 +39,6 @@ def sync(
saltenv=None,
extmod_whitelist=None,
extmod_blacklist=None,
force_local=False,
):
"""
Sync custom modules into the extension_modules directory
@ -83,9 +82,7 @@ def sync(
"Cannot create cache module directory %s. Check permissions.",
mod_dir,
)
with salt.fileclient.get_file_client(
opts, pillar=False, force_local=force_local
) as fileclient:
with salt.fileclient.get_file_client(opts) as fileclient:
for sub_env in saltenv:
log.info("Syncing %s for environment '%s'", form, sub_env)
cache = []

View file

@ -429,74 +429,3 @@ def test_local_salt_call_no_function_no_retcode(salt_call_cli):
assert "test" in ret.data
assert ret.data["test"] == "'test' is not available."
assert "test.echo" in ret.data
def test_state_highstate_custom_grains(salt_master, salt_minion_factory):
"""
This test ensure that custom grains in salt://_grains are loaded before pillar compilation
to ensure that any use of custom grains in pillar files are available, this implies that
a sync of grains occurs before loading the regular /etc/salt/grains or configuration file
grains, as well as the usual grains.
Note: cannot use salt_minion and salt_call_cli, since these will be loaded before
the pillar and custom_grains files are written, hence using salt_minion_factory.
"""
pillar_top_sls = """
base:
'*':
- defaults
"""
pillar_defaults_sls = """
mypillar: "{{ grains['custom_grain'] }}"
"""
salt_top_sls = """
base:
'*':
- test
"""
salt_test_sls = """
"donothing":
test.nop: []
"""
salt_custom_grains_py = """
def main():
return {'custom_grain': 'test_value'}
"""
assert salt_master.is_running()
with salt_minion_factory.started():
salt_minion = salt_minion_factory
salt_call_cli = salt_minion_factory.salt_call_cli()
with salt_minion.pillar_tree.base.temp_file(
"top.sls", pillar_top_sls
), salt_minion.pillar_tree.base.temp_file(
"defaults.sls", pillar_defaults_sls
), salt_minion.state_tree.base.temp_file(
"top.sls", salt_top_sls
), salt_minion.state_tree.base.temp_file(
"test.sls", salt_test_sls
), salt_minion.state_tree.base.temp_file(
"_grains/custom_grain.py", salt_custom_grains_py
):
ret = salt_call_cli.run("--local", "state.highstate")
assert ret.returncode == 0
ret = salt_call_cli.run("--local", "pillar.items")
assert ret.returncode == 0
assert ret.data
pillar_items = ret.data
assert "mypillar" in pillar_items
assert pillar_items["mypillar"] == "test_value"
def test_salt_call_versions(salt_call_cli, caplog):
"""
Call test.versions without '--local' to test grains
are sync'd without any missing keys in opts
"""
with caplog.at_level(logging.DEBUG):
ret = salt_call_cli.run("test.versions")
assert ret.returncode == 0
assert "Failed to sync grains module: 'master_uri'" not in caplog.messages