Try2 to make cdist honor the manifest order,
this implementation has some more lines of code, but no collision with the require variable.
This commit is contained in:
parent
824381e6ca
commit
61aec12ba1
2 changed files with 38 additions and 20 deletions
|
@ -154,8 +154,8 @@ class Emulator(object):
|
|||
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)
|
||||
with open(self.typeorder_path, 'a') as typeorderfile:
|
||||
print(self.cdist_object.name, file=typeorderfile)
|
||||
|
||||
# Record / Append source
|
||||
self.cdist_object.source.append(self.object_source)
|
||||
|
@ -184,6 +184,24 @@ class Emulator(object):
|
|||
|
||||
def record_requirements(self):
|
||||
"""record requirements"""
|
||||
#from pudb import set_trace; set_trace();
|
||||
|
||||
if "EXECUTE_TYPES_IN_CREATION_ORDER" in self.env and self.env['EXECUTE_TYPES_IN_CREATION_ORDER'] == 'true':
|
||||
# load object name created bevor this one from typeorder file ...
|
||||
with open(self.typeorder_path, 'r') as typecreationfile:
|
||||
typecreationorder = typecreationfile.readlines()
|
||||
# get the type created bevore this one ...
|
||||
try:
|
||||
lastcreatedtype = typecreationorder[-2].strip()
|
||||
if 'require' in self.env:
|
||||
self.env['require'] += " " + lastcreatedtype
|
||||
else:
|
||||
self.env['require'] = lastcreatedtype
|
||||
self.log.debug("Injecting require for EXECUTE_TYPES_IN_CREATION_ORDER: %s for %s", lastcreatedtype, self.cdist_object.name)
|
||||
except IndexError:
|
||||
# if no second last line, we are on the first type, so do not set a requirement
|
||||
pass
|
||||
|
||||
|
||||
if "require" in self.env:
|
||||
requirements = self.env['require']
|
||||
|
@ -192,18 +210,6 @@ 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)
|
||||
|
@ -212,7 +218,7 @@ class Emulator(object):
|
|||
raise
|
||||
|
||||
|
||||
self.log.debug("Recording requirement: " + requirement)
|
||||
self.log.debug("Recording requirement: %s", requirement)
|
||||
|
||||
# Save the sanitised version, not the user supplied one
|
||||
# (__file//bar => __file/bar)
|
||||
|
|
|
@ -128,18 +128,30 @@ 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.
|
||||
|
||||
|
||||
EXECUTE_TYPES_IN_CREATION_ORDER is a EXPERIMENTAL FEATURE !
|
||||
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".
|
||||
in the manifest by exporting EXECUTE_TYPES_IN_CREATION_ORDER with the value true.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
# Tells cdist to execute all types in the order in which they are created ...
|
||||
export require="CDIST_HONOR_MANIFEST_ORDER"
|
||||
export EXECUTE_TYPES_IN_CREATION_ORDER=true
|
||||
__sample_type 1
|
||||
__sample_type 2
|
||||
require="__some_type_somewhere/id" __sample_type 2
|
||||
__example_type 23
|
||||
# Now this types are executed in the creation order
|
||||
# Now this types are executed in the creation order until the variable is unset
|
||||
unset EXECUTE_TYPES_IN_CREATION_ORDER
|
||||
# all now following types cdist makes the order ..
|
||||
__not_in_order_type 42
|
||||
|
||||
# how it works :
|
||||
# this lines above are translated to:
|
||||
__sample_type 1
|
||||
require="__some_type_somewhere/id __sample_type/1" __sample_type 2
|
||||
require="__sample_type/2" __example_type 23
|
||||
__not_in_order_type 42
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue