new special value require="CDIST_HONOR_MANIFEST_ORDER"

which tells cdist to execute types in the manifest order
This commit is contained in:
Daniel Heule 2014-01-17 23:35:02 +01:00
parent f23999c8d3
commit 824381e6ca
2 changed files with 32 additions and 0 deletions

View file

@ -71,6 +71,7 @@ class Emulator(object):
raise MissingRequiredEnvironmentVariableError(e.args[0])
self.object_base_path = os.path.join(self.global_path, "object")
self.typeorder_path = os.path.join(self.global_path, "typeorder")
self.type_name = os.path.basename(argv[0])
self.cdist_type = core.CdistType(self.type_base_path, self.type_name)
@ -152,6 +153,9 @@ class Emulator(object):
else:
self.cdist_object.create()
self.cdist_object.parameters = self.parameters
# record the created object in typeorder file
with open(self.typeorder_path, 'a') as tofd:
tofd.write(self.cdist_object.name + os.linesep)
# Record / Append source
self.cdist_object.source.append(self.object_source)
@ -188,6 +192,18 @@ class Emulator(object):
# Ignore empty fields - probably the only field anyway
if len(requirement) == 0: continue
if requirement == "CDIST_HONOR_MANIFEST_ORDER":
# load object name created bevor this one from typeorder file ...
with open(self.typeorder_path, 'r') as tofd:
lines = tofd.readlines()
# replace the placeholder with the last created object
try:
requirement = lines[-2].strip()
except IndexError:
# if no second last line, we are on the first object, so do not set a requirement
continue
# Raises an error, if object cannot be created
try:
cdist_object = self.cdist_object.object_from_name(requirement)

View file

@ -128,6 +128,22 @@ All objects that are created in a type manifest are automatically required
from the type that is calling them. This is called "autorequirement" in
cdist jargon.
You can tell cdist to execute all types in the order in which they are created
in the manifest by setting require to the special value of
"CDIST_HONOR_MANIFEST_ORDER".
--------------------------------------------------------------------------------
# Tells cdist to execute all types in the order in which they are created ...
export require="CDIST_HONOR_MANIFEST_ORDER"
__sample_type 1
__sample_type 2
__example_type 23
# Now this types are executed in the creation order
--------------------------------------------------------------------------------
EXAMPLES
--------