From 2ff286cf1d536bf6c83e81233726ffbf4688d21e Mon Sep 17 00:00:00 2001 From: Steven Armstrong Date: Wed, 25 Apr 2012 17:18:16 +0200 Subject: [PATCH] inherit dependencies from defining object when setting up implicit dependencies through autorequire Signed-off-by: Steven Armstrong --- lib/cdist/emulator.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/cdist/emulator.py b/lib/cdist/emulator.py index c4b84feb..99b34554 100644 --- a/lib/cdist/emulator.py +++ b/lib/cdist/emulator.py @@ -160,10 +160,19 @@ class Emulator(object): def record_auto_requirements(self): """An object shall automatically depend on all objects that it defined in it's type manifest. """ - # __object_name is the name of the object whose type manifest is currenlty executed + # __object_name is the name of the object whose type manifest is currently executed __object_name = os.environ.get('__object_name', None) if __object_name: - _object = self.cdist_object.object_from_name(__object_name) - # prevent circular dependencies - if not _object.name in self.cdist_object.requirements: - _object.requirements.append(self.cdist_object.name) + # The object whose type manifest is currently run + parent = self.cdist_object.object_from_name(__object_name) + # The object currently being defined + current_object = self.cdist_object + # current_object shall have all dependencies that it's parent has + for req in parent.requirements: + if req not in current_object.requirements: + current_object.requirements.append(req) + # As parent defined current_object it shall automatically depend on it. + # But only if the user hasn't said otherwise. + # Must prevent circular dependencies. + if not parent.name in current_object.requirements: + parent.requirements.append(current_object.name)