From 96d02a1c4c640c2d922dd4cb0d9c5480adced183 Mon Sep 17 00:00:00 2001 From: Matthew Aynalem Date: Tue, 5 Jun 2018 12:10:34 -0700 Subject: [PATCH] fixes #110 - bug provisioner conditionals only/except conditionals are missing --- CHANGELOG.md | 2 + src/packerlicious/provisioner.py | 2 + tests/packerlicious/test_provisioner.py | 86 +++++++++++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 tests/packerlicious/test_provisioner.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d3a0ac..be44f43 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ### BUG FIX: # builder/GoogleCompute: source_image_family / source_image exactly one should be required [GH-111] +# provisioner: only/except conditionals are missing[GH-110] + ## 0.8.0 (May 30, 2018) diff --git a/src/packerlicious/provisioner.py b/src/packerlicious/provisioner.py index 3411648..ab028d3 100644 --- a/src/packerlicious/provisioner.py +++ b/src/packerlicious/provisioner.py @@ -31,6 +31,8 @@ class PackerProvisioner(BasePackerObject): """ provisioner_props = { 'pause_before': (str, False), + 'only': ([str], False), + 'except': ([str], False), } def __init__(self, title=None, **kwargs): diff --git a/tests/packerlicious/test_provisioner.py b/tests/packerlicious/test_provisioner.py new file mode 100644 index 0000000..0a7ef88 --- /dev/null +++ b/tests/packerlicious/test_provisioner.py @@ -0,0 +1,86 @@ + +from packerlicious import Template +import packerlicious.provisioner as provisioner +import json + + +class TestProvisionerAttributes(object): + + def test_support_only(self): + expected_json = """ + { + "provisioners": [ + { + "type": "shell-local", + "inline": [ "ls" ], + "only": [ "azure-arm" ] + } + ] + } + """ + + p = provisioner.ShellLocal( + inline=["ls"], + only=["azure-arm"] + ) + + t = Template() + t.add_provisioner(p) + + to_json = t.to_json() + assert to_json == json.dumps(json.loads(expected_json), sort_keys=True, indent=2, + separators=(',', ': ')) + + def test_support_only(self): + expected_json = """ + { + "provisioners": [ + { + "type": "shell", + "inline": [ "ls" ], + "except": [ "azure-arm" ] + } + ] + } + """ + + p = provisioner.Shell( + inline=["ls"]) + + p.__setattr__('except', ["azure-arm"]) + + t = Template() + t.add_provisioner(p) + + to_json = t.to_json() + assert to_json == json.dumps(json.loads(expected_json), sort_keys=True, indent=2, + separators=(',', ': ')) + + + + def test_support_pause_before(self): + expected_json = """ + { + "provisioners": [ + { + "type": "shell", + "inline": [ "ls" ], + "pause_before": "10s" + } + ] + } + """ + + p = provisioner.Shell( + inline=["ls"], + pause_before="10s" + ) + + t = Template() + t.add_provisioner(p) + + to_json = t.to_json() + assert to_json == json.dumps(json.loads(expected_json), sort_keys=True, indent=2, + separators=(',', ': ')) + +