forked from ungleich-public/cdist
		
	only delete links; delete existing destination before creating links
Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
This commit is contained in:
		
					parent
					
						
							
								a132adbb03
							
						
					
				
			
			
				commit
				
					
						bba68b6e40
					
				
			
		
					 3 changed files with 53 additions and 4 deletions
				
			
		
							
								
								
									
										26
									
								
								cdist/conf/type/__link/explorer/type
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										26
									
								
								cdist/conf/type/__link/explorer/type
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,26 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | # 2013 Steven Armstrong (steven-cdist armstrong.cc) | ||||||
|  | 
 | ||||||
|  | destination="/$__object_id" | ||||||
|  | 
 | ||||||
|  | if [ ! -e "$destination" ]; then | ||||||
|  |    echo none | ||||||
|  | elif [ -h "$destination" ]; then | ||||||
|  |    echo symlink | ||||||
|  | elif [ -f "$destination" ]; then | ||||||
|  |    type="$(cat "$__object/parameter/type")" | ||||||
|  |    case "$type" in | ||||||
|  |       hard) | ||||||
|  |          link_count=$(ls -l "$destination" | awk '{ print $2 }') | ||||||
|  |          if [ $link_count -gt 1 ]; then | ||||||
|  |             echo hardlink | ||||||
|  |             exit 0 | ||||||
|  |          fi | ||||||
|  |       ;; | ||||||
|  |    esac | ||||||
|  |    echo file | ||||||
|  | elif [ -d "$destination" ]; then | ||||||
|  |    echo directory | ||||||
|  | else | ||||||
|  |    echo unknown | ||||||
|  | fi | ||||||
|  | @ -1,6 +1,7 @@ | ||||||
| #!/bin/sh | #!/bin/sh | ||||||
| # | # | ||||||
| # 2011-2012 Nico Schottelius (nico-cdist at schottelius.org) | # 2011-2012 Nico Schottelius (nico-cdist at schottelius.org) | ||||||
|  | # 2013 Steven Armstrong (steven-cdist at armstrong.cc) | ||||||
| # | # | ||||||
| # This file is part of cdist. | # This file is part of cdist. | ||||||
| # | # | ||||||
|  | @ -40,17 +41,38 @@ case "$type" in | ||||||
| esac | esac | ||||||
| 
 | 
 | ||||||
| state_is="$(cat "$__object/explorer/state")" | state_is="$(cat "$__object/explorer/state")" | ||||||
| state_should=present | state_should="$(cat "$__object/parameter/state")" | ||||||
| [ -f "$__object/parameter/state" ] && state_should="$(cat "$__object/parameter/state")" |  | ||||||
| 
 | 
 | ||||||
| [ "$state_should" = "$state_is" ] && exit 0 | [ "$state_should" = "$state_is" ] && exit 0 | ||||||
| 
 | 
 | ||||||
|  | file_type="$(cat "$__object/explorer/type")" | ||||||
| case "$state_should" in | case "$state_should" in | ||||||
|     present) |     present) | ||||||
|         echo ln ${lnopt} -f \"$source\" \"$destination\" |         if [ "$file_type" = "directory" ]; then | ||||||
|  |             # our destination is currently a directory, move it out of the way | ||||||
|  |             cat << DONE | ||||||
|  | destination_old="\$(mktemp "${destination}.cdist.XXXXXXXXXX")" | ||||||
|  | mv "$destination" "\$destination_old" | ||||||
|  | DONE | ||||||
|  |         fi | ||||||
|  | 
 | ||||||
|  |         # create our link | ||||||
|  |         cat << DONE | ||||||
|  | ln ${lnopt} -f "$source" "$destination" | ||||||
|  | DONE | ||||||
|  | 
 | ||||||
|  |         if [ "$file_type" = "directory" ]; then | ||||||
|  |             # delete the legacy directory | ||||||
|  |             cat << DONE | ||||||
|  | rm -rf "\$destination_old" | ||||||
|  | DONE | ||||||
|  |         fi | ||||||
|     ;; |     ;; | ||||||
|     absent) |     absent) | ||||||
|  |         # only delete if it is a sym/hard link | ||||||
|  |         if [ "$file_type" = "symlink" -o "$file_type" = "hardlink" ]; then | ||||||
|             echo rm -f \"$destination\" |             echo rm -f \"$destination\" | ||||||
|  |         fi | ||||||
|     ;; |     ;; | ||||||
|     *) |     *) | ||||||
|         echo "Unknown state: $state_should" >&2 |         echo "Unknown state: $state_should" >&2 | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								cdist/conf/type/__link/parameter/default/state
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								cdist/conf/type/__link/parameter/default/state
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | present | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue