示例#1
0
    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'}, [])
            )
示例#2
0
    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'}}}, [])
            )
示例#3
0
    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'}, [])
        )
示例#4
0
    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"
                             }, []))
示例#5
0
    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"
                        }
                    }
                }, []),
            )