forked from ungleich-public/cdist
		
	Merge branch '__update_alternatives_improvements' into 'master'
[__update_alternatives] rewrite and support --install See merge request ungleich-public/cdist!936
This commit is contained in:
		
				commit
				
					
						b139ba2a5c
					
				
			
		
					 8 changed files with 107 additions and 16 deletions
				
			
		
							
								
								
									
										4
									
								
								cdist/conf/type/__update_alternatives/explorer/alternatives
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								cdist/conf/type/__update_alternatives/explorer/alternatives
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,4 @@ | ||||||
|  | #!/bin/sh -e | ||||||
|  | 
 | ||||||
|  | update-alternatives --display "$__object_id" 2>/dev/null \ | ||||||
|  |     | awk -F ' - ' '/priority [0-9]+$/ { print $1 }' | ||||||
							
								
								
									
										40
									
								
								cdist/conf/type/__update_alternatives/explorer/link
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										40
									
								
								cdist/conf/type/__update_alternatives/explorer/link
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,40 @@ | ||||||
|  | #!/bin/sh -e | ||||||
|  | 
 | ||||||
|  | # fedora's (update-)alternatives --display output doesn't have | ||||||
|  | # "link <name> is <path>" line, but debian does. so, let's find | ||||||
|  | # out how they store this information. | ||||||
|  | # | ||||||
|  | # debian and friends: | ||||||
|  | #   https://salsa.debian.org/dpkg-team/dpkg/-/blob/master/utils/update-alternatives.c | ||||||
|  | #   see calls to altdb_print_line function | ||||||
|  | # | ||||||
|  | # fedora and friends: | ||||||
|  | #   https://github.com/fedora-sysv/chkconfig/blob/master/alternatives.c | ||||||
|  | #   see calls to parseLine function | ||||||
|  | # | ||||||
|  | # conclusion: it is safe to assume that (master) link is on second line | ||||||
|  | 
 | ||||||
|  | for altdir in \ | ||||||
|  |     /var/lib/dpkg/alternatives \ | ||||||
|  |     /var/lib/alternatives | ||||||
|  | do | ||||||
|  |     if [ ! -f "$altdir/$__object_id" ] | ||||||
|  |     then | ||||||
|  |         continue | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     link="$( awk 'NR==2' "$altdir/$__object_id" )" | ||||||
|  | 
 | ||||||
|  |     if [ -n "$link" ] | ||||||
|  |     then | ||||||
|  |         break | ||||||
|  |     fi | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | if [ -z "$link" ] | ||||||
|  | then | ||||||
|  |     echo "unable to get link for $__object_id" >&2 | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | echo "$link" | ||||||
							
								
								
									
										12
									
								
								cdist/conf/type/__update_alternatives/explorer/path_is
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								cdist/conf/type/__update_alternatives/explorer/path_is
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,12 @@ | ||||||
|  | #!/bin/sh -e | ||||||
|  | 
 | ||||||
|  | path_is="$( update-alternatives --display "$__object_id" 2>/dev/null \ | ||||||
|  |     | awk '/link currently points to/ {print $5}' )" | ||||||
|  | 
 | ||||||
|  | if [ -z "$path_is" ] | ||||||
|  | then | ||||||
|  |     echo "unable to get current path for $__object_id" >&2 | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | echo "$path_is" | ||||||
							
								
								
									
										8
									
								
								cdist/conf/type/__update_alternatives/explorer/path_should_state
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								cdist/conf/type/__update_alternatives/explorer/path_should_state
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,8 @@ | ||||||
|  | #!/bin/sh -e | ||||||
|  | 
 | ||||||
|  | if [ -f "$( cat "$__object/parameter/path" )" ] | ||||||
|  | then | ||||||
|  |     echo 'present' | ||||||
|  | else | ||||||
|  |     echo 'absent' | ||||||
|  | fi | ||||||
|  | @ -1,8 +0,0 @@ | ||||||
| #!/bin/sh -e |  | ||||||
| path="$(cat "$__object/parameter/path")" |  | ||||||
| name="$__object_id" |  | ||||||
| link="$(readlink "/etc/alternatives/$name")" |  | ||||||
| if [ "$path" = "$link" ] |  | ||||||
| then echo present |  | ||||||
| else echo absent |  | ||||||
| fi |  | ||||||
|  | @ -1,6 +1,7 @@ | ||||||
| #!/bin/sh -e | #!/bin/sh -e | ||||||
| # | # | ||||||
| # 2013 Nico Schottelius (nico-cdist at schottelius.org) | # 2013 Nico Schottelius (nico-cdist at schottelius.org) | ||||||
|  | # 2020 Ander Punnar (ander@kvlt.ee) | ||||||
| # | # | ||||||
| # This file is part of cdist. | # This file is part of cdist. | ||||||
| # | # | ||||||
|  | @ -16,12 +17,38 @@ | ||||||
| # | # | ||||||
| # You should have received a copy of the GNU General Public License | # You should have received a copy of the GNU General Public License | ||||||
| # along with cdist. If not, see <http://www.gnu.org/licenses/>. | # along with cdist. If not, see <http://www.gnu.org/licenses/>. | ||||||
| # |  | ||||||
| 
 | 
 | ||||||
| if [ "$(cat "$__object/explorer/state")" = 'present' ] | path_is="$( cat "$__object/explorer/path_is" )" | ||||||
| then exit 0 | 
 | ||||||
|  | path_should="$( cat "$__object/parameter/path" )" | ||||||
|  | 
 | ||||||
|  | if [ "$path_is" = "$path_should" ] | ||||||
|  | then | ||||||
|  |     exit 0 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | if [ "$( cat "$__object/explorer/path_should_state" )" = 'absent' ] && [ -z "$__cdist_dry_run" ] | ||||||
|  | then | ||||||
|  |     echo "$path_should does not exist in target" >&2 | ||||||
|  |     exit 1 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| path="$(cat "$__object/parameter/path")" |  | ||||||
| name="$__object_id" | name="$__object_id" | ||||||
| echo "update-alternatives --quiet --set '$name' '$path'" | 
 | ||||||
|  | alternatives="$( cat "$__object/explorer/alternatives" )" | ||||||
|  | 
 | ||||||
|  | if ! echo "$alternatives" | grep -Fxq "$path_should" | ||||||
|  | then | ||||||
|  |     if [ ! -f "$__object/parameter/install" ] | ||||||
|  |     then | ||||||
|  |         echo "$path_should is not in $name alternatives." >&2 | ||||||
|  |         echo 'Please install missing packages or use --install to add path to alternatives.' >&2 | ||||||
|  |         exit 1 | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     link="$( cat "$__object/explorer/link" )" | ||||||
|  | 
 | ||||||
|  |     echo "update-alternatives --install '$link' '$name' '$path_should' 1000" | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | echo "update-alternatives --set '$name' '$path_should'" | ||||||
|  |  | ||||||
|  | @ -19,6 +19,12 @@ path | ||||||
|    Use this path for the given alternative |    Use this path for the given alternative | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | BOOLEAN PARAMETERS | ||||||
|  | ------------------ | ||||||
|  | install | ||||||
|  |    Add (``update-alternatives --install``) missing path to alternatives. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| EXAMPLES | EXAMPLES | ||||||
| -------- | -------- | ||||||
| 
 | 
 | ||||||
|  | @ -36,11 +42,12 @@ SEE ALSO | ||||||
| AUTHORS | AUTHORS | ||||||
| ------- | ------- | ||||||
| Nico Schottelius <nico-cdist--@--schottelius.org> | Nico Schottelius <nico-cdist--@--schottelius.org> | ||||||
|  | Ander Punnar <ander@kvlt.ee> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| COPYING | COPYING | ||||||
| ------- | ------- | ||||||
| Copyright \(C) 2013 Nico Schottelius. You can redistribute it | Copyright \(C) 2013 Nico Schottelius and 2020 Ander Punnar. You can | ||||||
| and/or modify it under the terms of the GNU General Public License as | redistribute it and/or modify it under the terms of the GNU General Public | ||||||
| published by the Free Software Foundation, either version 3 of the | License as published by the Free Software Foundation, either version 3 of the | ||||||
| License, or (at your option) any later version. | License, or (at your option) any later version. | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								cdist/conf/type/__update_alternatives/parameter/boolean
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								cdist/conf/type/__update_alternatives/parameter/boolean
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | install | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue