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)
 | 
				
			||||||
        echo rm -f \"$destination\"
 | 
					        # only delete if it is a sym/hard link
 | 
				
			||||||
 | 
					        if [ "$file_type" = "symlink" -o "$file_type" = "hardlink" ]; then
 | 
				
			||||||
 | 
					            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