From aeb6a54ad7e417d4732a3dc1e36a5663b3b860de Mon Sep 17 00:00:00 2001 From: Tim Byrne Date: Thu, 10 Oct 2019 08:09:31 -0500 Subject: [PATCH] Add `source` to templates (#163) A new variable is exposed to templates, which holds the filename of the template source. The primary use case is to be able to include a warning message within the template. For example: # Do not edit. This file auto-generated from {{ yadm.source }}. --- test/test_unit_template_builtin.py | 17 +++++++++++++++++ test/test_unit_template_j2.py | 18 ++++++++++++++++++ yadm | 4 ++++ yadm.1 | 1 + 4 files changed, 40 insertions(+) diff --git a/test/test_unit_template_builtin.py b/test/test_unit_template_builtin.py index a699f6a..bfc7747 100644 --- a/test/test_unit_template_builtin.py +++ b/test/test_unit_template_builtin.py @@ -106,3 +106,20 @@ def test_template_builtin(runner, yadm, tmpdir): assert run.success assert run.err == '' assert output_file.read() == EXPECTED + + +def test_source(runner, yadm, tmpdir): + """Test yadm.source""" + + input_file = tmpdir.join('input') + input_file.write('{{yadm.source}}', ensure=True) + output_file = tmpdir.join('output') + + script = f""" + YADM_TEST=1 source {yadm} + template_builtin "{input_file}" "{output_file}" + """ + run = runner(command=['bash'], inp=script) + assert run.success + assert run.err == '' + assert output_file.read().strip() == str(input_file) diff --git a/test/test_unit_template_j2.py b/test/test_unit_template_j2.py index e511576..85c6822 100644 --- a/test/test_unit_template_j2.py +++ b/test/test_unit_template_j2.py @@ -97,3 +97,21 @@ def test_template_j2(runner, yadm, tmpdir, processor): assert run.success assert run.err == '' assert output_file.read() == EXPECTED + + +@pytest.mark.parametrize('processor', ('j2cli', 'envtpl')) +def test_source(runner, yadm, tmpdir, processor): + """Test YADM_SOURCE""" + + input_file = tmpdir.join('input') + input_file.write('{{YADM_SOURCE}}', ensure=True) + output_file = tmpdir.join('output') + + script = f""" + YADM_TEST=1 source {yadm} + template_{processor} "{input_file}" "{output_file}" + """ + run = runner(command=['bash'], inp=script) + assert run.success + assert run.err == '' + assert output_file.read().strip() == str(input_file) diff --git a/yadm b/yadm index 6491b87..1529785 100755 --- a/yadm +++ b/yadm @@ -297,6 +297,7 @@ BEGIN { c["hostname"] = host c["user"] = user c["distro"] = distro + c["source"] = source vld = conditions() ifs = "^{%" blank "*if" els = "^{%" blank "*else" blank "*%}$" @@ -340,6 +341,7 @@ EOF -v host="$local_host" \ -v user="$local_user" \ -v distro="$local_distro" \ + -v source="$input" \ "$awk_pgm" \ "$input" > "$output" } @@ -353,6 +355,7 @@ function template_j2cli() { YADM_HOSTNAME="$local_host" \ YADM_USER="$local_user" \ YADM_DISTRO="$local_distro" \ + YADM_SOURCE="$input" \ "$J2CLI_PROGRAM" "$input" -o "$output" } @@ -365,6 +368,7 @@ function template_envtpl() { YADM_HOSTNAME="$local_host" \ YADM_USER="$local_user" \ YADM_DISTRO="$local_distro" \ + YADM_SOURCE="$input" \ "$ENVTPL_PROGRAM" --keep-template "$input" -o "$output" } diff --git a/yadm.1 b/yadm.1 index be4d6b3..925650f 100644 --- a/yadm.1 +++ b/yadm.1 @@ -584,6 +584,7 @@ During processing, the following variables are available in the template: yadm.hostname YADM_HOSTNAME hostname (without domain) yadm.os YADM_OS uname -s yadm.user YADM_USER id -u -n + yadm.source YADM_SOURCE Template filename Examples: