summaryrefslogtreecommitdiff
path: root/tests/unittests/test_render_cloudcfg.py
blob: 00d50e668d9601c78091a69839dfaf4b9de2b6dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
"""Tests for tools/render-cloudcfg"""

import os
import sys

import pytest

from cloudinit import subp
from cloudinit import util

# TODO(Look to align with tools.render-cloudcfg or cloudinit.distos.OSFAMILIES)
DISTRO_VARIANTS = ["amazon", "arch", "centos", "debian", "eurolinux", "fedora",
                   "freebsd", "netbsd", "openbsd", "photon", "rhel", "suse",
                   "ubuntu", "unknown"]


@pytest.mark.allow_subp_for(sys.executable)
class TestRenderCloudCfg:

    cmd = [sys.executable, os.path.realpath('tools/render-cloudcfg')]
    tmpl_path = os.path.realpath('config/cloud.cfg.tmpl')

    @pytest.mark.parametrize('variant', (DISTRO_VARIANTS))
    def test_variant_sets_distro_in_cloud_cfg(self, variant, tmpdir):
        outfile = tmpdir.join('outcfg').strpath
        subp.subp(
            self.cmd + ['--variant', variant, self.tmpl_path, outfile])
        with open(outfile) as stream:
            system_cfg = util.load_yaml(stream.read())
        if variant == 'unknown':
            variant = 'ubuntu'  # Unknown is defaulted to ubuntu
        assert system_cfg['system_info']['distro'] == variant

    @pytest.mark.parametrize('variant', (DISTRO_VARIANTS))
    def test_variant_sets_default_user_in_cloud_cfg(self, variant, tmpdir):
        outfile = tmpdir.join('outcfg').strpath
        subp.subp(
            self.cmd + ['--variant', variant, self.tmpl_path, outfile])
        with open(outfile) as stream:
            system_cfg = util.load_yaml(stream.read())

        default_user_exceptions = {
            'amazon': 'ec2-user', 'debian': 'ubuntu', 'unknown': 'ubuntu'}
        default_user = system_cfg['system_info']['default_user']['name']
        assert default_user == default_user_exceptions.get(variant, variant)

    @pytest.mark.parametrize('variant,renderers', (
        ('freebsd', ['freebsd']), ('netbsd', ['netbsd']),
        ('openbsd', ['openbsd']), ('ubuntu', ['netplan', 'eni', 'sysconfig']))
    )
    def test_variant_sets_network_renderer_priority_in_cloud_cfg(
        self, variant, renderers, tmpdir
    ):
        outfile = tmpdir.join('outcfg').strpath
        subp.subp(
            self.cmd + ['--variant', variant, self.tmpl_path, outfile])
        with open(outfile) as stream:
            system_cfg = util.load_yaml(stream.read())

        assert renderers == system_cfg['system_info']['network']['renderers']