def test_includes_override_sls(self): opts = { 'optimization_order': [0, 1, 2], 'renderer': 'json', 'renderer_blacklist': [], 'renderer_whitelist': [], 'state_top': '', 'pillar_roots': {}, 'file_roots': {}, 'extension_modules': '' } grains = { 'os': 'Ubuntu', 'os_family': 'Debian', 'oscodename': 'raring', 'osfullname': 'Ubuntu', 'osrelease': '13.04', 'kernel': 'Linux' } with patch('salt.pillar.compile_template') as compile_template: # Test with option set to True opts['pillar_includes_override_sls'] = True pillar = salt.pillar.Pillar(opts, grains, 'mocked-minion', 'base') # Mock getting the proper template files pillar.client.get_state = MagicMock( return_value={ 'dest': '/path/to/pillar/files/foo.sls', 'source': 'salt://foo.sls' } ) compile_template.side_effect = [ {'foo': 'bar', 'include': ['blah']}, {'foo': 'bar2'} ] self.assertEqual( pillar.render_pillar({'base': ['foo.sls']}), ({'foo': 'bar2'}, []) ) # Test with option set to False opts['pillar_includes_override_sls'] = False pillar = salt.pillar.Pillar(opts, grains, 'mocked-minion', 'base') # Mock getting the proper template files pillar.client.get_state = MagicMock( return_value={ 'dest': '/path/to/pillar/files/foo.sls', 'source': 'salt://foo.sls' } ) compile_template.side_effect = [ {'foo': 'bar', 'include': ['blah']}, {'foo': 'bar2'} ] self.assertEqual( pillar.render_pillar({'base': ['foo.sls']}), ({'foo': 'bar'}, []) )
def test_malformed_pillar_sls(self, mock_list_states): with patch('salt.pillar.compile_template') as compile_template: opts = { 'optimization_order': [0, 1, 2], 'renderer': 'json', 'renderer_blacklist': [], 'renderer_whitelist': [], 'state_top': '', 'pillar_roots': [], 'file_roots': [], 'extension_modules': '' } grains = { 'os': 'Ubuntu', 'os_family': 'Debian', 'oscodename': 'raring', 'osfullname': 'Ubuntu', 'osrelease': '13.04', 'kernel': 'Linux' } mock_list_states.return_value = ['foo', 'blah'] pillar = salt.pillar.Pillar(opts, grains, 'mocked-minion', 'base') # Mock getting the proper template files pillar.client.get_state = MagicMock( return_value={ 'dest': '/path/to/pillar/files/foo.sls', 'source': 'salt://foo.sls' } ) # Template compilation returned a string compile_template.return_value = 'BAHHH' self.assertEqual( pillar.render_pillar({'base': ['foo.sls']}), ({}, ['SLS \'foo.sls\' does not render to a dictionary']) ) # Template compilation returned a list compile_template.return_value = ['BAHHH'] self.assertEqual( pillar.render_pillar({'base': ['foo.sls']}), ({}, ['SLS \'foo.sls\' does not render to a dictionary']) ) # Template compilation returned a dictionary, which is what's expected compile_template.return_value = {'foo': 'bar'} self.assertEqual( pillar.render_pillar({'base': ['foo.sls']}), ({'foo': 'bar'}, []) ) # Test improper includes compile_template.side_effect = [ {'foo': 'bar', 'include': 'blah'}, {'foo2': 'bar2'} ] self.assertEqual( pillar.render_pillar({'base': ['foo.sls']}), ({'foo': 'bar', 'include': 'blah'}, ["Include Declaration in SLS 'foo.sls' is not formed as a list"]) ) # Test includes as a list, which is what's expected compile_template.side_effect = [ {'foo': 'bar', 'include': ['blah']}, {'foo2': 'bar2'} ] self.assertEqual( pillar.render_pillar({'base': ['foo.sls']}), ({'foo': 'bar', 'foo2': 'bar2'}, []) ) # Test includes as a list overriding data compile_template.side_effect = [ {'foo': 'bar', 'include': ['blah']}, {'foo': 'bar2'} ] self.assertEqual( pillar.render_pillar({'base': ['foo.sls']}), ({'foo': 'bar'}, []) ) # Test includes using empty key directive compile_template.side_effect = [ {'foo': 'bar', 'include': [{'blah': {'key': ''}}]}, {'foo': 'bar2'} ] self.assertEqual( pillar.render_pillar({'base': ['foo.sls']}), ({'foo': 'bar'}, []) ) # Test includes using simple non-nested key compile_template.side_effect = [ {'foo': 'bar', 'include': [{'blah': {'key': 'nested'}}]}, {'foo': 'bar2'} ] self.assertEqual( pillar.render_pillar({'base': ['foo.sls']}), ({'foo': 'bar', 'nested': {'foo': 'bar2'}}, []) ) # Test includes using nested key compile_template.side_effect = [ {'foo': 'bar', 'include': [{'blah': {'key': 'nested:level'}}]}, {'foo': 'bar2'} ] self.assertEqual( pillar.render_pillar({'base': ['foo.sls']}), ({'foo': 'bar', 'nested': {'level': {'foo': 'bar2'}}}, []) )
def test_malformed_pillar_sls(self, compile_template): opts = { 'renderer': 'json', 'state_top': '', 'pillar_roots': [], 'file_roots': [], 'extension_modules': '' } grains = { 'os': 'Ubuntu', 'os_family': 'Debian', 'oscodename': 'raring', 'osfullname': 'Ubuntu', 'osrelease': '13.04', 'kernel': 'Linux' } pillar = salt.pillar.Pillar(opts, grains, 'mocked-minion', 'base') # Mock getting the proper template files pillar.client.get_state = MagicMock( return_value={ 'dest': '/path/to/pillar/files/foo.sls', 'source': 'salt://foo.sls' } ) # Template compilation returned a string compile_template.return_value = 'BAHHH' self.assertEqual( pillar.render_pillar({'base': ['foo.sls']}), ({}, ['SLS \'foo.sls\' does not render to a dictionary']) ) # Template compilation returned a list compile_template.return_value = ['BAHHH'] self.assertEqual( pillar.render_pillar({'base': ['foo.sls']}), ({}, ['SLS \'foo.sls\' does not render to a dictionary']) ) # Template compilation returned a dictionary, which is what's expected compile_template.return_value = {'foo': 'bar'} self.assertEqual( pillar.render_pillar({'base': ['foo.sls']}), ({'foo': 'bar'}, []) ) # Test improper includes compile_template.side_effect = [ {'foo': 'bar', 'include': 'blah'}, {'foo2': 'bar2'} ] self.assertEqual( pillar.render_pillar({'base': ['foo.sls']}), ({'foo': 'bar', 'include': 'blah'}, ["Include Declaration in SLS 'foo.sls' is not formed as a list"]) ) # Test includes as a list, which is what's expected compile_template.side_effect = [ {'foo': 'bar', 'include': ['blah']}, {'foo2': 'bar2'} ] self.assertEqual( pillar.render_pillar({'base': ['foo.sls']}), ({'foo': 'bar', 'foo2': 'bar2'}, []) ) # Test includes as a list overriding data compile_template.side_effect = [ {'foo': 'bar', 'include': ['blah']}, {'foo': 'bar2'} ] self.assertEqual( pillar.render_pillar({'base': ['foo.sls']}), ({'foo': 'bar2'}, []) )
def test_includes_override_sls(self): opts = { "optimization_order": [0, 1, 2], "renderer": "json", "renderer_blacklist": [], "renderer_whitelist": [], "state_top": "", "pillar_roots": {}, "file_roots": {}, "extension_modules": "", } grains = { "os": "Ubuntu", "os_family": "Debian", "oscodename": "raring", "osfullname": "Ubuntu", "osrelease": "13.04", "kernel": "Linux", } with patch("salt.pillar.compile_template" ) as compile_template, patch.object( salt.pillar.Pillar, "_Pillar__gather_avail", MagicMock(return_value={"base": ["blah", "foo"]}), ): # Test with option set to True opts["pillar_includes_override_sls"] = True pillar = salt.pillar.Pillar(opts, grains, "mocked-minion", "base") # Mock getting the proper template files pillar.client.get_state = MagicMock( return_value={ "dest": "/path/to/pillar/files/foo.sls", "source": "salt://foo.sls", }) compile_template.side_effect = [ { "foo": "bar", "include": ["blah"] }, { "foo": "bar2" }, ] self.assertEqual(pillar.render_pillar({"base": ["foo.sls"]}), ({ "foo": "bar2" }, [])) # Test with option set to False opts["pillar_includes_override_sls"] = False pillar = salt.pillar.Pillar(opts, grains, "mocked-minion", "base") # Mock getting the proper template files pillar.client.get_state = MagicMock( return_value={ "dest": "/path/to/pillar/files/foo.sls", "source": "salt://foo.sls", }) compile_template.side_effect = [ { "foo": "bar", "include": ["blah"] }, { "foo": "bar2" }, ] self.assertEqual(pillar.render_pillar({"base": ["foo.sls"]}), ({ "foo": "bar" }, []))
def test_malformed_pillar_sls(self, mock_list_states): with patch("salt.pillar.compile_template") as compile_template: opts = { "optimization_order": [0, 1, 2], "renderer": "json", "renderer_blacklist": [], "renderer_whitelist": [], "state_top": "", "pillar_roots": [], "file_roots": [], "extension_modules": "", } grains = { "os": "Ubuntu", "os_family": "Debian", "oscodename": "raring", "osfullname": "Ubuntu", "osrelease": "13.04", "kernel": "Linux", } mock_list_states.return_value = ["foo", "blah"] pillar = salt.pillar.Pillar(opts, grains, "mocked-minion", "base") # Mock getting the proper template files pillar.client.get_state = MagicMock( return_value={ "dest": "/path/to/pillar/files/foo.sls", "source": "salt://foo.sls", }) # Template compilation returned a string compile_template.return_value = "BAHHH" self.assertEqual( pillar.render_pillar({"base": ["foo.sls"]}), ({}, ["SLS 'foo.sls' does not render to a dictionary"]), ) # Template compilation returned a list compile_template.return_value = ["BAHHH"] self.assertEqual( pillar.render_pillar({"base": ["foo.sls"]}), ({}, ["SLS 'foo.sls' does not render to a dictionary"]), ) # Template compilation returned a dictionary, which is what's expected compile_template.return_value = {"foo": "bar"} self.assertEqual(pillar.render_pillar({"base": ["foo.sls"]}), ({ "foo": "bar" }, [])) # Test improper includes compile_template.side_effect = [ { "foo": "bar", "include": "blah" }, { "foo2": "bar2" }, ] self.assertEqual( pillar.render_pillar({"base": ["foo.sls"]}), ( { "foo": "bar", "include": "blah" }, [ "Include Declaration in SLS 'foo.sls' is not formed as a list" ], ), ) # Test includes as a list, which is what's expected compile_template.side_effect = [ { "foo": "bar", "include": ["blah"] }, { "foo2": "bar2" }, ] self.assertEqual( pillar.render_pillar({"base": ["foo.sls"]}), ({ "foo": "bar", "foo2": "bar2" }, []), ) # Test includes as a list overriding data compile_template.side_effect = [ { "foo": "bar", "include": ["blah"] }, { "foo": "bar2" }, ] self.assertEqual(pillar.render_pillar({"base": ["foo.sls"]}), ({ "foo": "bar" }, [])) # Test includes using empty key directive compile_template.side_effect = [ { "foo": "bar", "include": [{ "blah": { "key": "" } }] }, { "foo": "bar2" }, ] self.assertEqual(pillar.render_pillar({"base": ["foo.sls"]}), ({ "foo": "bar" }, [])) # Test includes using simple non-nested key compile_template.side_effect = [ { "foo": "bar", "include": [{ "blah": { "key": "nested" } }] }, { "foo": "bar2" }, ] self.assertEqual( pillar.render_pillar({"base": ["foo.sls"]}), ({ "foo": "bar", "nested": { "foo": "bar2" } }, []), ) # Test includes using nested key compile_template.side_effect = [ { "foo": "bar", "include": [{ "blah": { "key": "nested:level" } }] }, { "foo": "bar2" }, ] self.assertEqual( pillar.render_pillar({"base": ["foo.sls"]}), ({ "foo": "bar", "nested": { "level": { "foo": "bar2" } } }, []), )