forked from ungleich-public/cdist
		
	add doc/dev document that resulted in the troubleshooting document
Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
This commit is contained in:
		
					parent
					
						
							
								f50374af51
							
						
					
				
			
			
				commit
				
					
						bc4a9fda3a
					
				
			
		
					 1 changed files with 56 additions and 0 deletions
				
			
		
							
								
								
									
										56
									
								
								docs/dev/logs/2013-07-25.source-error-does-not-stop-cdist
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								docs/dev/logs/2013-07-25.source-error-does-not-stop-cdist
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,56 @@
 | 
			
		|||
Symptom: 
 | 
			
		||||
    running something in a manifest and that fails does not exist
 | 
			
		||||
    the cdist run
 | 
			
		||||
 | 
			
		||||
Analysis:
 | 
			
		||||
    Find out what the shell does:
 | 
			
		||||
 | 
			
		||||
    [23:56] bento:testshell% cat a.sh 
 | 
			
		||||
    # source something that fails
 | 
			
		||||
    . b.sh
 | 
			
		||||
    [23:57] bento:testshell% cat b.sh 
 | 
			
		||||
    nosuchcommand
 | 
			
		||||
    [23:57] bento:testshell% sh -e a.sh
 | 
			
		||||
    a.sh: 2: .: b.sh: not found
 | 
			
		||||
    [23:57] bento:testshell% echo $?
 | 
			
		||||
    2
 | 
			
		||||
 | 
			
		||||
    -> exit 2 -> looks good
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    Find out what the python does:
 | 
			
		||||
 | 
			
		||||
    [23:57] bento:testshell% python3
 | 
			
		||||
    Python 3.3.2 (default, May 21 2013, 15:40:45) 
 | 
			
		||||
    [GCC 4.8.0 20130502 (prerelease)] on linux
 | 
			
		||||
    Type "help", "copyright", "credits" or "license" for more information.
 | 
			
		||||
    >>> import subprocess
 | 
			
		||||
    >>> subprocess.check_call(["/bin/sh", "-e", "a.sh"])
 | 
			
		||||
    a.sh: 2: .: b.sh: not found
 | 
			
		||||
    Traceback (most recent call last):
 | 
			
		||||
      File "<stdin>", line 1, in <module>
 | 
			
		||||
      File "/usr/lib/python3.3/subprocess.py", line 544, in check_call
 | 
			
		||||
        raise CalledProcessError(retcode, cmd)
 | 
			
		||||
    subprocess.CalledProcessError: Command '['/bin/sh', '-e', 'a.sh']' returned non-zero exit status 2
 | 
			
		||||
    >>> 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Conclusion:
 | 
			
		||||
    Manifests that execute (!) other shell scripts does
 | 
			
		||||
    not necessarily give the -e flag to the other script
 | 
			
		||||
        -> called script can have failures, but exit 0
 | 
			
		||||
            if something the last thing executed does exit 0!
 | 
			
		||||
 | 
			
		||||
Solution:
 | 
			
		||||
    Instead of doing stuff like
 | 
			
		||||
    "$__manifest/special"
 | 
			
		||||
 | 
			
		||||
    use
 | 
			
		||||
    sh -e "$__manifest/special"
 | 
			
		||||
 | 
			
		||||
    or source the script:
 | 
			
		||||
    . "$__manifest/special"
 | 
			
		||||
 | 
			
		||||
    (runs the script in the same namespace/process as everything in the
 | 
			
		||||
    calling script)
 | 
			
		||||
        
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue