| 
									
										
										
										
											2013-08-28 15:29:47 +02:00
										 |  |  | cdist-troubleshooting(7) | 
					
						
							|  |  |  | ======================== | 
					
						
							|  |  |  | Nico Schottelius <nico-cdist--@--schottelius.org> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | NAME | 
					
						
							|  |  |  | ---- | 
					
						
							|  |  |  | cdist-troubleshooting - common problems and their solutions | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ERROR IN MANIFEST IS NOT CONSIDERED AN ERROR BY CDIST | 
					
						
							|  |  |  | ----------------------------------------------------- | 
					
						
							|  |  |  | Situation: You are executing other scripts from a manifest. | 
					
						
							|  |  |  | This script fails, but cdist does not recognise the error. | 
					
						
							|  |  |  | An example script would be something like this: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | -------------------------------------------------------------------------------- | 
					
						
							|  |  |  | % cat ~/.cdist/manifest/init | 
					
						
							|  |  |  | "$__manifest/special" | 
					
						
							|  |  |  | % cat ~/.cdist/manifest/special | 
					
						
							|  |  |  | #!/bin/sh | 
					
						
							|  |  |  | echo "Here is an unclean exiting script" | 
					
						
							|  |  |  | somecommandthatdoesnotexist | 
					
						
							|  |  |  | echo "I continue here although previous command failed" | 
					
						
							|  |  |  | -------------------------------------------------------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | We can clearly see that **somecommandthatdoesnotexist** | 
					
						
							|  |  |  | will fail in ~/.cdist/manifest/special. But as the custom | 
					
						
							|  |  |  | script is not called with the -e flag (exit on failure) of shell,  | 
					
						
							|  |  |  | it does not lead to an error. And thus cdist sees the exit 0 | 
					
						
							|  |  |  | code of the last echo line instead of the failing command. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | All scripts executed by cdist carry the -e flag.  | 
					
						
							| 
									
										
										
										
											2013-08-29 11:28:53 +02:00
										 |  |  | To prevent the above from happening, there are three solutions available, | 
					
						
							|  |  |  | two of which can be used in the calling script: | 
					
						
							| 
									
										
										
										
											2013-08-28 15:29:47 +02:00
										 |  |  | -------------------------------------------------------------------------------- | 
					
						
							|  |  |  | # Execute as before, but abort on failure | 
					
						
							|  |  |  | sh -e "$__manifest/special" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Source the script in our namespace, runs in a set -e environment: | 
					
						
							|  |  |  | . "$__manifest/special" | 
					
						
							|  |  |  | -------------------------------------------------------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-29 11:28:53 +02:00
										 |  |  | The third solution is to include a shebang header in every script | 
					
						
							|  |  |  | you write to use the -e flag: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | -------------------------------------------------------------------------------- | 
					
						
							|  |  |  | % cat ~/.cdist/manifest/special | 
					
						
							|  |  |  | #!/bin/sh -e | 
					
						
							|  |  |  | ... | 
					
						
							|  |  |  | -------------------------------------------------------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-28 15:29:47 +02:00
										 |  |  | SEE ALSO | 
					
						
							|  |  |  | -------- | 
					
						
							|  |  |  | - cdist(1) | 
					
						
							|  |  |  | - cdist-tutorial(7) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | COPYING | 
					
						
							|  |  |  | ------- | 
					
						
							|  |  |  | Copyright \(C) 2013 Nico Schottelius. Free use of this software is | 
					
						
							|  |  |  | granted under the terms of the GNU General Public License version 3 (GPLv3). |