diff --git a/openshift/dynamic/apply.py b/openshift/dynamic/apply.py index 8fcd07a4..b975b950 100644 --- a/openshift/dynamic/apply.py +++ b/openshift/dynamic/apply.py @@ -207,11 +207,11 @@ def get_delta(last_applied, actual, desired, position=None): if actual_value is None: patch[k] = desired_value elif isinstance(desired_value, dict): - p = get_delta(last_applied.get(k), actual_value, desired_value, this_position) + p = get_delta(last_applied.get(k, {}), actual_value, desired_value, this_position) if p: patch[k] = p elif isinstance(desired_value, list): - p = list_merge(last_applied.get(k), actual_value, desired_value, this_position) + p = list_merge(last_applied.get(k, []), actual_value, desired_value, this_position) if p: patch[k] = [item for item in p if item] elif actual_value != desired_value: diff --git a/test/unit/test_apply.py b/test/unit/test_apply.py index 24797e18..a6cf0417 100644 --- a/test/unit/test_apply.py +++ b/test/unit/test_apply.py @@ -283,6 +283,37 @@ } } } + ), + dict( + last_applied = { + 'kind': 'MadeUp', + 'toplevel': { + 'original': 'entry' + } + }, + actual = { + 'kind': 'MadeUp', + 'toplevel': { + 'original': 'entry', + 'another': { + 'nested': { + 'entry': 'value' + } + } + } + }, + desired = { + 'kind': 'MadeUp', + 'toplevel': { + 'original': 'entry', + 'another': { + 'nested': { + 'entry': 'value' + } + } + } + }, + expected = {} ) ]