diff --git a/salt/minion.py b/salt/minion.py index 4a3e0711a30b..d1c0c00751a2 100644 --- a/salt/minion.py +++ b/salt/minion.py @@ -456,7 +456,7 @@ def gen_modules(self, initial_load=False): # self.matcher = Matcher(self.opts, self.functions) self.matchers = salt.loader.matchers(self.opts) self.functions['sys.reload_modules'] = self.gen_modules - self.executors = salt.loader.executors(self.opts) + self.executors = salt.loader.executors(self.opts, self.functions) @staticmethod def process_schedule(minion, loop_interval): diff --git a/tests/unit/test_minion.py b/tests/unit/test_minion.py index c4cfff9b0bbe..90b529201816 100644 --- a/tests/unit/test_minion.py +++ b/tests/unit/test_minion.py @@ -293,6 +293,27 @@ def test_minion_retry_dns_count(self): self.assertRaises(SaltMasterUnresolvableError, salt.minion.resolve_dns, __opts__) + def test_gen_modules_executors(self): + ''' + Ensure gen_modules is called with the correct arguments #54429 + ''' + mock_opts = self.get_config('minion', from_scratch=True) + io_loop = tornado.ioloop.IOLoop() + io_loop.make_current() + minion = salt.minion.Minion(mock_opts, io_loop=io_loop) + + class MockPillarCompiler(object): + def compile_pillar(self): + return {} + + try: + with patch('salt.pillar.get_pillar', return_value=MockPillarCompiler()): + with patch('salt.loader.executors') as execmock: + minion.gen_modules() + assert execmock.called_with(minion.opts, minion.functions) + finally: + minion.destroy() + @skipIf(NO_MOCK, NO_MOCK_REASON) class MinionAsyncTestCase(TestCase, AdaptedConfigurationTestCaseMixin, tornado.testing.AsyncTestCase):