"""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", "fedora", "freebsd", "netbsd", "openbsd", "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']