forked from ungleich-public/cdist
		
	[type/__uci] Apply all commands in a single batch
This commit is contained in:
		
					parent
					
						
							
								ec984f81b5
							
						
					
				
			
			
				commit
				
					
						3e5f18d409
					
				
			
		
					 3 changed files with 51 additions and 0 deletions
				
			
		
							
								
								
									
										43
									
								
								cdist/conf/type/__uci/files/uci_apply.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								cdist/conf/type/__uci/files/uci_apply.sh
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,43 @@
 | 
				
			||||||
 | 
					changes=$(uci changes)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if test -n "${changes}"
 | 
				
			||||||
 | 
					then
 | 
				
			||||||
 | 
						echo 'Uncommited UCI changes were found on the target:'
 | 
				
			||||||
 | 
						printf '%s\n\n' "${changes}"
 | 
				
			||||||
 | 
						echo 'This can be caused by manual changes or due to a previous failed run.'
 | 
				
			||||||
 | 
						echo 'Please investigate the situation, revert or commit the changes, and try again.'
 | 
				
			||||||
 | 
						exit 1
 | 
				
			||||||
 | 
					fi >&2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					check_errors() {
 | 
				
			||||||
 | 
						# reads stdin and forwards non-empty lines to stderr.
 | 
				
			||||||
 | 
						# returns 0 if stdin is empty, else 1.
 | 
				
			||||||
 | 
						! grep -e . >&2
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commit() {
 | 
				
			||||||
 | 
						uci commit
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rollback() {
 | 
				
			||||||
 | 
						printf '\nAn error occurred when trying to commit UCI transaction!\n' >&2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						uci changes \
 | 
				
			||||||
 | 
						| sed -e 's/^-//' -e 's/\..*\$//' \
 | 
				
			||||||
 | 
						| sort -u \
 | 
				
			||||||
 | 
						| while read -r _package
 | 
				
			||||||
 | 
						  do
 | 
				
			||||||
 | 
							  uci revert "${_package}"
 | 
				
			||||||
 | 
							  echo "${_package}"  # for logging
 | 
				
			||||||
 | 
						  done \
 | 
				
			||||||
 | 
						| awk '
 | 
				
			||||||
 | 
						  BEGIN { printf "Reverted changes in: " }
 | 
				
			||||||
 | 
						  { printf "%s%s", (FNR > 1 ? ", " : ""), $0 }
 | 
				
			||||||
 | 
						  END { printf "\n" }' >&2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uci_apply() {
 | 
				
			||||||
 | 
						uci batch 2>&1 | check_errors && commit || rollback
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -91,3 +91,11 @@ in
 | 
				
			||||||
		exit 1
 | 
							exit 1
 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
esac
 | 
					esac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if test -s "${__object:?}/files/uci_batch.txt"
 | 
				
			||||||
 | 
					then
 | 
				
			||||||
 | 
						cat "${__type:?}/files/uci_apply.sh"
 | 
				
			||||||
 | 
						printf "uci_apply <<'EOF'\n"
 | 
				
			||||||
 | 
						cat "${__object:?}/files/uci_batch.txt"
 | 
				
			||||||
 | 
						printf '\nEOF\n'
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										0
									
								
								cdist/conf/type/__uci/nonparallel
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								cdist/conf/type/__uci/nonparallel
									
										
									
									
									
										Normal file
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue