| 
									
										
										
										
											2016-06-17 21:28:16 +02:00
										 |  |  | Troubleshooting
 | 
					
						
							|  |  |  | ===============
 | 
					
						
							| 
									
										
										
										
											2016-06-23 16:08:59 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-17 21:28:16 +02:00
										 |  |  | Error in manifest is not considered an error by cdist
 | 
					
						
							| 
									
										
										
										
											2013-08-28 15:29:47 +02:00
										 |  |  | -----------------------------------------------------
 | 
					
						
							|  |  |  | 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:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 08:50:56 +02:00
										 |  |  | .. code-block:: sh
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     % 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"
 | 
					
						
							| 
									
										
										
										
											2013-08-28 15:29:47 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 08:50:56 +02:00
										 |  |  | .. code-block:: sh
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # 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-28 15:29:47 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 08:50:56 +02:00
										 |  |  | .. code-block:: sh
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     % cat ~/.cdist/manifest/special
 | 
					
						
							|  |  |  |     #!/bin/sh -e
 | 
					
						
							|  |  |  |     ...
 |