29 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
1. Manifests need type explorers to be run before
 | 
						|
    Only this way the manifest can use the values
 | 
						|
 | 
						|
2. Type explorers can depend on the (successful) execution of other objects
 | 
						|
    A type explorer may lookup values (ownership, size, processes, etc.)
 | 
						|
    that are depending on the code of other objects.
 | 
						|
 | 
						|
3. The 'require="a" b' dependency specifies only that execution of b needs to wait until a is finished
 | 
						|
    Other requirements given at another position may not be
 | 
						|
    executed before b, as cdist interprets require="a" as 
 | 
						|
    "a is everything that is needed to realise b"
 | 
						|
 
 | 
						|
4. The 'require' state is thus *not* suitable to trigger reloads
 | 
						|
    A type b, which uses the require="" statement to wait for all
 | 
						|
    require="" dependencies, may be executed in an incomplete
 | 
						|
    status.
 | 
						|
 | 
						|
5. Depending on multiple dependencies defined at different locations requires all objects to be present
 | 
						|
    Because otherwise the dependent object cannot be sure that the
 | 
						|
    list of objects it waits for is complete.
 | 
						|
 | 
						|
6. If a statement requires all objects to be present, all manifests must have run already.
 | 
						|
    If all manifests have run already, also all type explorers have run already (#1).
 | 
						|
    If all type explorers have run already, some objects may have been finished completly already (#2).
 | 
						|
 | 
						|
7. Because of #4 and #6, we need to introduce another dependency that allows reloading after
 | 
						|
 | 
						|
8. Because the object could be finished already due to a 'require' dependency, we need another script
 | 
						|
    Maybe "gen-post-run-local", "gen-post-run-remote"
 |