summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrett Holman <bholman.devel@gmail.com>2022-01-14 11:09:30 -0700
committerGitHub <noreply@github.com>2022-01-14 12:09:30 -0600
commit73b1bb1f7665216053494717de27d7daf445d751 (patch)
tree8f230d980bc7fe3b173da0a4a6f0e38cda57537e
parent0de7acb194dc15650eee1d5332efed82ef162f84 (diff)
downloadvyos-cloud-init-73b1bb1f7665216053494717de27d7daf445d751.tar.gz
vyos-cloud-init-73b1bb1f7665216053494717de27d7daf445d751.zip
Test Optimization Proposal (SC-736) (#1188)
Reduce template rendering test runtime
-rw-r--r--cloudinit/templater.py15
-rw-r--r--tests/unittests/test_render_cloudcfg.py26
-rwxr-xr-xtools/render-cloudcfg76
3 files changed, 84 insertions, 33 deletions
diff --git a/cloudinit/templater.py b/cloudinit/templater.py
index c215bbbb..1e147d4a 100644
--- a/cloudinit/templater.py
+++ b/cloudinit/templater.py
@@ -12,6 +12,7 @@
import collections
import re
+import sys
try:
from Cheetah.Template import Template as CTemplate
@@ -32,6 +33,7 @@ except (ImportError, AttributeError):
from cloudinit import log as logging
from cloudinit import type_utils as tu
from cloudinit import util
+from cloudinit.atomic_helper import write_file
LOG = logging.getLogger(__name__)
TYPE_MATCHER = re.compile(r"##\s*template:(.*)", re.I)
@@ -180,4 +182,17 @@ def render_string(content, params):
return renderer(content, params)
+def render_cloudcfg(variant, template, output):
+
+ with open(template, "r") as fh:
+ contents = fh.read()
+ tpl_params = {"variant": variant}
+ contents = (render_string(contents, tpl_params)).rstrip() + "\n"
+ util.load_yaml(contents)
+ if output == "-":
+ sys.stdout.write(contents)
+ else:
+ write_file(output, contents, omode="w")
+
+
# vi: ts=4 expandtab
diff --git a/tests/unittests/test_render_cloudcfg.py b/tests/unittests/test_render_cloudcfg.py
index 81110e61..01a728da 100644
--- a/tests/unittests/test_render_cloudcfg.py
+++ b/tests/unittests/test_render_cloudcfg.py
@@ -4,7 +4,7 @@ import sys
import pytest
-from cloudinit import subp, util
+from cloudinit import subp, templater, util
from tests.unittests.helpers import cloud_init_project_dir
# TODO(Look to align with tools.render-cloudcfg or cloudinit.distos.OSFAMILIES)
@@ -32,10 +32,22 @@ class TestRenderCloudCfg:
cmd = [sys.executable, cloud_init_project_dir("tools/render-cloudcfg")]
tmpl_path = cloud_init_project_dir("config/cloud.cfg.tmpl")
+ def test_variant_sets_distro_in_cloud_cfg_subp(self, tmpdir):
+ outfile = tmpdir.join("outcfg").strpath
+
+ subp.subp(self.cmd + ["--variant", "ubuntu", self.tmpl_path, outfile])
+ with open(outfile) as stream:
+ system_cfg = util.load_yaml(stream.read())
+ assert system_cfg["system_info"]["distro"] == "ubuntu"
+
@pytest.mark.parametrize("variant", (DISTRO_VARIANTS))
def test_variant_sets_distro_in_cloud_cfg(self, variant, tmpdir):
+ """Testing parametrized inputs with imported function saves ~0.5s per
+ call versus calling as subp
+ """
outfile = tmpdir.join("outcfg").strpath
- subp.subp(self.cmd + ["--variant", variant, self.tmpl_path, outfile])
+
+ templater.render_cloudcfg(variant, self.tmpl_path, outfile)
with open(outfile) as stream:
system_cfg = util.load_yaml(stream.read())
if variant == "unknown":
@@ -44,8 +56,11 @@ class TestRenderCloudCfg:
@pytest.mark.parametrize("variant", (DISTRO_VARIANTS))
def test_variant_sets_default_user_in_cloud_cfg(self, variant, tmpdir):
+ """Testing parametrized inputs with imported function saves ~0.5s per
+ call versus calling as subp
+ """
outfile = tmpdir.join("outcfg").strpath
- subp.subp(self.cmd + ["--variant", variant, self.tmpl_path, outfile])
+ templater.render_cloudcfg(variant, self.tmpl_path, outfile)
with open(outfile) as stream:
system_cfg = util.load_yaml(stream.read())
@@ -69,8 +84,11 @@ class TestRenderCloudCfg:
def test_variant_sets_network_renderer_priority_in_cloud_cfg(
self, variant, renderers, tmpdir
):
+ """Testing parametrized inputs with imported function saves ~0.5s per
+ call versus calling as subp
+ """
outfile = tmpdir.join("outcfg").strpath
- subp.subp(self.cmd + ["--variant", variant, self.tmpl_path, outfile])
+ templater.render_cloudcfg(variant, self.tmpl_path, outfile)
with open(outfile) as stream:
system_cfg = util.load_yaml(stream.read())
diff --git a/tools/render-cloudcfg b/tools/render-cloudcfg
index 6642bd58..c14097b5 100755
--- a/tools/render-cloudcfg
+++ b/tools/render-cloudcfg
@@ -1,47 +1,65 @@
#!/usr/bin/env python3
-import argparse
import os
import sys
-
-VARIANTS = ["almalinux", "alpine", "amazon", "arch", "centos", "cloudlinux", "debian",
- "eurolinux", "fedora", "freebsd", "miraclelinux", "netbsd", "openbsd", "openEuler", "photon",
- "rhel", "suse","rocky", "ubuntu", "unknown", "virtuozzo"]
+import argparse
-if "avoid-pep8-E402-import-not-top-of-file":
+def main():
_tdir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
sys.path.insert(0, _tdir)
- from cloudinit import templater
- from cloudinit import util
- from cloudinit.atomic_helper import write_file
-
+ from cloudinit import templater, util # pylint: disable=E0401
-def main():
+ VARIANTS = [
+ "almalinux",
+ "alpine",
+ "amazon",
+ "arch",
+ "centos",
+ "cloudlinux",
+ "debian",
+ "eurolinux",
+ "fedora",
+ "freebsd",
+ "miraclelinux",
+ "netbsd",
+ "openbsd",
+ "openEuler",
+ "photon",
+ "rhel",
+ "suse",
+ "rocky",
+ "ubuntu",
+ "unknown",
+ "virtuozzo",
+ ]
parser = argparse.ArgumentParser()
platform = util.system_info()
parser.add_argument(
- "--variant", default=platform['variant'], action="store",
- help="define the variant.", choices=VARIANTS)
+ "--variant",
+ default=platform["variant"],
+ action="store",
+ help="define the variant.",
+ choices=VARIANTS,
+ )
parser.add_argument(
- "template", nargs="?", action="store",
- default='./config/cloud.cfg.tmpl',
- help="Path to the cloud.cfg template")
+ "template",
+ nargs="?",
+ action="store",
+ default="./config/cloud.cfg.tmpl",
+ help="Path to the cloud.cfg template",
+ )
parser.add_argument(
- "output", nargs="?", action="store", default="-",
- help="Output file. Use '-' to write to stdout")
+ "output",
+ nargs="?",
+ action="store",
+ default="-",
+ help="Output file. Use '-' to write to stdout",
+ )
- args = parser.parse_args()
+ args = parser.parse_args(sys.argv[1:])
+ templater.render_cloudcfg(args.variant, args.template, args.output)
- with open(args.template, 'r') as fh:
- contents = fh.read()
- tpl_params = {'variant': args.variant}
- contents = (templater.render_string(contents, tpl_params)).rstrip() + "\n"
- util.load_yaml(contents)
- if args.output == "-":
- sys.stdout.write(contents)
- else:
- write_file(args.output, contents, omode="w")
-if __name__ == '__main__':
+if __name__ == "__main__":
main()